Skip to content

Instantly share code, notes, and snippets.

@ArtBIT
Created May 9, 2024 13:43
Show Gist options
  • Save ArtBIT/c1ef2065493d0454fe06bbaae0cdbcb0 to your computer and use it in GitHub Desktop.
Save ArtBIT/c1ef2065493d0454fe06bbaae0cdbcb0 to your computer and use it in GitHub Desktop.

Revisions

  1. ArtBIT created this gist May 9, 2024.
    73 changes: 73 additions & 0 deletions coin.ino
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    #include "pitches.h"

    const int SPKR = 13; // Buzzer pin
    const int BTN=2;

    // notes in the notes:
    int notes_1up[] = {NOTE_E5, NOTE_G5, NOTE_E6, NOTE_C6, NOTE_D6, NOTE_G6};
    // note durations: 4 = quarter note, 8 = eighth note, etc.:
    int durations_1up[] = {4, 4, 4, 4, 4, 4};

    // mario coin
    int notes_coin[] = {NOTE_B5, NOTE_E6};
    int durations_coin[] = { 8, 1 };

    int tempo = 400;
    int button_state = 0;
    int is_playing = 0;
    long last_click_at = 0;
    long debounce_delay = 200;

    void play(int num_notes, int* notes, int* durations) {
    // iterate over the notes of the notes:
    if (is_playing) {
    return;
    }
    is_playing = 1;
    for (int thisNote = 0; thisNote < num_notes; thisNote++) {
    // to calculate the note duration, take the tempo
    // divided by the note type.
    // e.g. quarter note = tempo / 4, eighth note = tempo/8, etc.
    int noteDuration = tempo/durations[thisNote];
    tone(SPKR, notes[thisNote], noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);

    // stop the tone playing:
    noTone(SPKR);
    }
    is_playing = 0;
    }

    void setup()
    {
    // Initialize serial communication
    Serial.begin(9600);
    pinMode(SPKR, OUTPUT); //set the speaker as output
    pinMode(BTN, INPUT);

    play(6, notes_1up, durations_1up);
    delay(100);
    }

    void loop() //do this over and over
    {
    button_state = digitalRead(BTN);
    long now = millis();
    if ((now - last_click_at) > debounce_delay) {
    if (button_state == HIGH) {
    play(2, notes_coin, durations_coin);
    return;
    }
    last_click_at = now;
    }
    if (Serial.available() > 0) {
    int incoming_byte = Serial.read();
    if (incoming_byte == 'H') {
    play(2, notes_coin, durations_coin);
    }
    }
    }
    93 changes: 93 additions & 0 deletions pitches.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,93 @@
    /*************************************************
    * Public Constants
    *************************************************/

    #define NOTE_B0 31
    #define NOTE_C1 33
    #define NOTE_CS1 35
    #define NOTE_D1 37
    #define NOTE_DS1 39
    #define NOTE_E1 41
    #define NOTE_F1 44
    #define NOTE_FS1 46
    #define NOTE_G1 49
    #define NOTE_GS1 52
    #define NOTE_A1 55
    #define NOTE_AS1 58
    #define NOTE_B1 62
    #define NOTE_C2 65
    #define NOTE_CS2 69
    #define NOTE_D2 73
    #define NOTE_DS2 78
    #define NOTE_E2 82
    #define NOTE_F2 87
    #define NOTE_FS2 93
    #define NOTE_G2 98
    #define NOTE_GS2 104
    #define NOTE_A2 110
    #define NOTE_AS2 117
    #define NOTE_B2 123
    #define NOTE_C3 131
    #define NOTE_CS3 139
    #define NOTE_D3 147
    #define NOTE_DS3 156
    #define NOTE_E3 165
    #define NOTE_F3 175
    #define NOTE_FS3 185
    #define NOTE_G3 196
    #define NOTE_GS3 208
    #define NOTE_A3 220
    #define NOTE_AS3 233
    #define NOTE_B3 247
    #define NOTE_C4 262
    #define NOTE_CS4 277
    #define NOTE_D4 294
    #define NOTE_DS4 311
    #define NOTE_E4 330
    #define NOTE_F4 349
    #define NOTE_FS4 370
    #define NOTE_G4 392
    #define NOTE_GS4 415
    #define NOTE_A4 440
    #define NOTE_AS4 466
    #define NOTE_B4 494
    #define NOTE_C5 523
    #define NOTE_CS5 554
    #define NOTE_D5 587
    #define NOTE_DS5 622
    #define NOTE_E5 659
    #define NOTE_F5 698
    #define NOTE_FS5 740
    #define NOTE_G5 784
    #define NOTE_GS5 831
    #define NOTE_A5 880
    #define NOTE_AS5 932
    #define NOTE_B5 988
    #define NOTE_C6 1047
    #define NOTE_CS6 1109
    #define NOTE_D6 1175
    #define NOTE_DS6 1245
    #define NOTE_E6 1319
    #define NOTE_F6 1397
    #define NOTE_FS6 1480
    #define NOTE_G6 1568
    #define NOTE_GS6 1661
    #define NOTE_A6 1760
    #define NOTE_AS6 1865
    #define NOTE_B6 1976
    #define NOTE_C7 2093
    #define NOTE_CS7 2217
    #define NOTE_D7 2349
    #define NOTE_DS7 2489
    #define NOTE_E7 2637
    #define NOTE_F7 2794
    #define NOTE_FS7 2960
    #define NOTE_G7 3136
    #define NOTE_GS7 3322
    #define NOTE_A7 3520
    #define NOTE_AS7 3729
    #define NOTE_B7 3951
    #define NOTE_C8 4186
    #define NOTE_CS8 4435
    #define NOTE_D8 4699
    #define NOTE_DS8 4978