// include the libraries necessary for the OLED
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

// define the tones for the notes to be played
#define T_C 262
#define T_D 294
#define T_E 330
#define T_F 349
#define T_G 392
#define T_A 440
#define T_B 493

// varibles for each button
const int C = 12;
const int D = 11;
const int E = 10;
const int F = 9;
const int G = 8;
const int A = 7;
const int B = 6;

// variable for the buzzer
const int Buzz = 3;

void setup()
{
  // set button pins as input
  /*
  the buzzer is not in the void setup() because
  I use the tone function to control the buzzer
  */
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
   display.clearDisplay();
   pinMode(C, INPUT);
   pinMode(D, INPUT);
   pinMode(E, INPUT);
   pinMode(F, INPUT);
   pinMode(G, INPUT);
   pinMode(A, INPUT);
   pinMode(B, INPUT);
} 

void loop() 
{
  /*
   each while loop will play the note (according to the
   button pressed) and display the note letter on the OLED.
   If no button is pressed no sound is played.
   */
   while(digitalRead(C) == HIGH)
   {
      tone(Buzz, T_C);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("C");
      display.display();
   }

   while(digitalRead(D) == HIGH)
   {
      tone(Buzz, T_D);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("D");
      display.display();
   }

   while(digitalRead(E) == HIGH)
   {
      tone(Buzz, T_E);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("E");
      display.display();
   }

   while(digitalRead(F) == HIGH)
   {
      tone(Buzz, T_F);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("F");
      display.display();
   }

   while(digitalRead(G) == HIGH)
   {
      tone(Buzz, T_G);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("G");
      display.display();
   }

   while(digitalRead(A) == HIGH)
   {
      tone(Buzz, T_A);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("A");
      display.display();
   }

   while(digitalRead(B) == HIGH)
   {
      tone(Buzz, T_B);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("B");
      display.display();
   }
   noTone(Buzz);
}
