2014_01_18_Arduinoでストップウォッチ製作
7セグLEDの制御をしたかっただけ。
以下、ソースコードです。
ソースコード(クリックで展開します。)
#includestatic unsigned long swTime_old; unsigned long Jikan; int count1,count2,count3,count4; static boolean switchFlag=false; int count; void setup() { pinMode(1,OUTPUT); pinMode(2,INPUT); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); MsTimer2::set(100,counter); MsTimer2::start(); attachInterrupt(0,timeStartStop,FALLING); } void loop(){ Jikan=millis(); if(digitalRead(2)==LOW) { detachInterrupt(0); if((Jikan-swTime_old)%25==0) { count+=1; if(count==2) { attachInterrupt(0,timeStartStop,FALLING); count=0; } } } //カウント制御 if(count1>=10) { count1=0; count2+=1; if(count2>=10) { count2=0; count3+=1; if(count3>=10) { count3=0; count4+=1; if(count4>=10) { count4=0; } } } } //ダイナミック制御 if(Jikan % 16 ==4) { dynamic(); decode(1,count1); dynamic1(); } else if(Jikan%16==8) { dynamic(); decode(2,count2); dynamic2(); } else if(Jikan%16==12) { dynamic(); decode(3,count3); dynamic3(); } else if(Jikan%16==0) { dynamic(); decode(4,count4); dynamic4(); } else{} } /****************** * 作成した関数 * ******************/ //ボタンをおした時の動作 void timeStartStop() { if(switchFlag==false) { MsTimer2::stop(); switchFlag=!switchFlag; }else{ MsTimer2::start(); switchFlag=!switchFlag; } } //counter void counter() { count1+=1; } //decode関数 //桁と番号を指定して光らせる。 void decode(int keta,int number) { if(keta==1) { digitalWrite(6,LOW); if(number==0) numberInput(0); if(number==1)numberInput(1); if(number==2)numberInput(2); if(number==3)numberInput(3); if(number==4)numberInput(4); if(number==5)numberInput(5); if(number==6)numberInput(6); if(number==7)numberInput(7); if(number==8)numberInput(8); if(number==9)numberInput(9); } if(keta==2) { digitalWrite(8,LOW); if(number==0)numberInput(0); if(number==1)numberInput(1); if(number==2)numberInput(2); if(number==3)numberInput(3); if(number==4)numberInput(4); if(number==5)numberInput(5); if(number==6)numberInput(6); if(number==7)numberInput(7); if(number==8)numberInput(8); if(number==9)numberInput(9); } if(keta==3) { digitalWrite(9,LOW); if(number==0) numberInput(0); if(number==1)numberInput(1); if(number==2)numberInput(2); if(number==3)numberInput(3); if(number==4)numberInput(4); if(number==5)numberInput(5); if(number==6)numberInput(6); if(number==7)numberInput(7); if(number==8)numberInput(8); if(number==9)numberInput(9); } if(keta==4) { digitalWrite(12,LOW); if(number==0) numberInput(0); if(number==1)numberInput(1); if(number==2)numberInput(2); if(number==3)numberInput(3); if(number==4)numberInput(4); if(number==5)numberInput(5); if(number==6)numberInput(6); if(number==7)numberInput(7); if(number==8)numberInput(8); if(number==9)numberInput(9); } } //数字の点灯パターン void numberInput(int number) { if(number==0) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(1,HIGH); digitalWrite(10,HIGH); digitalWrite(3,LOW); digitalWrite(5,LOW); } if(number==1) { //B,C digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,LOW); digitalWrite(1,LOW); digitalWrite(10,LOW); digitalWrite(3,LOW); digitalWrite(11,LOW); digitalWrite(5,LOW); } if(number==2) { //B,C digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,LOW); digitalWrite(13,HIGH); digitalWrite(1,HIGH); digitalWrite(10,LOW); digitalWrite(3,LOW); digitalWrite(5,HIGH); } if(number==3) { //A,B,C,D,G digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(5,HIGH); digitalWrite(10,LOW); digitalWrite(1,LOW); digitalWrite(3,LOW); } if(number==4) { //A,B,C,D,E,F digitalWrite(11,LOW); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,LOW); digitalWrite(1,LOW); digitalWrite(10,HIGH); digitalWrite(5,HIGH); digitalWrite(3,LOW); } if(number==5) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,LOW); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(1,LOW); digitalWrite(10,HIGH); digitalWrite(5,HIGH); digitalWrite(3,LOW); } if(number==6) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,LOW); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(1,HIGH); digitalWrite(10,HIGH); digitalWrite(5,HIGH); digitalWrite(3,LOW); } if(number==7) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,LOW); digitalWrite(1,LOW); digitalWrite(10,LOW); digitalWrite(5,LOW); digitalWrite(3,LOW); } if(number==8) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(1,HIGH); digitalWrite(10,HIGH); digitalWrite(5,HIGH); digitalWrite(3,LOW); } if(number==9) { //A,B,C,D,E,F digitalWrite(11,HIGH); digitalWrite(7,HIGH); digitalWrite(4,HIGH); digitalWrite(13,HIGH); digitalWrite(1,LOW); digitalWrite(10,HIGH); digitalWrite(5,HIGH); digitalWrite(3,LOW); } } //ダイナミック制御 void dynamic() { digitalWrite(12,HIGH); digitalWrite(9,HIGH); digitalWrite(8,HIGH); digitalWrite(6,HIGH); } void dynamic4() { digitalWrite(12,LOW); digitalWrite(9,HIGH); digitalWrite(8,HIGH); digitalWrite(6,HIGH); } void dynamic3() { digitalWrite(12,HIGH); digitalWrite(9,LOW); digitalWrite(8,HIGH); digitalWrite(6,HIGH); } void dynamic2() { digitalWrite(12,HIGH); digitalWrite(9,HIGH); digitalWrite(8,LOW); digitalWrite(6,HIGH); } void dynamic1() { digitalWrite(12,HIGH); digitalWrite(9,HIGH); digitalWrite(8,HIGH); digitalWrite(6,LOW); }