基本は、スイッチを押している時にだけLEDが点灯するスケッチです。このスイッチとLEDが2組あります。
スイッチ1を押すとLED1が点灯、スイッチがOFFになってもLEDを2秒点灯させます。
スイッチ2も同じように押すとLED2が2秒間点灯。2つのスイッチを押すタイミングは決まっていません。
どちらが先になるかはわかりません。2つ同時の場合もあります。
コード
int sw_state1 = 0; int sw_state2 = 0; void setup() { pinMode(3, INPUT); pinMode(4, INPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { sw_state1 = digitalRead(3); if (sw_state1 == HIGH) { digitalWrite(12, HIGH); delay(2000); } else { digitalWrite(12, LOW); } sw_state2 = digitalRead(4); if (sw_state2 == HIGH) { digitalWrite(13, HIGH); delay(2000); } else { digitalWrite(13, LOW); } }
dalay(200)ぐらいにすれば、スイッチとLEDの点灯はイメージ通りに反応します。
dalay(2000)にして2秒点灯させようとすると、先に点灯したLEDが消灯してからでないと
もう一方のスイッチが反応しません。
(時間は特に決まってはいませんが数秒点灯を保持したいということです)
一方のスイッチを押してLEDが点灯していても、
もう一方のスイッチを押したらもう1つのLEDを点灯させたいです。
2つのスイッチは同時に押される可能性もあります。
Arduinoの接続するピンの場所を変えてみたり、
スイッチを内臓プルアップにしてみたり、
ハード的な変更もしてみました。
プログラム初心者ですが、
このコードだと、dalayで遅らせている時間が過ぎないと次の行のコードを実行できないということでしょうか
2つのスイッチのコードを並列(この表現でいいのかわかりませんが)に書かないとだめということでしょうか
試しに書いてみたコードです。
void loop(){ sw_state1 = digitalRead(3); if (sw_state1 == HIGH) { sw1(); } else { digitalWrite(12, LOW); } sw_state2 = digitalRead(4); if (sw_state2 == HIGH) { sw2(); } else { digitalWrite(13, LOW); } } void sw1() { digitalWrite(12, HIGH); delay(2000); } void sw2() { digitalWrite(13, HIGH); delay(2000); }
結果は、同じでした。
何かアドバイスをお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/13 13:28