From 7eb9db0d821a0b13441ad7d586a159a8ed4c378f Mon Sep 17 00:00:00 2001 From: Vineet K Date: Fri, 19 Apr 2024 16:48:55 -0400 Subject: [PATCH] connect all 15 buttons to notes arduino --- notes.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/notes.c b/notes.c index b499665..7c92b83 100644 --- a/notes.c +++ b/notes.c @@ -1,7 +1,7 @@ /* * EEL4746C - AVR Piano - Speaker Section * speaker is connected to PD2 and ground - * buttons are connceted to PB0-5, PC0-5, PD3-7 + * 15 buttons are connected to PD3-7, PC0-4, PB0-4 * the LCD Arduino UNO is connected to TX/RX (PD0/1) */ @@ -37,6 +37,7 @@ unsigned short freqs[] = { FREQ(6000), FREQ(7000), FREQ(8000), + [255] = 0 // used as a 'silent' note }; unsigned char note = 0; @@ -45,7 +46,7 @@ ISR (PCINT0_vect) // check if any button in the whole port is pressed for (unsigned char i = 0; i <= 5; i++) { if (PINB & (1 << i)) { - note = i + 5 + 6; + note = i + 5; break; } } @@ -56,7 +57,7 @@ ISR (PCINT1_vect) // check if any button in the whole port is pressed for (unsigned char i = 0; i <= 5; i++) { if (PINC & (1 << i)) { - note = i + 5; + note = i + 5 + 6; break; } } @@ -67,7 +68,7 @@ ISR (PCINT2_vect) // check if any button in the whole port is pressed for (unsigned char i = 3; i <= 7; i++) { if (PIND & (1 << i)) { - note = i; + note = i - 3; break; } } @@ -82,11 +83,10 @@ main(void) DDRD = (1 << P_TX) | (1 << P_SPKR); // Enabling Pin Change Interrupt for All Buttons - PCMSK0 = 0b00111111; - PCMSK1 = 0b00111111; + PCMSK0 = 0b00011111; + PCMSK1 = 0b00011111; PCMSK2 = 0b11111000; -// PCICR = (1 << PCIE0) | (1 << PCIE1) | (1 << PCIE2); - PCICR = 1 << PCIE2; + PCICR = (1 << PCIE0) | (1 << PCIE1) | (1 << PCIE2); TCCR1A = 0x00; // use timer1 CTC mode TCCR1B = 1 << WGM12; // already prescaled by 8 in table @@ -95,8 +95,8 @@ main(void) // Sends Square wave to the Speaker When a Button is Pressed for (unsigned char n = 0;; n = (n + 1) % 2) { - //if (((PIND & 0b11111000) | (PINC & 0b00111111) | (PINB & 0b00111111)) == 0) - if ((PIND & 0b11111000) == 0) + // check if any buttons are pressed, otherwise don't play a note + if (((PINB & PCMSK0) | (PINC & PCMSK1) | (PIND & PCMSK2)) == 0) continue; // Prepare Timer/Counter