Skip to content

Instantly share code, notes, and snippets.

@billykwok
Created October 12, 2021 07:48
Show Gist options
  • Save billykwok/e28ce8e521733523166ea76614b6fc6b to your computer and use it in GitHub Desktop.
Save billykwok/e28ce8e521733523166ea76614b6fc6b to your computer and use it in GitHub Desktop.
#include "CapacitiveSensor.h"
#include "Volume3.h"
#include "pitches.h"
#define SAMPLE_SIZE 10000
#define THRESHOLD_10M 5000
#define THRESHOLD_1M 800
#define NOTE_DURATION 200
const int PITCH_G[7] = {NOTE_G1, NOTE_G2, NOTE_G3, NOTE_G4,
NOTE_G5, NOTE_G6, NOTE_G7};
const int PITCH_GS[7] = {NOTE_GS1, NOTE_GS2, NOTE_GS3, NOTE_GS4,
NOTE_GS5, NOTE_GS6, NOTE_GS7};
const int PITCH_A[7] = {NOTE_A1, NOTE_A2, NOTE_A3, NOTE_A4,
NOTE_A5, NOTE_A6, NOTE_A7};
const int PITCH_AS[7] = {NOTE_AS1, NOTE_AS2, NOTE_AS3, NOTE_AS4,
NOTE_AS5, NOTE_AS6, NOTE_AS7};
const int PITCH_B[7] = {NOTE_B1, NOTE_B2, NOTE_B3, NOTE_B4,
NOTE_B5, NOTE_B6, NOTE_B7};
const int PITCH_C[7] = {NOTE_C1, NOTE_C2, NOTE_C3, NOTE_C5,
NOTE_C5, NOTE_C6, NOTE_C7};
const int PITCH_CS[7] = {NOTE_CS1, NOTE_CS2, NOTE_CS3, NOTE_CS5,
NOTE_CS5, NOTE_CS6, NOTE_CS7};
const int PITCH_D[7] = {NOTE_D1, NOTE_D2, NOTE_D3, NOTE_D5,
NOTE_D5, NOTE_D6, NOTE_D7};
const int PITCH_DS[7] = {NOTE_DS1, NOTE_DS2, NOTE_DS3, NOTE_DS5,
NOTE_DS5, NOTE_DS6, NOTE_DS7};
const int PITCH_E[7] = {NOTE_E1, NOTE_E2, NOTE_E3, NOTE_E5,
NOTE_E5, NOTE_E6, NOTE_E7};
const int PITCH_F[7] = {NOTE_F1, NOTE_F2, NOTE_F3, NOTE_F5,
NOTE_F5, NOTE_F6, NOTE_F7};
const int PITCH_FS[7] = {NOTE_FS1, NOTE_FS2, NOTE_FS3, NOTE_FS5,
NOTE_FS5, NOTE_FS6, NOTE_FS7};
CapacitiveSensor cap1 = CapacitiveSensor(A0, A1);
CapacitiveSensor cap2 = CapacitiveSensor(A0, 2);
CapacitiveSensor cap3 = CapacitiveSensor(A0, 3);
CapacitiveSensor cap4 = CapacitiveSensor(A0, 4);
CapacitiveSensor cap5 = CapacitiveSensor(A0, 5);
CapacitiveSensor cap6 = CapacitiveSensor(A0, 6);
CapacitiveSensor cap7 = CapacitiveSensor(A0, 7);
CapacitiveSensor cap8 = CapacitiveSensor(A0, 8);
CapacitiveSensor cap9 = CapacitiveSensor(A0, A3);
CapacitiveSensor cap10 = CapacitiveSensor(A0, 10);
CapacitiveSensor cap11 = CapacitiveSensor(A0, 11);
CapacitiveSensor cap12 = CapacitiveSensor(A0, 12);
CapacitiveSensor cap13 = CapacitiveSensor(A0, 13);
CapacitiveSensor capVol = CapacitiveSensor(A0, A1);
CapacitiveSensor capMinusOctave = CapacitiveSensor(A0, A4);
CapacitiveSensor capPlusOctave = CapacitiveSensor(A0, A5);
int volume = 1024;
uint8_t octave = 4;
void setup() {
Serial.begin(9600);
Serial.println("Default volume: " + String(volume));
Serial.println("Default octave: " + String(octave));
}
void loop() {
int pitch = getPitch();
if (pitch > 0) {
vol.tone(9, pitch, volume);
delay(NOTE_DURATION * 1.3);
vol.noTone();
} else {
long valMinusOctave = capMinusOctave.capacitiveSensor(SAMPLE_SIZE);
if (valMinusOctave > THRESHOLD_1M) {
if (octave > 1) {
Serial.println("Octave: " + String(--octave));
delay(500);
} else {
Serial.println("Min octave reached");
}
return;
}
long valPlusOctave = capPlusOctave.capacitiveSensor(SAMPLE_SIZE);
if (valPlusOctave > THRESHOLD_1M) {
if (octave < 6) {
Serial.println("Octave: " + String(++octave));
delay(500);
} else {
Serial.println("Max octave reached");
}
return;
}
long valVol = capVol.capacitiveSensor(SAMPLE_SIZE);
if (valVol > THRESHOLD_1M) {
volume = max(0, min(valVol - 1000, 1024));
Serial.println("Volume: " + String(volume));
delay(200);
return;
}
}
}
int getPitch() {
long val2 = cap2.capacitiveSensor(SAMPLE_SIZE);
if (val2 > THRESHOLD_10M) {
Serial.println("G");
return PITCH_G[octave];
}
long val3 = cap3.capacitiveSensor(SAMPLE_SIZE);
if (val3 > THRESHOLD_10M) {
Serial.println("G#");
return PITCH_GS[octave];
}
long val4 = cap4.capacitiveSensor(SAMPLE_SIZE);
if (val4 > THRESHOLD_10M) {
Serial.println("A");
return PITCH_A[octave];
}
long val5 = cap5.capacitiveSensor(SAMPLE_SIZE);
if (val5 > THRESHOLD_10M) {
Serial.println("A#");
return PITCH_AS[octave];
}
long val6 = cap6.capacitiveSensor(SAMPLE_SIZE);
if (val6 > THRESHOLD_10M) {
Serial.println("B");
return PITCH_B[octave];
}
long val7 = cap7.capacitiveSensor(SAMPLE_SIZE);
if (val7 > THRESHOLD_10M) {
Serial.println("C");
return PITCH_C[octave + 1];
}
long val8 = cap8.capacitiveSensor(SAMPLE_SIZE);
if (val8 > THRESHOLD_10M) {
Serial.println("C#");
return PITCH_CS[octave + 1];
}
long val9 = cap9.capacitiveSensor(SAMPLE_SIZE);
if (val9 > THRESHOLD_10M) {
Serial.println("D");
return PITCH_D[octave + 1];
}
long val10 = cap10.capacitiveSensor(SAMPLE_SIZE);
if (val10 > THRESHOLD_10M) {
Serial.println("D#");
return PITCH_DS[octave + 1];
}
long val11 = cap11.capacitiveSensor(SAMPLE_SIZE);
if (val11 > THRESHOLD_10M) {
Serial.println("E");
return PITCH_E[octave + 1];
}
long val12 = cap12.capacitiveSensor(SAMPLE_SIZE);
if (val12 > THRESHOLD_10M) {
Serial.println("F");
return PITCH_F[octave + 1];
}
long val13 = cap13.capacitiveSensor(SAMPLE_SIZE);
if (val13 > THRESHOLD_10M) {
Serial.println("F#");
return PITCH_FS[octave + 1];
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment