Pages

Senin, 03 April 2017

Jam digital dengan 7 segment menggunakan Arduino

Berikut ini adalah source code yang digunakan


//Jam Digital yang dapat menampilkan menit dan detik
//dan dapat diatur dengan menggunakan Push Button

//deklarasi PIN untuk 7-segment
#define segA 8
#define segB 9
#define segC 10
#define segD 11
#define segE 12
#define segF 13
#define segG 1

//deklarasi PIN untuk setiap digit 7-segment
#define digit1 7
#define digit2 6
#define digit3 5
#define digit4 4

//deklarasi PIN untuk Push Button
#define PB1 A1 //Push Button 1 : masuk ke mode atur; ganti digit yang diatur ; oke
#define PB2 A2 //Push Button 2 : mengatur digit untuk naik
#define PB3 A3 //Push Button 3 : mengatur digit untuk turun

//definisi nilai setiap digit
int menit1 = 0;
int menit2 = 0;
int detik1 = 0;
int detik2 = 0;

//variabel yang digunakan pada saat memasuki mode atur
int aturmenit1;
int aturmenit2;
int aturdetik1;
int aturdetik2;


void setup() {
  // Pengesetan pin output untuk 7-segmen
  pinMode(segA, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segE, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);
  
  // Pengesetan pin output setiap digit 7-segmen
  pinMode(digit1, OUTPUT);
  pinMode(digit2, OUTPUT);
  pinMode(digit3, OUTPUT);
  pinMode(digit4, OUTPUT);
  
  // Pengesetan pin input Push Button
  pinMode(PB1, INPUT);
  pinMode(PB2, INPUT);
  pinMode(PB3, INPUT);

  //Pengesetan nilai Push Button
  digitalWrite(PB1,HIGH);
  digitalWrite(PB2,HIGH);
  digitalWrite(PB3,HIGH);

  // Stop interrupts
  cli();
  
  // Inisialisasi Timer/Counter Register
  TCCR1A = 0; // set entire TCCR1A register to 0
  TCCR1B = 0; // same for TCCR1B
  TCNT1  = 0; //initialize counter value to 0

  // Turn on CTC mode
  TCCR1B |= (1 << WGM12);
  
  // Set CS12 and CS10 bits for 1024 prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10);
  
  // a value of 15624 in a second. By having OCR1A = 15624 then the interrupt function
  OCR1A = 15624;
  
  // Enable timer compare interrupt
  TIMSK1 |= (1 << OCIE1A);

  // Allow interrupts
  sei();
}

// Program Utama
void loop() {  
  //menampilkan jam digitl
  
  tampilkan(menit1, menit2, detik1, detik2);
    if(digitalRead(PB1)==0) //Push Button 1 ditekan
    {
      delay(200);
      atur(); //masuk ke mode atur
    }
}
    
  
//menjalankan menit dan detik dengan interrupt
ISR(TIMER1_COMPA_vect){ 
  detik2++;
  if(detik2 > 9) 
  {
    detik2 = 0;
    detik1++;
    if(detik1 > 5 ) // Detik sudah mencapai 59
    {
      detik1 = 0;
      menit2++;
      
      if(menit2 > 9){
        menit2 = 0;
        menit1++;
        if(menit1 > 5) // Menit sudah mencapai 59
        {
          menit1 = 0;
        }
       }
     }
   }
 }
  
 
