【情報共有】手のひらサイズコンピュータArduinoの時間計測関数millis()の評価
■手のひらサイズコンピュータArduinoのmillis()関数の評価
音楽に光が連動する光音共演コンピュータは手のひらサイズのコンピュータArduino Unoを使用しています。重要な役割を演じています。音楽に合わせて発光する光を2.5秒間固定するために、Arduino Uno側でArduino起動からの経過時間をミリ秒単位で返すMillis()関数を使い、直近の発光から2500ミリ秒経過しているかの判断を125ミリ秒ごとに判断するようにしました。2500ミリ秒経過していない場合は、現在点灯している3色のLEDの状態を変更しない、というロジックです。これでLEDの光の色が変わるのは2500ミリ秒ごとになるはずです。
しかし実際にプログラムを動かしてみると、2500ミリ秒未満でLEDの色が変わってしまう事象がたまに発生しました。繰り返し同じ音楽を再生してみると、曲の同じ場所で事象が発生するようです。メモリの状態で発生するのでしょうか?本当の原因はわかりませんでした。
幸い光音共演コンピュータはPC側と処理を分担しているため、当該処理をPC側に埋め込み、Arduino側ではシリアル通信経由でPC側から指示された色を発色するだけにしたところ、きれいに2.5秒ごとにLEDの色が変わりました。
推測の域を出ませんが、millis()関数自体は正しく動くのですが、Arduinoのメモリの状態などに依存して時間の計測が不正確になる場合があるということでしょうか。