Lompat ke konten Lompat ke sidebar Lompat ke footer

Widget HTML #1

Sketch Arduino Uno Up/Down Counter 4 Digit Seven Segment

Postingan kali ini tentang sebuah program / sketch arduino uno yang saya buat untuk up/down counter dengan arduino uno dan 4 digit seven segment.

Kali ini saya tidak akan menjelaskan cara kerjanya, namun anda dapat copy paste dan mencoba sketch yang saya buat di komputer maupun di project board anda.

Gambar Rangkaian Up Down Counter Arduino Uno

Berikut ini gambar rangkaian up/down counter dengan arduino uno dan 4 digit seven segment.

up down counter with set and reset

Pada gambar rangkaian di atas rangkaian counter saya lengkapi dengan tombol set, reset dan save.

Tombol up / down digunakan untuk menjalankan memberikan sinyal masukan counter apakah akan menghitung naik atau turun.

Tombol Set digunakan untuk mengeset awal counter.

Tombol Reset digunakan reset counter ke 0.

Save digunakan untuk menyimpan hasil setup awal counter dengan tombol set.

Program / Sketch Arduino

Silahkan anda dapat mencoba program / sketch berikut ini.

//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;
  }
}

Terima kasih telah mengunjungi postingan ini, jika ada pertanyaan silahkan hubungi kontak kami atau tulis komentar di kolom komentar yang telah kami sediakan.

Herwanto
Herwanto Hobi elektronika pemrograman, audio dan lain-lain

Posting Komentar untuk "Sketch Arduino Uno Up/Down Counter 4 Digit Seven Segment"