volatile bool button1Pressed = false;
volatile bool button2Pressed = false;
volatile bool button3Pressed = false;
volatile bool button4Pressed = false;
volatile bool button5Pressed = false;
volatile bool button6Pressed = false;
int data = 0;
volatile long last_time = 0;
volatile long debounce_delay = 100;
ISR(PCINT2_vect) {
if ((PIND >> 4 & 0b00010000 >> 4) == 1){
if(millis() - last_time >= debounce_delay){
button1Pressed = !button1Pressed;
data = 1;
last_time = millis();
}
}
else if ((PIND >> 5 & 0b00100000 >> 5) == 1){
if(millis() - last_time >= debounce_delay){
button2Pressed = !button2Pressed;
data = 2;
last_time = millis();
}
}
else if ((PIND >> 6 & 0b01000000 >> 6) == 1){
if(millis() - last_time >= debounce_delay){
button3Pressed = !button3Pressed;
data = 3;
last_time = millis();
}
}
else if ((PIND >> 7 & 0b10000000 >> 7) == 1){
if(millis() - last_time >= debounce_delay){
button4Pressed = !button4Pressed;
data = 4;
last_time = millis();
}
}
}
ISR(PCINT0_vect) {
if ((PINB >> 0 & 0b00000001 >> 0) == 1){
if(millis() - last_time >= debounce_delay){
button5Pressed = !button5Pressed;
data = 5;
last_time = millis();
}
}
else if ((PINB >> 1 & 0b00000010 >> 1) == 1){
if(millis() - last_time >= debounce_delay){
button6Pressed = !button6Pressed;
data = 6;
last_time = millis();
}
}
}
void setup() {
PCICR |= (1 << PCIE2)|(1<<PCIE0); //enable untuk portB dan D
PCMSK2 |= (1 << PCINT20) | (1 << PCINT21) | (1 << PCINT22) | (1 << PCINT23);
PCMSK0 |= (1 << PCINT0) | (1 << PCINT1);
// Inisialisasi pin tombol sebagai input dengan pull-up resistor
DDRD &= ~(1 << DDD4) | ~(1 << DDD5) | ~(1 << DDD6) | ~(1 << DDD7);//input D4-D7
PORTD |= (1 << PD4 | 1 << PD5 | 1 << PD6 | 1 << PD7);//pull-up resistor
DDRB &= ~(1 << DDB0) | ~(1 << DDB1); //input D8&D9
PORTB |= (1 << PB0 | 1 << PB1); //pull-up resitor
// Mengatur interrupt untuk tombol
sei();
Serial.begin(9600); // Initialize serial communication for debugging
}
void loop() {
Serial.print("terkirim: ");
Serial.println(data); // For debugging
delay(500);
}