summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--notes.c77
1 files changed, 29 insertions, 48 deletions
diff --git a/notes.c b/notes.c
index 8d082ad..9b428d6 100644
--- a/notes.c
+++ b/notes.c
@@ -237,11 +237,11 @@ main(void)
237 unsigned short cycles = 0; 237 unsigned short cycles = 0;
238 unsigned char tmp = 0; 238 unsigned char tmp = 0;
239 for (unsigned char n = 0;; n = (n + 1) % 2) { 239 for (unsigned char n = 0;; n = (n + 1) % 2) {
240 if (UCSR0A & (1 << RXC0)) { 240 if (PINC & _BV(5))
241 mode = UDR0; 241 mode = '2';
242 PORTD &= ~(1 << P_SPKR); 242 else
243 usart_send(mode); 243 mode = '0';
244 } 244
245 // check if any buttons are pressed, otherwise don't play a note 245 // check if any buttons are pressed, otherwise don't play a note
246 if (mode == '0' && ((PINB & PCMSK0) | (PINC & PCMSK1) | (PIND & PCMSK2)) == 0) { 246 if (mode == '0' && ((PINB & PCMSK0) | (PINC & PCMSK1) | (PIND & PCMSK2)) == 0) {
247 // if a button was released, then send note and cycles played 247 // if a button was released, then send note and cycles played
@@ -261,23 +261,6 @@ main(void)
261 playtone(); 261 playtone();
262 262
263 cycles = (cycles + 1) % 0xffff; 263 cycles = (cycles + 1) % 0xffff;
264 } else if (mode == '1') {
265 note = usart_read();
266 if (note >= 'Z') note -= '0';
267 tmp = usart_read();
268 cycles = tmp << 8;
269 tmp = usart_read();
270 cycles |= tmp;
271 tmp = usart_read();
272
273 // reset to default mode when an invalid note is read
274 if (tmp != 'z' || note >= '|') {
275 mode = '0';
276 continue;
277 }
278
279 for (unsigned short i = 0; i < cycles; i++)
280 playtone();
281 } else if (mode == '2') { 264 } else if (mode == '2') {
282 play_note(MARIO + 0, 131 * 0.3); 265 play_note(MARIO + 0, 131 * 0.3);
283 play_note(MARIO + 1, 262 * 0.3); 266 play_note(MARIO + 1, 262 * 0.3);
@@ -285,14 +268,14 @@ main(void)
285 play_note(MARIO + 3, 220 * 0.3); 268 play_note(MARIO + 3, 220 * 0.3);
286 play_note(MARIO + 4, 117 * 0.3); 269 play_note(MARIO + 4, 117 * 0.3);
287 play_note(MARIO + 5, 233 * 0.3); 270 play_note(MARIO + 5, 233 * 0.3);
288 play_note(255, 1800); 271 _delay_ms(1800);
289 play_note(MARIO + 0, 131 * 0.3); 272 play_note(MARIO + 0, 131 * 0.3);
290 play_note(MARIO + 1, 262 * 0.3); 273 play_note(MARIO + 1, 262 * 0.3);
291 play_note(MARIO + 2, 110 * 0.3); 274 play_note(MARIO + 2, 110 * 0.3);
292 play_note(MARIO + 3, 220 * 0.3); 275 play_note(MARIO + 3, 220 * 0.3);
293 play_note(MARIO + 4, 117 * 0.3); 276 play_note(MARIO + 4, 117 * 0.3);
294 play_note(MARIO + 5, 233 * 0.3); 277 play_note(MARIO + 5, 233 * 0.3);
295 play_note(255, 1800); 278 _delay_ms(1800);
296 279
297 play_note(MARIO + 6, 87 * 0.3); 280 play_note(MARIO + 6, 87 * 0.3);
298 play_note(MARIO + 7, 175 * 0.3); 281 play_note(MARIO + 7, 175 * 0.3);
@@ -300,59 +283,57 @@ main(void)
300 play_note(MARIO + 9, 147 * 0.3); 283 play_note(MARIO + 9, 147 * 0.3);
301 play_note(MARIO + 10, 78 * 0.3); 284 play_note(MARIO + 10, 78 * 0.3);
302 play_note(MARIO + 11, 156 * 0.3); 285 play_note(MARIO + 11, 156 * 0.3);
303 play_note(255, 1800); 286 _delay_ms(1800);
304 play_note(MARIO + 6, 87 * 0.3); 287 play_note(MARIO + 6, 87 * 0.3);
305 play_note(MARIO + 7, 175 * 0.3); 288 play_note(MARIO + 7, 175 * 0.3);
306 play_note(MARIO + 8, 73 * 0.3); 289 play_note(MARIO + 8, 73 * 0.3);
307 play_note(MARIO + 9, 147 * 0.3); 290 play_note(MARIO + 9, 147 * 0.3);
308 play_note(MARIO + 10, 78 * 0.3); 291 play_note(MARIO + 10, 78 * 0.3);
309 play_note(MARIO + 11, 156 * 0.3); 292 play_note(MARIO + 11, 156 * 0.3);
310 play_note(255, 1800); 293 _delay_ms(1800);
311 294
312 play_note(MARIO + 12, 156 * 0.3); 295 play_note(MARIO + 12, 156 * 0.3);
313 play_note(255, 25); 296 _delay_ms(25);
314 play_note(MARIO + 13, 147 * 0.3); 297 play_note(MARIO + 13, 147 * 0.3);
315 play_note(255, 25); 298 _delay_ms(25);
316 play_note(MARIO + 14, 139 * 0.3); 299 play_note(MARIO + 14, 139 * 0.3);
317 play_note(255, 25); 300 _delay_ms(25);
318 play_note(MARIO + 15, 131 * 0.6); 301 play_note(MARIO + 15, 131 * 0.6);
319 play_note(255, 25); 302 _delay_ms(25);
320 play_note(MARIO + 16, 156 * 0.3); 303 play_note(MARIO + 16, 156 * 0.3);
321 play_note(255, 25); 304 _delay_ms(25);
322 play_note(MARIO + 17, 147 * 0.6); 305 play_note(MARIO + 17, 147 * 0.6);
323 play_note(255, 25); 306 _delay_ms(25);
324 play_note(MARIO + 18, 104 * 0.6); 307 play_note(MARIO + 18, 104 * 0.6);
325 play_note(255, 25); 308 _delay_ms(25);
326 play_note(MARIO + 19, 98 * 0.6); 309 play_note(MARIO + 19, 98 * 0.6);
327 play_note(255, 25); 310 _delay_ms(25);
328 play_note(MARIO + 20, 139 * 0.6); 311 play_note(MARIO + 20, 139 * 0.6);
329 312
330 play_note(MARIO + 21, 156 * 0.3); 313 play_note(MARIO + 21, 156 * 0.3);
331 play_note(255, 25); 314 _delay_ms(25);
332 play_note(MARIO + 22, 185 * 0.3); 315 play_note(MARIO + 22, 185 * 0.3);
333 play_note(255, 25); 316 _delay_ms(25);
334 play_note(MARIO + 23, 175 * 0.3); 317 play_note(MARIO + 23, 175 * 0.3);
335 play_note(255, 25); 318 _delay_ms(25);
336 play_note(MARIO + 24, 165 * 0.3); 319 play_note(MARIO + 24, 165 * 0.3);
337 play_note(255, 25); 320 _delay_ms(25);
338 play_note(MARIO + 25, 233 * 0.3); 321 play_note(MARIO + 25, 233 * 0.3);
339 play_note(255, 25); 322 _delay_ms(25);
340 play_note(MARIO + 26, 220 * 0.3); 323 play_note(MARIO + 26, 220 * 0.3);
341 play_note(255, 25); 324 _delay_ms(25);
342 play_note(MARIO + 27, 208 * 0.6); 325 play_note(MARIO + 27, 208 * 0.6);
343 play_note(255, 25); 326 _delay_ms(25);
344 play_note(MARIO + 28, 156 * 0.6); 327 play_note(MARIO + 28, 156 * 0.6);
345 play_note(255, 25); 328 _delay_ms(25);
346 play_note(MARIO + 29, 123 * 0.6); 329 play_note(MARIO + 29, 123 * 0.6);
347 play_note(255, 25); 330 _delay_ms(25);
348 play_note(MARIO + 30, 123 * 0.6); 331 play_note(MARIO + 30, 123 * 0.6);
349 play_note(255, 25); 332 _delay_ms(25);
350 play_note(MARIO + 31, 110 * 0.6); 333 play_note(MARIO + 31, 110 * 0.6);
351 play_note(255, 25); 334 _delay_ms(25);
352 play_note(MARIO + 32, 104 * 0.6); 335 play_note(MARIO + 32, 104 * 0.6);
353 play_note(255, 25); 336 _delay_ms(25);
354
355 play_note(255, 3600);
356 } 337 }
357 } 338 }
358} 339}