実現したいこと
M5Core2に付属しているLEDを蛍のように光らせるプログラムを作りたい。
発生している問題・分からないこと
自分なりにwhile文やif文を使ってプログラムを作成してみたが、思うように動かなかった。
該当のソースコード
vs
1#include <M5Core2.h> 2void setup() { 3 M5.begin(true, true, true, true); 4 M5.Lcd.setTextSize(3); 5 M5.Lcd.setCursor(0, 0); 6 M5.Lcd.printf("LED PWM2"); 7} 8 9#define PERIOD 10000 // PWMの周期10000μs 10int ontime = 0; // LEDがONの時間 グローバル変数 11 12void loop() { 13 ontime += 50; // 毎回ontimeを増やす 14 if (ontime > PERIOD) { ontime = 0; } // PERIODを超えたら0に戻す 15 16 M5.Axp.SetLed(true); // LED ON 17 delayMicroseconds(ontime); //待機 マイクロ秒単位 18 M5.Axp.SetLed(false); // LED OFF 19 delayMicroseconds(PERIOD - ontime); //待機 マイクロ秒単位 20}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コード #include <M5Core2.h> void setup() { M5.begin(true, true, true, true); M5.Lcd.setTextSize(3); M5.Lcd.setCursor(0, 0); M5.Lcd.printf("LED PWM2"); } #define PERIOD 10000 // PWMの周期10000μs int ontime = 0; // LEDがONの時間 グローバル変数 void loop() { if (ontime == 0) { while (ontime == PERIOD) { ontime += 50; M5.Axp.SetLed(true); // LED ON delayMicroseconds(ontime); //待機 マイクロ秒単位 M5.Axp.SetLed(false); // LED OFF delayMicroseconds(PERIOD - ontime); //待機 マイクロ秒単位 } } if(ontime == PERIOD) { while (ontime == 0) { ontime -= 50; M5.Axp.SetLed(true); // LED ON delayMicroseconds(ontime); //待機 マイクロ秒単位 M5.Axp.SetLed(false); // LED OFF delayMicroseconds(PERIOD - ontime); //待機 マイクロ秒単位 } } }
補足
上記のように変更してみました。上記のプログラムでやりたかったこととしてはまず、ontimeが最初は0なのでloopの中のif(ontime==0)のほうが選択され、ontimeがPERIODの値になるまで50ずつ光らせながら増加させます。次にif(ontime==PERIOD)のほうに処理が向かい、今度は10000から50ずつontimeが0になるまで、光らせながら減少させます。これをvoid loop()の中で繰り返し行えば蛍のように光ると思ったのですが、うまくいきまでんでした。初心者なのでwhile文とif文をこのように使ってよいのかもわかりません。エラーは出なかったので、LEDを光らせる部分のプログラムが悪かったのかもしれないと思いました。
例えば、void loop()の中で0から100まで一定の数ずつ増加させ、そのあと100から0まで一定の数ずつ減少させるのを繰りかえすプログラムができれば実現できるのではないかと思いました。
追記
現状はLEDが真っ暗なままで無反応です。どういうふうにしたいかと言われると、LEDを蛍みたいに光らせたいです。
回答1件
あなたの回答
tips
プレビュー