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