カウントダウン・タイマーをAdafruit I2C通信の7セグメント4桁ディスプレイ(スイッチサイエンスで販売している)を利用して2桁のタイムを表示しています。基本となるコードは、https://github.com/adafruit/Adafruit_LED_Backpack/blob/master/examples/sevenseg/
sevenseg.ino このサンプル・コードをベースにしています。
2桁した使わないので、センター部分の2つを使ってタイムを表示させています。
その時に使うコードは、以下のコードをベースにしています。もちろん、実際に使っているコードの表示するタイム部分はちゃんと時間を測って表示させています。あくまでも、表示に関する質問です。
#include <Wire.h> // Enable this line if using Arduino Uno, Mega, etc. #include <Adafruit_GFX.h> #include "Adafruit_LEDBackpack.h" Adafruit_7segment matrix = Adafruit_7segment(); void setup() { #ifndef __AVR_ATtiny85__ Serial.begin(9600); #endif matrix.begin(0x70); } void loop() { uint16_t blinkcounter = 0; boolean drawDots = false; for (uint16_t counter = 25; counter > 0; counter --) { matrix.writeDigitNum(1, (counter / 10) % 10); matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); } }
このコードでは、1の位になった時に、10の位の部分は、0が表示されたままです。もちろんこのままでも問題はありませんが、0を消灯させたいのですが一度つけた部分を消す方法がわかりません。
今は簡易的に、両端のディスプレイ部分をテープで隠して、ダミーの信号を入れて対処しています。そのコードが以下になります。
uint16_t blinkcounter = 0; boolean drawDots = false; for (uint16_t counter = 25; counter > 0; counter --) { if (counter >= 10){ matrix.writeDigitNum(1, (counter / 10) % 10); matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); }else{ matrix.print(1); // ダミーとして入れるコード matrix.writeDigitNum(3, counter % 10); matrix.writeDisplay(); delay(1000); } }
これで、一番右に1を表示させることで対応しています。このライブラリーでは、一旦表示させた部分は、表示したままで電源をオフしてリセットしないと出来ないような気がします。各桁の表示をオン、オフできれば、もっとスマートに表示できると思うのですが、どなたか良いアイデアがあれば、よろしくお願い申し上げます。

回答2件
あなたの回答
tips
プレビュー