アプリ版:「スタンプのみでお礼する」機能のリリースについて

void setup() {
pinMode(2,INPUT); //2ピンを入力に設定、タクトスイッチへ接続
pinMode(13,OUTPUT); //13ピンを出力 白LEDへ接続
pinMode(8,OUTPUT); //8ピンを出力 赤LEDへ接続 
pinMode(7,OUTPUT); //7ピンを出力 緑LEDへ接続 
Serial.begin(9600) ;
}

void loop() {

int ii = 2; //変数iiを宣言し、それに2を代入する

digitalWrite(7,HIGH) ; //赤LED点灯




while (ii > 0) { //変数iiの値が0より大きい間は以下の文を実行

Serial.println(ii) ;
delay (1000);


START :

if (digitalRead(2) == HIGH) { //2ピンの状態を調べる、HIGHなら次の行へ

digitalWrite(8,HIGH) ; //赤LED点灯
digitalWrite(7,LOW) ; //緑LED消灯

Serial.println(8) ;
delay (1000);


if (digitalRead(2) == LOW) { //2ピンの状態を調べる、HIGHなら次の行へ

digitalWrite(8,LOW) ; //赤LED消灯
digitalWrite(7,HIGH) ; //緑LED点灯

Serial.println(7) ;
delay (1000);

ii -- ; //変数iiの値から1を引いてwhile文へ戻る
}
else {

goto START ;

}
}
}

digitalWrite(13,HIGH) ; //白LEDが2秒間ONする

delay (2000);

digitalWrite(13,LOW) ; //白LEDがOFFする

delay (500);


}


//////////////////////////////////////////////////////
arduino uno用に上記のようなスケッチを作りました。

1・タクトスイッチを押す前には赤LEDが点灯
2・タクトスイッチを押すと押している間だけ赤LEDが消えて緑LEDが点灯
3・タクトスイッチから手を離すと再び赤LEDが点灯
4・上記の1~3を2回繰り返すと赤LEDは点灯したままで白LEDが2秒点灯した後消灯する。

という内容です。

現在のままだと白LEDが点灯して、消灯した後、再びタクトスイッチを押すと1から動作を始めます。
ただ、希望としては一度白が点灯して消灯した後はスイッチの入力を受け付けず何もしない状態にしたいと思います。
要するに1~4までを1度実行したらそれで終わりにしたいのです(リセットをかけない限り)。
そのためには上記のスケッチをどのようにすればよいでしょうか?

また、今回はgoto命令を使用していますが、goto命令を使用するのは望ましくないとある本で読みました。理由は良くわかりませんが、goto命令を使用しないとなるとどのようにすれば同じ動作を実現できるでしょうか?

素人のスケッチなので分かりにくくて申し訳ありません。
よろしくお願いいたします。

A 回答 (2件)

arduinoは、全く、詳しくないですが、


手元のまともな関連書籍で、
loop関数内で、
 return;
を書いている例がありました。それで、どうでしょう。
    • good
    • 0

面倒なので具体的に書くつもりはありませんが…



loop()を抜けると、再度loop()が呼ばれることになります。
なので、状態を保持する変数はいわゆるグローバル変数として宣言してください。
あるいはloop()から抜けることが無いように無限ループを作って下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!