|
diff --git a/notes.c b/notes.c index 25122f5..4688d67 100644 --- a/ notes.c+++ b/ notes.c |
| @@ -25,6 +25,69 @@ |
| 25 | |
25 | |
| 26 | unsigned short freqs[] = { |
26 | unsigned short freqs[] = { |
| 27 | // PD3-7 |
27 | // PD3-7 |
| |
28 | 100, |
| |
29 | 200, |
| |
30 | 250, |
| |
31 | 300, |
| |
32 | 350, |
| |
33 | // PB0-4 |
| |
34 | 400, |
| |
35 | 450, // middle c |
| |
36 | 500, |
| |
37 | 600, |
| |
38 | 700, |
| |
39 | // PC0-4 |
| |
40 | 750, |
| |
41 | 800, |
| |
42 | 850, |
| |
43 | 900, |
| |
44 | 950, |
| |
45 | |
| |
46 | // notes |
| |
47 | [MARIO] = 131, // C3 |
| |
48 | 262, // C4 |
| |
49 | 110, // A2 |
| |
50 | 220, // A3 |
| |
51 | 117, // Bb2 |
| |
52 | 233, // Bb3 |
| |
53 | |
| |
54 | 87, |
| |
55 | 175, |
| |
56 | 73, |
| |
57 | 147, |
| |
58 | 78, |
| |
59 | 156, |
| |
60 | |
| |
61 | 156, |
| |
62 | 147, |
| |
63 | 139, |
| |
64 | 131, |
| |
65 | 156, |
| |
66 | 147, |
| |
67 | 104, |
| |
68 | 98, |
| |
69 | 139, |
| |
70 | |
| |
71 | 156, |
| |
72 | 185, |
| |
73 | 175, |
| |
74 | 165, |
| |
75 | 233, |
| |
76 | 220, |
| |
77 | 208, |
| |
78 | 156, |
| |
79 | 123, |
| |
80 | 123, |
| |
81 | 110, |
| |
82 | 104, |
| |
83 | |
| |
84 | ['"'] = 16000, |
| |
85 | |
| |
86 | [255] = 0 // used as a 'silent' note |
| |
87 | }; |
| |
88 | |
| |
89 | unsigned short t_freqs[] = { |
| |
90 | // PD3-7 |
| 28 | FREQ(100), |
91 | FREQ(100), |
| 29 | FREQ(200), |
92 | FREQ(200), |
| 30 | FREQ(250), |
93 | FREQ(250), |
| @@ -86,8 +149,9 @@ unsigned short freqs[] = { |
| 86 | [255] = 0 // used as a 'silent' note |
149 | [255] = 0 // used as a 'silent' note |
| 87 | }; |
150 | }; |
| 88 | unsigned char note = 0; |
151 | unsigned char note = 0; |
| 89 | // 0 = buttons write note+cycles+\xff to UART |
152 | // 0 = normal/piano mode |
| 90 | // 1 = buttons don't do anything, speaker reads note+cycles+\xff from UART |
153 | // 1 = recording mode |
| |
154 | // 2 = mario demo |
| 91 | unsigned char mode = '0'; |
155 | unsigned char mode = '0'; |
| 92 | |
156 | |
| 93 | ISR (PCINT0_vect) |
157 | ISR (PCINT0_vect) |
| @@ -126,9 +190,9 @@ ISR (PCINT2_vect) |
| 126 | void |
190 | void |
| 127 | usart_init(void) |
191 | usart_init(void) |
| 128 | { |
192 | { |
| 129 | // 115200 bps, RX/TX enabled |
193 | // 9600 bps, TX enabled |
| 130 | UBRR0 = 103; |
194 | UBRR0 = 103; |
| 131 | UCSR0B = (1 << RXEN0) | (1 << TXEN0); |
195 | UCSR0B = 1 << TXEN0; |
| 132 | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); |
196 | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); |
| 133 | } |
197 | } |
| 134 | |
198 | |
| @@ -158,7 +222,7 @@ playtone(void) |
| 158 | { |
222 | { |
| 159 | // Prepare Timer/Counter |
223 | // Prepare Timer/Counter |
| 160 | TCNT1 = 1; |
224 | TCNT1 = 1; |
| 161 | OCR1A = freqs[note]; |
225 | OCR1A = t_freqs[note]; |
| 162 | TCCR1B |= 1 << CS11; |
226 | TCCR1B |= 1 << CS11; |
| 163 | |
227 | |
| 164 | // Monitor OutPut Compare Flag |
228 | // Monitor OutPut Compare Flag |
| @@ -177,24 +241,10 @@ play_note(unsigned char _note, unsigned short _cycles) |
| 177 | |
241 | |
| 178 | usart_send(note); |
242 | usart_send(note); |
| 179 | |
243 | |
| 180 | if (note != 255) { |
244 | for (unsigned short i = 0; i < _cycles; i++) |
| 181 | for (unsigned short i = 0; i < _cycles; i++) |
245 | playtone(); |
| 182 | playtone(); |
246 | |
| 183 | } else { |
247 | _delay_ms(25); |
| 184 | // when note is 255, don't play anything for _cycles ms |
| |
| 185 | // Prepare Timer/Counter |
| |
| 186 | TCNT1 = 1; |
| |
| 187 | OCR1A = 16e3 * _cycles / T1_PRESCALAR; |
| |
| 188 | TCCR1B |= 1 << CS11; |
| |
| 189 | |
| |
| 190 | // Monitor OutPut Compare Flag |
| |
| 191 | while ((TIFR1 & (1 << OCF1A)) == 0); |
| |
| 192 | |
| |
| 193 | // Toggles port For Speaker |
| |
| 194 | PORTD ^= 1 << P_SPKR; |
| |
| 195 | TIFR1 |= 1 << OCF1A; |
| |
| 196 | TCCR1B &= ~(1 << CS11); |
| |
| 197 | } |
| |
| 198 | } |
248 | } |
| 199 | |
249 | |
| 200 | int |
250 | int |
| @@ -224,6 +274,8 @@ main(void) |
| 224 | for (unsigned char n = 0;; n = (n + 1) % 2) { |
274 | for (unsigned char n = 0;; n = (n + 1) % 2) { |
| 225 | if (PINC & _BV(5)) |
275 | if (PINC & _BV(5)) |
| 226 | mode = '2'; |
276 | mode = '2'; |
| |
277 | else if (PINB & _BV(5)) |
| |
278 | mode = '3'; |
| 227 | else |
279 | else |
| 228 | mode = '0'; |
280 | mode = '0'; |
| 229 | |
281 | |
| @@ -243,79 +295,30 @@ main(void) |
| 243 | playtone(); |
295 | playtone(); |
| 244 | |
296 | |
| 245 | cycles = (cycles + 1) % 0xffff; |
297 | cycles = (cycles + 1) % 0xffff; |
| 246 | } else if (mode == '2') { |
298 | } else if (mode == '1') { |
| 247 | play_note(MARIO + 0, 131 * 0.3); |
299 | |
| 248 | play_note(MARIO + 1, 262 * 0.3); |
300 | } else if (mode == '3') { |
| 249 | play_note(MARIO + 2, 110 * 0.3); |
301 | for (unsigned char i = 0; i < 2; i++) { |
| 250 | play_note(MARIO + 3, 220 * 0.3); |
302 | for (unsigned char j = 0; j <= 5; j++) |
| 251 | play_note(MARIO + 4, 117 * 0.3); |
303 | play_note(MARIO + j, freqs[MARIO + j] * 0.3); |
| 252 | play_note(MARIO + 5, 233 * 0.3); |
304 | _delay_ms(1800); |
| 253 | _delay_ms(1800); |
305 | } |
| 254 | play_note(MARIO + 0, 131 * 0.3); |
306 | |
| 255 | play_note(MARIO + 1, 262 * 0.3); |
307 | for (unsigned char i = 0; i < 2; i++) { |
| 256 | play_note(MARIO + 2, 110 * 0.3); |
308 | for (unsigned char j = 6; j <= 11; j++) |
| 257 | play_note(MARIO + 3, 220 * 0.3); |
309 | play_note(MARIO + j, freqs[MARIO + j] * 0.3); |
| 258 | play_note(MARIO + 4, 117 * 0.3); |
310 | _delay_ms(1800); |
| 259 | play_note(MARIO + 5, 233 * 0.3); |
311 | } |
| 260 | _delay_ms(1800); |
312 | |
| 261 | |
313 | for (unsigned char i = 12; i <= 14; i++) |
| 262 | play_note(MARIO + 6, 87 * 0.3); |
314 | play_note(MARIO + i, freqs[MARIO + i] * 0.3); |
| 263 | play_note(MARIO + 7, 175 * 0.3); |
315 | for (unsigned char i = 15; i <= 20; i++) |
| 264 | play_note(MARIO + 8, 73 * 0.3); |
316 | play_note(MARIO + i, freqs[MARIO + i] * 0.6); |
| 265 | play_note(MARIO + 9, 147 * 0.3); |
317 | |
| 266 | play_note(MARIO + 10, 78 * 0.3); |
318 | for (unsigned char i = 21; i <= 26; i++) |
| 267 | play_note(MARIO + 11, 156 * 0.3); |
319 | play_note(MARIO + i, freqs[MARIO + i] * 0.3); |
| 268 | _delay_ms(1800); |
320 | for (unsigned char i = 27; i <= 32; i++) |
| 269 | play_note(MARIO + 6, 87 * 0.3); |
321 | play_note(MARIO + i, freqs[MARIO + i] * 0.6); |
| 270 | play_note(MARIO + 7, 175 * 0.3); |
| |
| 271 | play_note(MARIO + 8, 73 * 0.3); |
| |
| 272 | play_note(MARIO + 9, 147 * 0.3); |
| |
| 273 | play_note(MARIO + 10, 78 * 0.3); |
| |
| 274 | play_note(MARIO + 11, 156 * 0.3); |
| |
| 275 | _delay_ms(1800); |
| |
| 276 | |
| |
| 277 | play_note(MARIO + 12, 156 * 0.3); |
| |
| 278 | _delay_ms(25); |
| |
| 279 | play_note(MARIO + 13, 147 * 0.3); |
| |
| 280 | _delay_ms(25); |
| |
| 281 | play_note(MARIO + 14, 139 * 0.3); |
| |
| 282 | _delay_ms(25); |
| |
| 283 | play_note(MARIO + 15, 131 * 0.6); |
| |
| 284 | _delay_ms(25); |
| |
| 285 | play_note(MARIO + 16, 156 * 0.3); |
| |
| 286 | _delay_ms(25); |
| |
| 287 | play_note(MARIO + 17, 147 * 0.6); |
| |
| 288 | _delay_ms(25); |
| |
| 289 | play_note(MARIO + 18, 104 * 0.6); |
| |
| 290 | _delay_ms(25); |
| |
| 291 | play_note(MARIO + 19, 98 * 0.6); |
| |
| 292 | _delay_ms(25); |
| |
| 293 | play_note(MARIO + 20, 139 * 0.6); |
| |
| 294 | |
| |
| 295 | play_note(MARIO + 21, 156 * 0.3); |
| |
| 296 | _delay_ms(25); |
| |
| 297 | play_note(MARIO + 22, 185 * 0.3); |
| |
| 298 | _delay_ms(25); |
| |
| 299 | play_note(MARIO + 23, 175 * 0.3); |
| |
| 300 | _delay_ms(25); |
| |
| 301 | play_note(MARIO + 24, 165 * 0.3); |
| |
| 302 | _delay_ms(25); |
| |
| 303 | play_note(MARIO + 25, 233 * 0.3); |
| |
| 304 | _delay_ms(25); |
| |
| 305 | play_note(MARIO + 26, 220 * 0.3); |
| |
| 306 | _delay_ms(25); |
| |
| 307 | play_note(MARIO + 27, 208 * 0.6); |
| |
| 308 | _delay_ms(25); |
| |
| 309 | play_note(MARIO + 28, 156 * 0.6); |
| |
| 310 | _delay_ms(25); |
| |
| 311 | play_note(MARIO + 29, 123 * 0.6); |
| |
| 312 | _delay_ms(25); |
| |
| 313 | play_note(MARIO + 30, 123 * 0.6); |
| |
| 314 | _delay_ms(25); |
| |
| 315 | play_note(MARIO + 31, 110 * 0.6); |
| |
| 316 | _delay_ms(25); |
| |
| 317 | play_note(MARIO + 32, 104 * 0.6); |
| |
| 318 | _delay_ms(25); |
| |
| 319 | } |
322 | } |
| 320 | } |
323 | } |
| 321 | } |
324 | } |
|