⑧無限loop、ログ出力、LED PinのON/OFF、delay処理
このコード部分の話
#![allow(unused)] fn main() { loop { info!("green"); green_led.set_high().unwrap(); timer.delay_ms(2000); green_led.set_low().unwrap(); info!("orange"); for _ in 1..4 { orange_led.set_high().unwrap(); timer.delay_ms(500); orange_led.set_low().unwrap(); timer.delay_ms(500); } orange_led.set_low().unwrap(); info!("red"); red_led.set_high().unwrap(); timer.delay_ms(2000); red_led.set_low().unwrap(); } }
Loop
loop
は、文字通り無限に繰り返されるという意味です。
今回のコードでは、break
がないのでloop{}
の中の処理が無限に繰り返されます。
LEDのHigh、Low
#![allow(unused)] fn main() { green_led.set_high().unwrap(); ... green_led.set_low().unwrap(); }
.set_high()
で、GPIOをHighにします。
unwrap()
.set_high()
の後ろに.unwrap()
がついていますが、これりは意味があります。
set_high()
は、返り値にResult
を持つため次のようにエラー処理を書く必要があります。
#![allow(unused)] fn main() { match green_led.set_high(){ Ok(_) => {}, Err(e) => { // Error }, }; }
重要な箇所においては、このエラー処理は適切に記述するべきだと思います。
しかし、カジュアルにコーディングを楽しみたい、それほど重要でない場所にはunwrap()
という文法を用いることで、Ok
の時はその中身を取り出してくれます。(これがunwrapの意味です)
一方で、Err
の時はpanicになるので使い方には注意が必要です。
タイマーのDelay
#![allow(unused)] fn main() { timer.delay_ms(500); }
500msで待つ処理です。文字通りです。
for文
#![allow(unused)] fn main() { for _ in 1..4 { ... } }
for
は、決まった回数繰り返すという文法です。
このfor
は、1..4
つまり1,2,3(4より小さいという意味です)の値を_
に入れて繰り返し処理をするというものです。
また_
は、その値を使わずに_
に入れておくという意味になりますので、今回は3回処理を繰り返すというfor
になります。