これまでスケッチについては、よそ様のをもってきて少し手直しする程度でした。
今後、本格的に使っていくにあたり、今日は少しarduinoの言語を調べてみた。主に以下を参考にしました。
・
Language Reference
・
Arduino 日本語リファレンス
1) 基本仕様
・C/C++をベース
一般的なOSでのC言語はmain()が最初に呼ばれるが、Arduinoでは1:Setup() 2:loop()で以降、loop()が繰り返されて呼ばれる仕組みということね。
・
AVR Libcにリンクされていてその関数を利用可能
なければ、このライブラリを直接つかって拡張可能ということですね。
2) delayとsleep
arduinoの基本的な使い方は制御や測定。ということで、loop()の繰り返しという基本的な仕組みは納得。これまで使ってきたスケッチは、delay()を使って周期をコントロールしているもばかりで、それが普通なのかと思ってましたが、、、
「熟練したプログラマーは、よほどスケッチが簡単になる場合を除き、10ms以上のイベントのコントロールにdelay()を使うことは避けるでしょう」
そうなんですか^^;
理由は、「計算やピン操作といった他の処理が実質的に止まってしまう」から。
なので、millis()を使いなさいと。つまり、delay(1000)なら、
unsigned long last = 0;
unsigned long time = 0;
loop(){
time = millis();
if(time - last > 1000){
// 処理を実行
・・・
last = time;
}
}
ってことですかね。javaのgetTime()、WindowsのCTime::GetTime()的な処理ですね。
unsigned longなので約50日でオーバフローするので、連続使用するときはその考慮も必要ですね。
ただし、割り込み処理は実行されるので、簡単なものだとdelay()でもよさげ。
このmillis()だと、loop()は常に呼ばれるので、省電力ということではdelay()の方がよい気がします。
さて、じゃぁsleep()は?と思ってみてみたところリファレンスにはない。
こちらをみると、sleepはAVR Libcにはあるようです。スリープメソッドも何種類かあって、処理実行後にパワーダウン、外部割り込みで起きるようなこともできるようです。
今日はここまで。次はC/C++以外の言語でarduinoを使用する方法とか調べてみようかと思います。Processingとか。