int count = 0;
int buttonState; // \variabel untuk menyimpan
int lastButtonState = 0; //variabel untuk menyimpan keadaan tombol terakhir
long lastDebounceTime = 0; //variabel untuk waktu debounce
const long PROGMEM debounceDelay = 30; //waktu untuk membaca tombol hingga noise debounce hilang
//semakin kecil semakin cepat pembacaan tombol
void setup() {
/*
A => d9
B => d8
C => d7
D => d6
E => d5
F => d4
G => d3
DP => d2
*/
DDRD |= B11111100;
DDRB |= B00000011;
DDRC &= !B00000001;
Serial.begin(9600);
}
//fungsi untuk menampilkan angka pada 7-segment display
void display_number(int num){
switch(num){
case 0:
PORTB = B11111100;
PORTD = B00001111;
break;
case 1:
PORTB = B11111110;
PORTD = B01111111;
break;
case 2:
PORTB = B11111100;
PORTD = B10010100;
break;
case 3:
PORTB = B11111100;
PORTD = B00110100;
break;
case 4:
PORTB = B11111110;
PORTD = B01100111;
break;
case 5:
PORTB = B11111101;
PORTD = B00100111;
break;
case 6:
PORTB = B11111101;
PORTD = B00000100;
break;
case 7:
PORTB = B11111100;
PORTD = B01111100;
break;
case 8:
PORTB = B11111100;
PORTD = B00000100;
break;
case 9:
PORTB = B11111100;
PORTD = B00100100;
break;
case 10:
PORTB = B11111100;
PORTD = B01000100;
break;
case 11:
PORTB = B11111111;
PORTD = B00000100;
break;
case 12:
PORTB = B11111101;
PORTD = B10001100;
break;
case 13:
PORTB = B11111110;
PORTD = B00010100;
break;
case 14:
PORTB = B11111101;
PORTD = B10000100;
break;
case 15:
PORTB = B11111101;
PORTD = B11000100;
break;
}
}
void loop() {
int reading = (PINC & B00000001);
// jika keadaan switch berubah, karena noise atau ditekan tahan:
if (reading != lastButtonState) {
// reset debouncing timer
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
/* ketika pembacaan (reading) sudah berada pada waktu yang lebih lama
dari waktu delay untuk menghilangkan debounce, maka nilai
buttonState berubah menjadi nilai pembacaan */
// jika nilai buttonState berubah:
if (reading != buttonState) {
buttonState = reading;
// toggle penambahan counter jika buttonState baru bernilai 1
if (buttonState == 1) {
count = count + 1;
}
}
}
Serial.println(lastButtonState);
lastButtonState = reading;
if(count > 15){
count = 0;
}
display_number(count);
}