現在マイコンにて、スイッチを押して離すとLEDの点滅が切り替わるプログラムを考えており、以下のプログラムを作成しました。
スイッチはプッシュスイッチで、変数SWとし、押すと0が入力され、離すと1が入力されます。
LEDは変数LEDとし、0で点灯、1で消灯となります。
また、スイッチ、LEDに関しての変数をそれぞれSW、LEDとしておりますが、これは簡略的に記述したもので、実際はPORT.○○といった変数となっております。
C
1int SWwasON = 1; /*スイッチの状態が変化した際に、変化前の状態を記録する変数。最初はSW=1(入力なし)の状態なので、SWwasON = 1とする*/ 2 3if(SW==0){ /*スイッチが押された状態*/ 4 SWwasON=0; 5} 6 7if((SW==1)&&(SWwasON==0)){ /*スイッチへの入力が解除される(先日は、ここを(SW==0)とする致命的な記入ミスをしておりました。) 8「スイッチの状態が変化前は入力がオン(SWwasON=0)であり、変化後の現在はオフ(SW=1)」の条件を満たしているか*/ 9 LED=1-LED; /*スイッチの点滅状態を反転。最初はLED=1で消灯状態*/ 10 SWwasON=1; 11}
しかしながら、上記のコードを実行しても、LEDの点灯は行われませんでした。
上記の2つ目のif文if((SW==1)&&(SWwasON==0))で、&&(SWwasON==0)をカットした以下のプログラム実行したところ、スイッチを押すとLEDが消灯、離していると点灯するというプログラムとなりました。
C
1int SWwasON = 1; 2 3if(SW==0){ 4 SWwasON=0; 5} 6 7if(SW==1){ 8 LED=1-LED; 9 SWwasON=1; 10}
このプログラムの場合、最初はLED=1で消灯状態となっているので、最初から二つ目のif文の条件を満たし、LEDが点灯、スイッチを押すとその条件を満足しないのでLEDが消灯する、という流れなので、このプログラムはあっているようにも感じます。
1つ目のコードは、どの点が間違っていますでしょうか?
回答2件
あなたの回答
tips
プレビュー