ここでは、タイマー割り込み機能を利用して、3桁の数字を動的表示する手法を紹介します。この方法は、4〜6桁の表示に応用できます。
#include <MsTimer2.h>次の命令で割り込みの間隔(m秒単位)と割り込む関数を指定します。
MsTimer2::set(10, intr );//10mS間隔で intr メソッドを呼び出す実際の割り込みの開始と、終了には以下のメソッドを利用します。
MsTimew2(start); MsTimer3(stop);
//タイマー表示 #include <MsTimer2.h> //下位7bitがセグメントのパターン byte segment[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x67,0x0}; int val[3]; byte dg,pdg,isg; byte data; int secc; int cnt; long pt,ct; void setup(){ Serial.begin(9600); byte i; for(i = 2; i <= 15; i++){ pinMode(i,OUTPUT); } //タイマー割り込みの設定 MsTimer2::set(4, intr ); MsTimer2::start(); secc = 0; pt=millis(); val[0]=0; val[1]=10; val[2]=10; dg=0; pdg=2; }//setup void loop(){ ct=millis(); if((ct-pt)>1000) { secc++; val[2] = secc/100; val[1] = (secc-val[2]*100)/10; val[0] = secc % 10; if(val[2]==0) val[2]=10; if((val[2]==10) && (val[1]==0)) val[1]=10; pt=ct; if(secc>1000) secc=0; } }//loop void intr(){ //割り込みでLEDを表示 dg++; if(dg==2) dg=0; data = segment[val[dg]]; //各セグメントを点灯する for(isg=0;isg<7;isg++){ //a-gのセグメント設定 //>>は右シフト、& はand演算 、isg番のbitを表示 digitalWrite(6+isg,bitRead(data,isg)); } digitalWrite(2+pdg,HIGH); digitalWrite(2+dg,LOW); pdg=dg; }