さて、最近Arduinoのプログラミングに飛び込みました。現在、基本的な点滅機能と、LEDを青、緑、赤の色に変えるRGB LEDプログラムがあります。「作業ステータス」のインジケータとして機能するはずのシンプルで基本的な黄色のLEDを2つ持っています。そしてRGBのLED。黄色のLEDを常に点滅させておきたいのですが、RGBの色を正常に遷移させたいと思います。2 つのプロセスを同時に実行できるようにコードを作成するにはどうすればよいですか?
3 に答える
何かのようなもの:
int timekeeper=0;
while (1)
{
do_fade(timekeeper);
if (timekeeper%100==0) {
do_blink_off();
}
if (timekeeper%100==50) {
do_blink_on();
}
delay(10);
timekeeper++;
}
これはメモリから行われるため、走行距離は異なる場合があります。タイムキーパーを do_fade() に渡したので、フェードの進行状況を把握できます。do_fade() はフェードを更新し、すぐに戻ります。do_blink_on() と do_blink_off() は似ています - 変更する必要があるものを変更してから戻ります。この例では、do_fade() は 10 ミリ秒ごとに呼び出され、do_blink_off() は 1 秒ごとに呼び出され、do_blink_on() は 1/2 秒後に呼び出されます (つまり、1/2 秒、オフ、1/2 秒、オン、1 /2 秒...)
AMADANONの答えは機能しますが、このような複数のタスクを実行するための推奨される方法は、タイマー割り込みを使用することです。たとえば、コードがフェードした後に何か他のことをしたい場合、それらの他の関数のタイミングが LED の点滅に干渉します。これを解決するには、Arduino に組み込まれているタイマーを使用します。
バックグラウンドでは、タイマーがカウントアップし、特定の値に達するとカウンターがリセットされ、LED のオン/オフを切り替える割り込みサービス ルーチンがトリガーされます。
タイマー割り込みで LED を点滅させるチュートリアルは次のとおりです: http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/