※ ChatGPTを利用し、要約された質問です(原文:スイッチのソースの書き方について)
スイッチのソースの書き方について
このQ&Aのポイント
ライントレースのタッチセンサー1つを使ってON/OFFができるようにする方法を教えてください
白い部分でもスイッチがきくようにするにはどのようにすればいいのですか?
スイッチのソースコードを改良して、白い部分でもON/OFFができるようにしたいです
ライントレースのタッチセンサー1つを使ってON/OFFができるようにしたいのですが
下記のソースだとライントレースをしていて、黒いラインの上にいるときにしかON/OFFできません。
これを白い部分(ラインから外れたところ)でもスイッチがきくようにするにはどのようにすればいいでしょうか?
/* ライトセンサーの判定値 */
#define kuro 10
/* Touch Sensor control */
/* タッチセンサーの状態を判断
戻り値 0:タッチセンサーが押されていない
1:タッチセンサーが押されている
*/
int GetTouch(unsigned char ch)
{
if (pAnalog->Pin6[ch][pAnalog->Actual[ch]] > 1000) {
return 1;
} else {
return 0;
}
}
int migi(unsigned char ch) /*右まわり*/
{
MotorPower(CH_C, -20); /* 出力ポートCのパワーを-20%(逆回転)に変更 */
MotorPower(CH_B, 40); /* 出力ポートBのパワーを10%(逆回転)に変更 */
return 0;
}
int hidari(unsigned char ch)/*左まわり*/
{
MotorPower(CH_C, 40); /* 出力ポートCのパワーを10%(逆回転)に変更 */
MotorPower(CH_B, -20); /* 出力ポートBのパワーを-20%(逆回転)に変更 */
return 1;
}
int mae(unsigned char ch) /*前進*/
{
MotorPower(CH_C,45 ); /* 出力ポートCのパワーを10%(逆回転)に変更 */
MotorPower(CH_B,40 ); /* 出力ポートBのパワーを-20%(逆回転)に変更 */
return 1;
}
/* Light Sensor control */
/* ライトセンサーの値を取得 */
unsigned char GetSensor(unsigned char ch)
{
return((unsigned char)pUart->Raw[ch][pUart->Actual[ch]][0]);
}
int main(void)
{
int R = 0;
MotorReset(CH_B|CH_C); /* モーターの状態をリセット */
MotorStart(CH_B|CH_C); /* モーター起動 */
while(1) { /* 永久ループ */
if(GetTouch(CH_2) == 1){
while(GetTouch(CH_2) == 0);
MotorPower(CH_B|CH_C, 0); /*出力ポートB,Cのパワーを0にする*/
while(GetTouch(CH_2) == 1); /* はなされるまで待つ */
while(GetTouch(CH_2) == 0); /*押されるまで待つ*/
MotorPower(CH_B|CH_C, 40); /*出力ポートB,Cのパワーを50、50にする*/
while(GetTouch(CH_2) == 1);
}
clock_t start,end;
if (GetSensor(CH_3) > kuro ){ /* 入力ポート3のライトセンサーが設定値を超えている場合…*/
start = clock(); /*時間測定スタート(ここから)*/
if( R == 1 ){
migi(CH_B|CH_C); /*右回り*/
}else{
hidari(CH_B|CH_C); /*左回り*/
}//elseのカッコ
}//ifのカッコ
while(GetSensor(CH_3) > kuro){/* 入力ポート3のライトセンサーが設定値を超えている場合…*/
end = clock();/*時間測定終了(ここまで)*/
if(((double)(end - start)/CLOCKS_PER_SEC)>0.2){
if( R == 1 ){
hidari(CH_B|CH_C); /*左回り*/
R = 0;
while(GetSensor(CH_3) > kuro);/* 入力ポート3ライトセンサーが設定値を超えている場合は待つ*/
}else{
migi(CH_B|CH_C); /*右回り*/
R = 1;
while(GetSensor(CH_3) > kuro);/* 入力ポート3ライトセンサーが設定値を超えている場合は待つ*/
}//elseのカッコ
}//ifのカッコ
}//whileのカッコ
mae(CH_B|CH_C); /*前進する*/
}//whileのカッコ
}//mainのカッコ