mbedで搭載されているLED1からLED4までの4つのLEDを用いて、押しボタン・スイッチが押されるたびに点灯する順が反転する処理がしたいです。
具体的には以下のような処理です。また、左からLED1、LED2、LED3、LED4となっています。
★★★★↑↓
☆★★★↑↓繰り返し
★☆★★↑↓ ★:消灯
★★☆★↑↓ ☆:点灯
★★★☆↑↓
リセットボタンを押して、まず☆★★★(LED1)から順に0.1秒ずつ点灯させ、次のLEDの処理の間には0.2秒ごとにLEDの変化があります。その後、外部のボタンを押されたとき、割り込み入力でp5ポートで点灯する順が変わります。また、連続してスイッチを押すとLEDの点灯が左右に行き来したりします。
試したこと
mbedで書いているコードの言語はC++で以下のような処理を考えました。
c++
1#include "mbed.h" 2InterruptIn button(p5); // 割り込み入力としてp5を設定 3// LED1,LED2,LED3,LED4のそれぞれの配列を4個用意して、定義 4DigitalOut myled[4]={LED1,LED2,LED3,LED4}; 5 6// 割り込み処理(ボタンが押されたとき) 7void flip() { 8 int i; 9 while(1) { 10 for(i=3; i>=0; i--){ 11 myled[i] = !myled[i]; 12 wait(0.1); 13 myled[i] = 0; 14 wait(0.2); 15 } 16 } 17} 18 19// メイン処理 20int main() { 21 int i; 22 button.rise(&flip); 23 while(1) { 24 for(i=0; i<4; i++){ 25 myled[i] = !myled[i]; 26 wait(0.1); 27 myled[i] = 0; 28 wait(0.2); 29 } 30 } 31}
上記のコードを試したところ、ボタンを押したとき、逆の順に点灯することが出来ましたが、再びボタンを押したところ、無限ループということもあり、逆の順のまま、繰り返し処理がされてしまいます。ボタンを押されたとき、順序が逆になる処理が思いつきません。どうすれば、ボタンを連続して押したとき、行き来できるようなプログラムができますでしょうか。よろしければ教えてください。
mbedの操作が未経験なので、困っています。
よろしくお願いいたします。
補足情報(使用している機材)
使用している機材はmbed LPC1768と外部ボタン一個です。
ブレッドボードを使用して、抵抗やジャンパー線で接続しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 21:57