Serial Musical Organ 1.0
Buzzer controller and musical organ
Loading...
Searching...
No Matches
Development & Customization

Adding New Songs

Step 1: Add function declaration in pre_defined_songs.h

void play_my_song(void);

Step 2: Implement the song in pre_defined_songs.c

void play_my_song(void)
{
const uint16_t notes[] = {C4, D4, E4, F4, G4, A4, B4, C5};
const uint16_t durations[] = {Q, Q, Q, Q, Q, Q, Q, H};
for (uint8_t i = 0; i < 8; i++)
playNote(notes[i], durations[i]);
}
#define B4
Definition scale16.h:61
#define C5
Definition scale16.h:76
#define D4
Definition scale16.h:64
#define E4
Definition scale16.h:66
#define G4
Definition scale16.h:69
#define F4
Definition scale16.h:67
#define A4
Definition scale16.h:59
#define H
Definition scale16.h:91
#define Q
Definition scale16.h:90
#define C4
Definition scale16.h:62
const uint16_t notes[]
Array of musical notes mapped to keyboard keys.
Definition main.c:406
void playNote(uint16_t half_us, uint16_t duration_ms)
Play a musical tone.
Definition organ.c:66

Step 3: Add command in main.c

else if (receivedChar == '3')
{
printString("\r\nPlaying my custom song\r\n");
play_my_song();
}
void printString(const char String[])
Sends a null-terminated string over USART.

Note Frequency Calculation

Timer values are calculated as:

OCR = F_CPU / (2 × frequency × prescaler)
Example for C4 (261.63 Hz) with F_CPU=16MHz, prescaler=1:
OCR = 16000000 / (2 × 261.63 × 1) = 30578
#define F_CPU
CPU clock frequency in Hertz.
Definition CPU.h:121

Adding New Notes

Add to scale16.h:

#define NewNote OCR_VALUE

Performance Improvements

Implement Non-blocking Playback

// Use timer interrupts instead of _delay_ms()
ISR(TIMER1_COMPA_vect) {
// Toggle buzzer pin
}

Add Serial Buffer Queue

#define RX_BUFFER_SIZE 32
volatile char rx_buffer[RX_BUFFER_SIZE];
// Implement circular buffer in ISR

Troubleshooting

Problem Solution
No sound Check buzzer connection and resistor
Garbled serial Verify baud rate (9600) and F_CPU
Wrong notes Check F_CPU in CPU.h
No serial echo Verify RX/TX cross connection