【自作】[おまけ編]Arduinoでディジタルカウンターを作る!
【自作】Arduinoでディジタルカウンターを作る! - よしエレ研究所のブログ (hatenablog.com)
以前、カウンターを自作しましたが、少しだけアレンジを加えてみたので紹介します。
” オープニングをつける⁉ ” ⇩
#Arduino #デジタルカウンター
— よしエレ研究所 (@8jrMEWW6zIq3UAt) 2022年9月11日
過去に作ったカウンターにオープニングをつけてみました! pic.twitter.com/jX7blGUd0W
電源を入れた時、セグメントの表示にアレンジを加えてみました。
少しアレンジがあるだけで、カッコイイですね!
↓プログラム_____________________________
int outA = 3; //セグメントA
int outB = 2; //セグメントB
int outC = 8; //セグメントC
int outD = 7; //セグメントD
int outE = 6; //セグメントE
int outF = 4; //セグメントF
int outG = 5; //セグメントG
int outDP = 9; //セグメントDP(小数点用の点)
int outc1 = 10; //セグメント(1桁目)COM
int outc2 = 11; //セグメント(2桁目)COM
int outc3 = 12; //セグメント(3桁目)COM
int T = 40; //スイッチング周期(μs)
int Dty = 40; //デューティ比(セグメント明るさ調整 0~100[%])
int N = 0; //繰り返し回数N初期値0
int M = 10; //繰り返し回数M設定値
int O = 0; //(仮)
int Ton = ( (T*Dty)/100 ); //ターンオン時間
int Toff = ( (T*(100-Dty))/100 ); //ターンオフ時間
int Tout = (T*10); //変化しない時間(ms)
int t = 0; //カウント周期 初期値0
int L = 0; //タイヤ外周距離(cm)
int X = 0; //センサー信号カウント回数初期値0
int l = 000; //総合走行距離 初期値0
int A = 0; //【入力しない】計算に使う
int B = 0; //【入力しない】計算に使う
int C = 0; //【入力しない】計算に使う
int D = 0; //【入力しない】計算に使う
int E = 0; //【入力しない】(オープニング用)初回カウント
int F = 100; //(オープニング用)---移行時間
int G = 1500; //(オープニング用)全点灯時間
int H = 500; //(オープニング用)-.-.-.点滅周期
int DP2 = LOW;
int DP3 = LOW;
void setup() {
pinMode(A0, INPUT); //センサー信号
pinMode(A1, INPUT); //明るさ信号(2.2kΩ)
pinMode(A2, INPUT); //明るさ信号(2.2kΩ)
pinMode(A3, INPUT_PULLUP); //タクトスイッチ左(表示リセット)
pinMode(A4, INPUT_PULLUP); //タクトスイッチ右(教示切替)
pinMode(outA, OUTPUT);
pinMode(outB, OUTPUT);
pinMode(outC, OUTPUT);
pinMode(outD, OUTPUT);
pinMode(outE, OUTPUT);
pinMode(outF, OUTPUT);
pinMode(outG, OUTPUT);
pinMode(outDP, OUTPUT);
pinMode(outc1, OUTPUT);
pinMode(outc2, OUTPUT);
pinMode(outc3, OUTPUT);
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
}
void loop() {
if(E<1){delay(1000);
digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(H); //無
digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);delay(H); //-.-.-.
digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(H); //無
digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);delay(H); //-.-.-.
digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);delay(H); //無
digitalWrite(outF,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F); //3F
digitalWrite(outA,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F);digitalWrite(outF,LOW); //3A
digitalWrite(outA,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F); //2A
digitalWrite(outA,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);delay(F); //1A
digitalWrite(outB,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outA,LOW);delay(F); //1B
digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outB,LOW);delay(F); //1G
digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F); //2G
digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F); //3G
digitalWrite(outE,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);delay(F); //3E
digitalWrite(outD,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outE,LOW);delay(F); //3D
digitalWrite(outD,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F); //2D
digitalWrite(outD,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);delay(F);//1D
digitalWrite(outC,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outD,LOW);delay(F); //1C
digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc1,LOW);digitalWrite(outC,LOW);delay(F); //1G
digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F); //2G
digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);delay(F); //3G
digitalWrite(outF,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outG,LOW);delay(F); //3F
digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc1,HIGH);digitalWrite(outF,LOW);delay(F); //3G
digitalWrite(outG,HIGH);digitalWrite(outc3,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc1,HIGH);delay(F); //2G
digitalWrite(outG,HIGH);digitalWrite(outc3,LOW);digitalWrite(outc2,LOW);digitalWrite(outc1,LOW);delay(F); //すべてG
digitalWrite(outF,HIGH);digitalWrite(outE,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);delay(F); //縦も
digitalWrite(outA,HIGH);digitalWrite(outD,HIGH);delay(F); //8
digitalWrite(outDP,HIGH);delay(G); //DPも
E=E+1;}
digitalWrite(outA,LOW);digitalWrite(outB,LOW);digitalWrite(outC,LOW);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH); //無
B = 0;
C = 0;
while(digitalRead(A0)==HIGH){D=D+1;C=1;break;}
if(D<2){l=l+C;}
if(digitalRead(A0)==LOW){D=0;}
if(digitalRead(A3)==LOW){l=0;}
A = l;
B = 0;
C = 0;
if(A>=900){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-900;B = 2;} //3桁目 9
if(A>=800){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-800;B = 2;} //3桁目 8
if(A>=700){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-700;B = 2;} //3桁目 7
if(A>=600){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-600;B = 2;} //3桁目 6
if(A>=500){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-500;B = 2;} //3桁目 5
if(A>=400){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-400;B = 2;} //3桁目 4
if(A>=300){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-300;B = 2;} //3桁目 3
if(A>=200){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-200;B = 2;} //3桁目 2
if(A>=100){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);A = A-100;B = 2;} //3桁目 1
if(B>1){C = 1;}
if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,HIGH);digitalWrite(outc3,LOW);} //3桁目 0
while(N < M){N = N+1; digitalWrite(outc3,LOW);delayMicroseconds(Ton);digitalWrite(outc3,HIGH);delayMicroseconds(Toff);} //明るさ調整
N = 0;
B = 0;
C = 0;
digitalWrite(outA, LOW);
digitalWrite(outB, LOW);
digitalWrite(outC, LOW);
digitalWrite(outD, LOW);
digitalWrite(outE, LOW);
digitalWrite(outF, LOW);
digitalWrite(outG, LOW);
digitalWrite(outc1, HIGH);
digitalWrite(outc2, HIGH);
digitalWrite(outc3, HIGH);
if(A>=90){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-90;B = 2;} //2桁目 9
if(A>=80){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-80;B = 2;} //2桁目 8
if(A>=70){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-70;B = 2;} //2桁目 7
if(A>=60){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-60;B = 2;} //2桁目 6
if(A>=50){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-50;B = 2;} //2桁目 5
if(A>=40){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-40;B = 2;} //2桁目 4
if(A>=30){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-30;B = 2;} //2桁目 3
if(A>=20){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-20;B = 2;} //2桁目 2
if(A>=10){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);A = A-10;B = 2;} //2桁目 1
if(B>1){C = 1;}
if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,HIGH);digitalWrite(outc2,LOW);digitalWrite(outc3,HIGH);} //2桁目 0
while(N < M){N = N+1; digitalWrite(outc2,LOW);delayMicroseconds(Ton);digitalWrite(outc2,HIGH);delayMicroseconds(Toff);} //明るさ調整
N = 0;
B = 0;
C = 0;
digitalWrite(outA, LOW);
digitalWrite(outB, LOW);
digitalWrite(outC, LOW);
digitalWrite(outD, LOW);
digitalWrite(outE, LOW);
digitalWrite(outF, LOW);
digitalWrite(outG, LOW);
digitalWrite(outc1, HIGH);
digitalWrite(outc2, HIGH);
digitalWrite(outc3, HIGH);
if(A>=9){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-9;B = 2;} //1桁目 9
if(A>=8){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-8;B = 2;} //1桁目 8
if(A>=7){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-7;B = 2;} //1桁目 7
if(A>=6){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-6;B = 2;} //1桁目 6
if(A>=5){digitalWrite(outA,HIGH);digitalWrite(outB,LOW);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-5;B = 2;} //1桁目 5
if(A>=4){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,HIGH);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-4;B = 2;} //1桁目 4
if(A>=3){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-3;B = 2;} //1桁目 3
if(A>=2){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,LOW);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,LOW);digitalWrite(outG,HIGH);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-2;B = 2;} //1桁目 2
if(A>=1){digitalWrite(outA,LOW);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,LOW);
digitalWrite(outE,LOW);digitalWrite(outF,LOW);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);A = A-1;B = 2;} //1桁目 1
if(B>1){C = 1;}
if(C<1){digitalWrite(outA,HIGH);digitalWrite(outB,HIGH);digitalWrite(outC,HIGH);digitalWrite(outD,HIGH);
digitalWrite(outE,HIGH);digitalWrite(outF,HIGH);digitalWrite(outG,LOW);digitalWrite(outDP,LOW);
digitalWrite(outc1,LOW);digitalWrite(outc2,HIGH);digitalWrite(outc3,HIGH);} //1桁目 0
while(N < M){N = N+1; digitalWrite(outc1,LOW);delayMicroseconds(Ton);digitalWrite(outc1,HIGH);delayMicroseconds(Toff);} //明るさ調整
N = 0;
if(l>999){l=0;}
}
___________________________________
※一部必要のない文もあります。
YouTube チャンネル名:よしエレ研究所
URL : https://www.youtube.com/channel/UCo3LKDNnY0GGRDPGOEST_vg
Twitter アカウント:よしエレ研究所 @8jrMEWW6zlq3UAt