// Pengaturan jam digital menggunakan push button
void atur(){
  
  //memasukkan nilai atur dengan nilai yang sudah berjalan
  int aturmenit1 = menit1;
  int aturmenit2 = menit2;
  int aturdetik1 = detik2;
  int aturdetik2 = detik1;
  
  unsigned char x=4; //variabel untuk menunjukan digit yang sedang diatur
  while(x==4) //pengaturan dilakukan pada digit4
  {
    if(digitalRead(PB1)==0) {
      delay(200);
      x=3;
    }
    if (digitalRead(PB2)==0) {
      delay(200);
      aturdetik2++;   
      if(aturdetik2 > 9) 
        aturdetik2 = 0;
    }
    if(digitalRead(PB3)==0) {
      delay(200);
      aturdetik2--;
      if(aturdetik2 < 0) 
        aturdetik2 = 9;
    }        
    digitalWrite(digit1,LOW);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,HIGH);
    tampilDigit(aturdetik2);
  }
   
  while(x==3) //pengaturan dilakukan pada digit3
  {
    if(digitalRead(PB1)==0) {
      delay(200);
      x=2;
    }
    if (digitalRead(PB2)==0) {
      delay(200);
      aturdetik1++;
      if(aturdetik1 > 5)
        aturdetik1 = 0;
    }
    if(digitalRead(PB3)==0) {
      delay(200);
      aturdetik1--;
      if(aturdetik1 < 0) 
        aturdetik1 = 5;
    }
    digitalWrite(digit1,LOW);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,HIGH);
    digitalWrite(digit4,LOW);
    tampilDigit(aturdetik1);
  } 
     
  while(x==2) //pengaturan dilakukan pada digit2
  {
    if(digitalRead(PB1)==0){
      delay(200);
      x=1;
    }
    if (digitalRead(PB2)==0){
      delay(200);
      aturmenit2++;
      if(aturmenit2 > 9)
        aturmenit2 = 0;
    }
    if(digitalRead(PB3)==0){
      delay(200);
      aturmenit2--;   
      if(aturmenit2 < 0)
        aturmenit2 = 9;
    }
    digitalWrite(digit1,LOW);
    digitalWrite(digit2,HIGH);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,LOW);
    tampilDigit(aturmenit2);
  } 
      
  while(x==1) //pengaturan dilakukan pada digit1
  {
    if(digitalRead(PB1)==0) {
      delay(200);
      x = 0;
    }
    if (digitalRead(PB2)==0) {
      delay(200);
      aturmenit1++;
      if(aturmenit1 > 5) 
        aturmenit1 = 0;
    }
    if(digitalRead(PB3)==0){
      delay(200);
      aturmenit1--;   
      if(aturmenit1 < 0) 
        aturmenit1 = 5;
    }
    digitalWrite(digit1,HIGH);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,LOW);
    tampilDigit(aturmenit1);
  } 
  
  //pengenbaalikan nilai yang telah diatur
  menit1 = aturmenit1;
  menit2 = aturmenit2;
  detik1 = aturdetik1;
  detik2 = aturdetik2;
}

//menampilkan jam pada 7-segment
void tampilkan(int dig1, int dig2, int dig3, int dig4) 
{
    digitalWrite(digit1,HIGH);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,LOW);
    tampilDigit(dig1);
    delay(5);

    digitalWrite(digit1,LOW);
    digitalWrite(digit2,HIGH);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,LOW);
    tampilDigit(dig2);
    delay(5);

    digitalWrite(digit1,LOW);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,HIGH);
    digitalWrite(digit4,LOW);
    tampilDigit(dig3);
    delay(5);    

    digitalWrite(digit1,LOW);
    digitalWrite(digit2,LOW);
    digitalWrite(digit3,LOW);
    digitalWrite(digit4,HIGH);
    tampilDigit(dig4);
    delay(5);
}

//menampilkan nilai 7-segment
void tampilDigit(int nilai){
  
  if(nilai==0){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, HIGH);
  }

  if(nilai==1){
    digitalWrite(segA, HIGH);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, HIGH);
  }
  
  if(nilai==2){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, HIGH);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==3){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==4){
    digitalWrite(segA, HIGH);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==5){
    digitalWrite(segA, LOW);
    digitalWrite(segB, HIGH);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==6){
    digitalWrite(segA, LOW);
    digitalWrite(segB, HIGH);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==7){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, HIGH);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, HIGH);
    digitalWrite(segG, HIGH);
  }
 
  if(nilai==8){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, LOW);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
  }
  
  if(nilai==9){
    digitalWrite(segA, LOW);
    digitalWrite(segB, LOW);
    digitalWrite(segC, LOW);
    digitalWrite(segD, LOW);
    digitalWrite(segE, HIGH);
    digitalWrite(segF, LOW);
    digitalWrite(segG, LOW);
  }
}

skema rangkaian

Tidak ada komentar:

Posting Komentar