#include <TTP229.h>
#include "FastLED.h"

#define NUM_LEDS 4
#define DATA_PIN 4

const int SCL_PIN = 2;
const int SDO_PIN = 3;
const int buzzer_pin = A0;

CRGB leds[NUM_LEDS];
TTP229 ttp229(SCL_PIN, SDO_PIN);

void setup()
{
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  Serial.begin(115200);
  Serial.println("Start Touching Several Keys Simultaneously!");
  LEDS.showColor(CRGB(0, 0, 0));

  pinMode(buzzer_pin, OUTPUT);
  digitalWrite(buzzer_pin, LOW);
}

void loop()
{
  uint8_t sum = 0;
  uint16_t keys = ttp229.ReadKeys16();

  for (uint8_t i = 0; i < 16; i++)
    if (keys & (1 << i))
      sum += i + 1;

  if (sum == 1)
  {
    LEDS.showColor(CRGB(150, 0, 0));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 2)
  {
    LEDS.showColor(CRGB(0, 150, 0));
    QhBuzzerplay(3);

    delay(400);
  }
  if (sum == 3)
  {
    LEDS.showColor(CRGB(0, 0, 150));
    QhBuzzerplay(sum);

    delay(400);
  }
  if (sum == 4)
  {
    LEDS.showColor(CRGB(150, 150, 0));
    QhBuzzerplay(sum);

    delay(400);
  }
  if (sum == 5)
  {
    LEDS.showColor(CRGB(0, 150, 150));
    QhBuzzerplay(sum);

    delay(400);
  }
  if (sum == 6)
  {
    LEDS.showColor(CRGB(150, 150, 150));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 7)
  {
    LEDS.showColor(CRGB(20, 150, 0));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 8)
  {
    LEDS.showColor(CRGB(70, 150, 70));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 9)
  {
    LEDS.showColor(CRGB(70, 150, 70));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 10)
  {
    LEDS.showColor(CRGB(45, 150, 0));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 11)
  {
    LEDS.showColor(CRGB(150, 0, 45));
    QhBuzzerplay(sum);
    delay(400);
  }
  if (sum == 12)
  {
    LEDS.showColor(CRGB(0, 0, 0));
    QhBuzzerplay(sum);
    delay(400);
  }
  Serial.println(sum);
}


void QhBuzzerplay(int num)
{
  switch (num) {
    case 6: tone(buzzer_pin, 523, 400); break; //도
    case 7: tone(buzzer_pin, 587, 400); break; //레
    case 8: tone(buzzer_pin, 659, 400); break; //미
    case 9: tone(buzzer_pin, 698, 400); break; //파
    case 10: tone(buzzer_pin, 783, 400); break; //솔
    case 11: tone(buzzer_pin, 880, 400); break; //라
    case 12: tone(buzzer_pin, 987, 400); break; //시
    case 1: tone(buzzer_pin, 554, 400); break; //도샵
    case 2: tone(buzzer_pin, 622, 400); break; //레샵
    case 3: tone(buzzer_pin, 739, 400); break; //파샵
    case 4: tone(buzzer_pin, 830, 400); break; //솔샵
    case 5: tone(buzzer_pin, 932, 400); break; //라샵
    default: break;
  }
}
