Groveの4-Digit Displayを使ってみたが、Arduino互換のCrowduinoではライブラリに修正が必要だった。これについてはモヤモヤするものがあるがメモ。

Grove - 4-Digit Display 

ライブラリは以下より。
File:DigitalTube.zip

 サンプルスケッチのClockDisplayはArduino LeonardoとArduino UNO(SMD)では問題なく動作したのだが、互換品のCrowduinoでは5Vモードで最初数回コロンが点滅して停止、3V3モードでは動作するという状態だったので調べた。
 スケッチ側から停止している部分を探すとtm1637.display()〜の箇所で止まっている。この部分に対応するライブラリがなんらかの原因で止まっている。動作電圧を切り替えると動いたり止まったりするのでタイミングの問題だろうか。LEDドライバはTM1637という石で最大6桁まで制御ができるらしいのだが、データシートを見つけることができなかった。仕方がないのでライブラリ TM1637.cpp 内のCLKとDATAをピンの信号を上げ下げしている部分に適当にdelay(10);をかませてみたら5Vでも動作するようになった。
 次はこのdelay(10);を少しづつ削っていく。最終的に

void TM1637:writeByte(int8_t wr_data) 以下にある

digitalWrite(Clkpin,LOW); //wait for the ACK の次の行に

delay(1);

が必須となった。これがないとCrowduinoの5Vではハングする。確認のためまる1日走らせて止まらないことを確認。

 さて、なにがモヤモヤしているかというとこれは
// なぜか動く
行になってしまっているからだ。本来どうすべきか。
・データシートを見て該当するタイミングの箇所を確認する
・波形を観測。5Vと3V3でどのような差があるか、タイミング違反はどの箇所か
・ソース修正によりタイミング違反が解消されていることを観測
・連続ラン確認
・さらに温度を振ってより厳しい条件で確認

 なぜか動くものはなぜか止まることもあり得るのよ。

 やはりリファレンスとして純正品のボードは必要。Arduino互換品はピンが直接マイコンから接続されているので問題ないように思えるのだが、違いはあるみたいだ。

2014ledtube