風呂に入っている時に
ひょっとして dealy 関数に何か消費電流低減とかの技があったりするのか?
と思って風呂上がってさっそく実験してみました。
プログラムはこれ
loop(
while(true){
delay( 10000 );
}
}
ESP32
delay 無し 79.7mA
delay( 1 ); 49.7mA
delay( 10 ); 48.6mA
delay( 100 ); 48.6mA
delay( 1000 ); 48.5mA
delay( 10000 ); 48.5mA
うーーん、確かに効果はある。10以上にしても変わらないけどね。
delay関数の中でsleepとかしてるんだろうか?
ならば、UNOならどうなんだろう?
Arduino UNO
delay 無し 51.0mA
delay( 1 ); 61.0mA
delay( 10 ); 61.2mA
delay( 100 ); 61.2mA
delay( 1000 ); 61.2mA
delay( 10000 ); 61.2mA
あれれ?UNOだとdelayの方が消費電流多いね。
ここまでやって気が付いた。
無限ループで動作止めてる時の消費電流気にしてどうすんだ!
結論
ESP32のdelay関数は消費電流が小さくなる。
だけど無限ループに入れるdelayはやっぱり意味がない。
おまけ
デバッグで動作を止める時私は
while(1);
と1行で済ませてます。
と、
(タイマ割り込み設定)
WAI
の違いみたいなものでしょうか(違)
あ、arduinoは全然わからないので間違ってたらアレなんですが、
loop() {
でしょうか。
メリクリ&良き新年をお迎えください。
(PythonはBASICと同じインタプリタなのでmain()が無く上から下に抜けて終了するのです)
また、その無限ループの中にsleepを入れるのを定番にしているようです。(消費電力低減のため?)
一方Arduinoではmain()は明記されておらず setup()とloop()の中身を書くのですが
実は
main(){
setup();
while(1){
loop(){
}
}
という構造になっていて loop()は必ずループするので終わらないわけです。(組み込みなので)
この著者はラズパイのPythonの記事をESP32のArduinoに使い回しで書いているようなので
loop()がmain()だと思ってloop()の中で1回だけ実行させるために無限ループを書いてしまっているのです。
1回だけ実行させるのならsetup()に書けばいいのです。
どっちにしても無限ループの中のdelay()は意味不明です。
ちょっと早いですが良いお年を!
While True:
ではなく
pause()
を使うのだそうです。