Created
October 12, 2021 07:48
-
-
Save billykwok/e28ce8e521733523166ea76614b6fc6b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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