buzzer.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef BUZZER_H_
  2. #define BUZZER_H_
  3. #include "util.h"
  4. #include <stdint.h>
  5. typedef uint8_t note_t;
  6. enum note_t_fields {
  7. NOTE_ID_MASK = 0x0F,
  8. NOTE_ID_SHIFT = 0,
  9. NOTE_VAL_MASK = 0x70,
  10. NOTE_VAL_SHIFT = 4,
  11. };
  12. enum note_ids {
  13. NOTEID_PAUSE = 0,
  14. NOTEID_C4,
  15. NOTEID_D4,
  16. NOTEID_E4,
  17. NOTEID_F4,
  18. NOTEID_G4,
  19. NOTEID_A4,
  20. NOTEID_B4,
  21. NOTEID_C5,
  22. NOTEID_D5,
  23. NOTEID_E5,
  24. NOTEID_F5,
  25. NOTEID_G5,
  26. NOTEID_A5,
  27. NOTEID_B5,
  28. NOTEID_FLAGS,
  29. };
  30. enum note_values {
  31. NOTEVAL_1_1 = 0, /* 1/1 */
  32. NOTEVAL_1_2, /* 1/2 */
  33. NOTEVAL_1_4, /* 1/4 */
  34. NOTEVAL_1_8, /* 1/8 */
  35. NOTEVAL_1_16, /* 1/16 */
  36. NOTEVAL_1_32, /* 1/32 */
  37. NOTEVAL_1_64, /* 1/64 */
  38. NOTEVAL_UNUSED0,
  39. };
  40. enum note_flags_values {
  41. NOTEVAL_SHARP = 0,
  42. NOTEVAL_DOT,
  43. NOTEVAL_OCTAVE_SH_UP,
  44. NOTEVAL_OCTAVE_SH_DOWN,
  45. NOTEVAL_UNUSED1,
  46. NOTEVAL_UNUSED2,
  47. NOTEVAL_UNUSED3,
  48. NOTEVAL_UNUSED4,
  49. };
  50. #define note(id, val) ( \
  51. ((NOTEID_##id << NOTE_ID_SHIFT) & NOTE_ID_MASK) | \
  52. ((NOTEVAL_##val << NOTE_VAL_SHIFT) & NOTE_VAL_MASK) )
  53. #define n_sharp note(FLAGS, SHARP)
  54. #define n_dot note(FLAGS, DOT)
  55. #define n_octave_up note(FLAGS, OCTAVE_SH_UP)
  56. #define n_octave_down note(FLAGS, OCTAVE_SH_DOWN)
  57. #define n_pause(val) note(PAUSE, val)
  58. #define invalid_note 0xFF
  59. #define note_array_end invalid_note
  60. extern const note_t PROGMEM buzzer_elise[];
  61. void buzzer_init(uint16_t basespeed_note_1_1_ms);
  62. void buzzer_play(const note_t PROGPTR *notes);
  63. void buzzer_tune_note(note_t n);
  64. #endif /* BUZZER_H_ */