/**
   Mini piano for Arduino

   Copyright (C) 2021, Uri Shaked

   Released under the MIT License.
*/

#include "pitches.h"

#define SPEAKER_PIN 8

const uint8_t buttonPins[] = { 12, 11, 10, 9, 7, 6, 5, 4 };
const int buttonTones[] = {
  NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4,
  NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5
};
const int numTones = sizeof(buttonPins) / sizeof(buttonPins[0]);

void setup() {
  Serial.begin(9600);
  for (uint8_t i = 0; i < numTones; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
  pinMode(SPEAKER_PIN, OUTPUT);
}

int pitch = 0;

void loop() {
  int newPitch = 0;
  for (uint8_t i = 0; i < numTones; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      newPitch = buttonTones[i];
    }
  }
  if (pitch != newPitch) {
    pitch = newPitch;
    tone(SPEAKER_PIN, pitch);
  }
}