//Program Up/Down Counter Arduino Uno
//Output 4 Digit 7 Segment Common Anode
//www.herwanto.my.id
int segA = 13;
int segB = 12;
int segC = 11;
int segD = 10;
int segE = 9;
int segF = 8;
int segG = 7;
int segDot = 6;
int dig1 =5;
int dig2 =4;
int dig3 =3;
int dig4 =2;
int tomUp = 0;
int tomDown = 0;
int tomSet =0;
int tomRes=0;
int nilCount = 0;
int angka =0;
int sat =0;
int pul =0;
int rat =0;
int rib =0;
int satSet =0;
int pulSet =0;
int ratSet =0;
int ribSet =0;
int digSet=0;
int nilSet=0;
void setup() {
pinMode(A0,INPUT); //pin A0 in Up Counter
pinMode(A1,INPUT); //pin A1 in Down Counter
pinMode(A2,INPUT); //pin A2 in Down Counter
pinMode(A3,INPUT); //pin A3 in Down Counter
pinMode(segA,OUTPUT); //inisialisasi pin 13 out seg a
pinMode(segB,OUTPUT); //inisialisasi pin 12 out seg b
pinMode(segC,OUTPUT); //inisialisasi pin 11 out seg c
pinMode(segD,OUTPUT); //inisialisasi pin 10 out seg d
pinMode(segE,OUTPUT); //inisialisasi pin 9 out seg e
pinMode(segF,OUTPUT); //inisialisasi pin 8 out seg f
pinMode(segG,OUTPUT); //inisialisasi pin 7 out seg g
// pinMode(segDot,OUTPUT); //pin 6 output seg titik
pinMode(dig1,OUTPUT); //digit 1
pinMode(dig2,OUTPUT); //digit 2
pinMode(dig3,OUTPUT); //digit
pinMode(dig4,OUTPUT); //digit 4
}
void loop() {
bacaTombol();
if (tomUp==1 ||tomDown==1 || tomSet==1 || tomRes==1){
if(tomUp==1){
nilCount=nilCount+1;
tomUp=0;
}
if(tomDown==1){
nilCount=nilCount-1;
tomDown=0;
}
if(tomRes==1){
nilCount=0;
tomRes=0;
}
if(nilCount>9999){
nilCount=0;
}
if(nilCount<0){
nilCount=9999;
}
if(tomSet==1){
nilCount=0;
tomSet=0;
setCount();
}//set
}
tulisNilai();
}
void setCount(){
digSet=1;
ribSet=0;
ratSet=0;
pulSet=0;
satSet=0;
while(digSet==1&&tomSet==0){ //set digit ribuan
ribSet=nilSet*1000;
nilCount=ribSet+ratSet+pulSet+satSet;
tulisNilai();
bacaTombol();
if(tomUp==1){
nilSet=nilSet+1;
tomUp=0;
}
if(tomDown==1){
nilSet=nilSet-1;
tomDown=0;
}
if(tomSet==1){
nilSet=0;
digSet=digSet+1;
tomSet=0;
}
if(tomRes==1){
nilSet=0;
nilCount=ribSet+ratSet+pulSet+satSet;
digSet=0;
tomRes=0;
}
if(nilSet>9){
nilSet=0;
}
if(nilSet<0){
nilSet=9;
}
}
while(digSet==2&&tomSet==0){ //set digit
ratusan
ratSet=nilSet*100;
nilCount=ribSet+ratSet+pulSet+satSet;
tulisNilai();
bacaTombol();
if(tomUp==1){
nilSet=nilSet+1;
tomUp=0;
}
if(tomDown==1){
nilSet=nilSet-1;
tomDown=0;
}
if(tomSet==1){
nilSet=0;
digSet=digSet+1;
tomSet=0;
}
if(tomRes==1){
nilSet=0;
nilCount=ribSet+ratSet+pulSet+satSet;
// ribSet=0;ratSet=0;pulSet=0;satSet=0;
digSet=0;
tomRes=0;
}
if(nilSet>9){
nilSet=0;
}
if(nilSet<0){
nilSet=9;
}
}
while(digSet==3&&tomSet==0){ //set digit
puluhan
pulSet=nilSet*10;
nilCount=ribSet+ratSet+pulSet+satSet;
tulisNilai();
bacaTombol();
if(tomUp==1){
nilSet=nilSet+1;
tomUp=0;
}
if(tomDown==1){
nilSet=nilSet-1;
tomDown=0;
}
if(tomSet==1){
nilSet=0;
digSet=digSet+1;
tomSet=0;
}
if(tomRes==1){
nilCount=ribSet+ratSet+pulSet+satSet;
//ribSet=0;ratSet=0;pulSet=0;satSet=0;
nilSet=0;
digSet=0;
tomRes=0;
}
if(nilSet>9){
nilSet=0;
}
if(nilSet<0){
nilSet=9;
}
}
while(digSet==4&&tomSet==0){ //set digit satuan
satSet=nilSet;
nilCount=ribSet+ratSet+pulSet+satSet;
tulisNilai();
bacaTombol();
if(tomUp==1){
nilSet=nilSet+1;
tomUp=0;
}
if(tomDown==1){
nilSet=nilSet-1;
tomDown=0;
}
if(tomSet==1){
nilSet=0;
digSet=1;
tomSet=1;
}
if(tomRes==1){
nilSet=0;
nilCount=ribSet+ratSet+pulSet+satSet;
digSet=0;
tomRes=0;
}
if(nilSet>9){
nilSet=0;
}
if(nilSet<0){
nilSet=9;
}
}
}
void out7seg(){
switch(angka){
case 0:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,LOW);
digitalWrite(segF,LOW);
digitalWrite(segG,HIGH);
digitalWrite(segDot,HIGH);
break;
case 1:
digitalWrite(segA,HIGH);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,HIGH);
digitalWrite(segE,HIGH);
digitalWrite(segF,HIGH);
digitalWrite(segG,HIGH);
digitalWrite(segDot,HIGH);
break;
case 2:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,HIGH);
digitalWrite(segD,LOW);
digitalWrite(segE,LOW);
digitalWrite(segF,HIGH);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 3:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,HIGH);
digitalWrite(segF,HIGH);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 4:
digitalWrite(segA,HIGH);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,HIGH);
digitalWrite(segE,HIGH);
digitalWrite(segF,LOW);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 5 :
digitalWrite(segA,LOW);
digitalWrite(segB,HIGH);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,HIGH);
digitalWrite(segF,LOW);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 6 :
digitalWrite(segA,LOW);
digitalWrite(segB,HIGH);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,LOW);
digitalWrite(segF,LOW);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 7:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,HIGH);
digitalWrite(segE,HIGH);
digitalWrite(segF,HIGH);
digitalWrite(segG,HIGH);
digitalWrite(segDot,HIGH);
break;
case 8:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,LOW);
digitalWrite(segF,LOW);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
case 9:
digitalWrite(segA,LOW);
digitalWrite(segB,LOW);
digitalWrite(segC,LOW);
digitalWrite(segD,LOW);
digitalWrite(segE,HIGH);
digitalWrite(segF,LOW);
digitalWrite(segG,LOW);
digitalWrite(segDot,HIGH);
break;
}
}
void tulisNilai()
{
sat=((nilCount%1000)%100)%10;
angka=sat;
digitalWrite(dig4,HIGH);
out7seg();
if (digSet==4){
delay(300);
}
else{
delay(1);
}
digitalWrite(dig4,LOW);
pul=((nilCount%1000)%100)/10;
angka=pul;
digitalWrite(dig3,HIGH);
out7seg();
if (digSet==3){
delay(300);
}
else{
delay(1);
}
digitalWrite(dig3,LOW);
rat=(nilCount%1000)/100;
angka=rat;
digitalWrite(dig2,HIGH);
out7seg();
if (digSet==2){
delay(300);
}
else{
delay(1);
}
digitalWrite(dig2,LOW);
rib=nilCount/1000;
angka=rib;
digitalWrite(dig1,HIGH);
out7seg();
if (digSet==1){
delay(300);
}
else{
delay(1);
}
digitalWrite(dig1,LOW);
}
void bacaTombol(){
while (digitalRead(A0)==HIGH){
tomUp=1;
}
while (digitalRead(A1)==HIGH){
tomDown=1;
}
while (digitalRead(A2)==HIGH){
tomSet=1;
}
while (digitalRead(A3)==HIGH){
tomRes=1;
}
}