You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
342 lines
8.6 KiB
Arduino
342 lines
8.6 KiB
Arduino
5 years ago
|
#include <MusicWithoutDelay.h>
|
||
|
#include <synth.h>
|
||
|
#include <tables.h>
|
||
|
#include <Wire.h>
|
||
|
#include <Adafruit_ADS1015.h>
|
||
|
|
||
|
//multiplexer adresses
|
||
|
Adafruit_ADS1115 adsa (0x48);
|
||
|
Adafruit_ADS1115 adsb (0x49);
|
||
|
Adafruit_ADS1115 adsc (0x4A);
|
||
|
Adafruit_ADS1115 adsd (0x4B);
|
||
|
|
||
|
//note values
|
||
|
const char note1[] PROGMEM = {"::c-1"}; //plays c4
|
||
|
const char note2[] PROGMEM = {"::e-1"}; //plays e4
|
||
|
const char note3[] PROGMEM = {"::f-1"}; //plays f4
|
||
|
const char note4[] PROGMEM = {"::g-1"}; //plays g4
|
||
|
const char note5[] PROGMEM = {"::c"}; //plays c5
|
||
|
const char note6[] PROGMEM = {"::e"}; //plays e5
|
||
|
const char note7[] PROGMEM = {"::f"}; //plays f5
|
||
|
const char note8[] PROGMEM = {"::g"}; //plays g5
|
||
|
//const char note9[] PROGMEM = {"::c+1"}; //plays c6
|
||
|
//const char note10[] PROGMEM = {"::e+1"}; //plays e6
|
||
|
//const char note11[] PROGMEM = {"::f+1"}; //plays f6
|
||
|
//const char note12[] PROGMEM = {"::g+1"}; //plays g6
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//instruments
|
||
|
MusicWithoutDelay myI(note1);
|
||
|
MusicWithoutDelay myIn(note2);
|
||
|
MusicWithoutDelay myIns(note3);
|
||
|
MusicWithoutDelay myInst(note4);
|
||
|
MusicWithoutDelay myInstr(note5);
|
||
|
MusicWithoutDelay myInstru(note6);
|
||
|
MusicWithoutDelay myInstrum(note7);
|
||
|
MusicWithoutDelay myInstrume(note8);
|
||
|
//MusicWithoutDelay myInstrumen(note9);
|
||
|
//MusicWithoutDelay myInstrument(note10);
|
||
|
//MusicWithoutDelay myInstruments(note11);
|
||
|
//MusicWithoutDelay myInstrumentss(note12);
|
||
|
|
||
|
int count;
|
||
|
int vol;
|
||
|
int TH;
|
||
|
int16_t adc0a, adc1a, adc2a, adc3a, adc0b, adc1b, adc2b, adc3b, adc0c, adc1c, adc2c, adc3c, adc0d, adc1d, adc2d, adc3d;
|
||
|
//bool codeswitch = false;
|
||
|
|
||
|
bool BA;
|
||
|
bool BB;
|
||
|
bool BC;
|
||
|
bool BD;
|
||
|
bool BE;
|
||
|
bool BF;
|
||
|
bool BG;
|
||
|
bool BH;
|
||
|
|
||
|
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin(115200);
|
||
|
|
||
|
//set the gain for multiplexed ins
|
||
|
adsa.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
|
||
|
adsb.setGain(GAIN_ONE);
|
||
|
adsc.setGain(GAIN_ONE);
|
||
|
adsd.setGain(GAIN_ONE);
|
||
|
|
||
|
//start the multiplexing
|
||
|
Serial.println("Initializing Multiplexing ");
|
||
|
adsa.begin();
|
||
|
adsb.begin();
|
||
|
adsc.begin();
|
||
|
adsd.begin();
|
||
|
Serial.println("Multiplexing Initialized");
|
||
|
|
||
|
//calibrate the LDRs
|
||
|
Serial.println ("Calibrating");
|
||
|
TH = (adsb.readADC_SingleEnded(3));
|
||
|
Serial.print ("TH=");
|
||
|
Serial.println (TH);
|
||
|
|
||
|
Serial.println("Initializing Music Without Delay");
|
||
|
myI.begin(CHA, TRIANGLE, ENVELOPE0, 0);
|
||
|
myIn.begin(TRIANGLE, ENVELOPE0, 0);
|
||
|
myIns.begin(TRIANGLE, ENVELOPE0, 0);
|
||
|
myInst.begin(TRIANGLE, ENVELOPE0, 0);
|
||
|
Serial.println("Music Witout Delay Initialized");
|
||
|
Serial.println("Start messuring LDRs");
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
|
||
|
// myI.update();
|
||
|
// myIn.update();
|
||
|
// myIns.update();
|
||
|
// myInst.update();
|
||
|
|
||
|
//Messure LDR multiplex inputs
|
||
|
|
||
|
adc0a = adsa.readADC_SingleEnded(0);
|
||
|
adc1a = adsa.readADC_SingleEnded(1);
|
||
|
adc2a = adsa.readADC_SingleEnded(2);
|
||
|
adc3a = adsa.readADC_SingleEnded(3);
|
||
|
|
||
|
Serial.print("AIN0A: "); Serial.println(adc0a);
|
||
|
Serial.print("AIN1A: "); Serial.println(adc1a);
|
||
|
Serial.print("AIN2A: "); Serial.println(adc2a);
|
||
|
Serial.print("AIN3A: "); Serial.println(adc3a);
|
||
|
Serial.println(" ");
|
||
|
|
||
|
adc0b = adsb.readADC_SingleEnded(0);
|
||
|
adc1b = adsb.readADC_SingleEnded(1);
|
||
|
adc2b = adsb.readADC_SingleEnded(2);
|
||
|
adc3b = adsb.readADC_SingleEnded(3);
|
||
|
|
||
|
Serial.print("AIN0B: "); Serial.println(adc0b);
|
||
|
Serial.print("AIN1B: "); Serial.println(adc1b);
|
||
|
Serial.print("AIN2B: "); Serial.println(adc2b);
|
||
|
Serial.print("AIN3B: "); Serial.println(adc3b);
|
||
|
Serial.println(" ");
|
||
|
|
||
|
adc0c = adsc.readADC_SingleEnded(0);
|
||
|
adc1c = adsc.readADC_SingleEnded(1);
|
||
|
adc2c = adsc.readADC_SingleEnded(2);
|
||
|
adc3c = adsc.readADC_SingleEnded(3);
|
||
|
|
||
|
Serial.print("AIN0C: "); Serial.println(adc0c);
|
||
|
Serial.print("AIN1C: "); Serial.println(adc1c);
|
||
|
Serial.print("AIN2C: "); Serial.println(adc2c);
|
||
|
Serial.print("AIN3C: "); Serial.println(adc3c);
|
||
|
Serial.println(" ");
|
||
|
|
||
|
adc0d = adsd.readADC_SingleEnded(0);
|
||
|
adc1d = adsd.readADC_SingleEnded(1);
|
||
|
adc2d = adsd.readADC_SingleEnded(2);
|
||
|
adc3d = adsd.readADC_SingleEnded(3);
|
||
|
|
||
|
Serial.print("AIN0D: "); Serial.println(adc0d);
|
||
|
Serial.print("AIN1D: "); Serial.println(adc1d);
|
||
|
Serial.print("AIN2D: "); Serial.println(adc2d);
|
||
|
Serial.print("AIN3D: "); Serial.println(adc3d);
|
||
|
Serial.println(" ");
|
||
|
|
||
|
count = 0;
|
||
|
|
||
|
if (adc0a < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc1a < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc2a < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc3a < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc0b < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc1b < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc2b < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
if (adc3b < TH) {
|
||
|
count++;
|
||
|
}
|
||
|
// if (adc0c < TH) {
|
||
|
// count++;
|
||
|
// }
|
||
|
// if (adc1c < TH) {
|
||
|
// count++;
|
||
|
// }
|
||
|
// if (adc2c < TH) {
|
||
|
// count++;
|
||
|
// }
|
||
|
// if (adc3c < TH) {
|
||
|
// count++;
|
||
|
// }
|
||
|
|
||
|
Serial.print("Intruments playing=");
|
||
|
Serial.println(count);
|
||
|
|
||
|
//Play notes and mix down (set volume depending on number of notes playing)
|
||
|
if (adc0a < TH && !BA) {
|
||
|
vol = 120/count;
|
||
|
myI.play(true);
|
||
|
myI.setVolume(vol);
|
||
|
// myI.setSustain(50);
|
||
|
//myI.setMod(int mod1 = map(adc0a, 3000, 60000, 0, 127);
|
||
|
BA == true;
|
||
|
Serial.print("Tone1 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc0a > TH && BA) {
|
||
|
myI.pause (true);
|
||
|
BA == false;
|
||
|
Serial.println("Tone1 not active");
|
||
|
}
|
||
|
if (adc1a < TH && !BB) {
|
||
|
vol = 120/count;
|
||
|
myIn.play(true);
|
||
|
myIn.setVolume(vol);
|
||
|
// myIn.setSustain(50);
|
||
|
BB == true;
|
||
|
Serial.print("Tone2 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc1a > TH && BB) {
|
||
|
myIn.pause (true);
|
||
|
BB == false;
|
||
|
Serial.println("Tone2 not active");
|
||
|
}
|
||
|
|
||
|
if (adc2a < TH && !BC) {
|
||
|
vol = 120/count;
|
||
|
myIns.play(true);
|
||
|
myIns.setVolume(vol);
|
||
|
// myIns.setSustain(50);
|
||
|
BC == true;
|
||
|
Serial.print("Tone3 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc2a > TH && BC) {
|
||
|
myIns.pause (true);
|
||
|
BC == false;
|
||
|
Serial.println("Tone3 not active");
|
||
|
}
|
||
|
|
||
|
if (adc3a < TH && !BD) {
|
||
|
vol = 120/count;
|
||
|
myInst.play(true);
|
||
|
myInst.setVolume(vol);
|
||
|
// myInst.setSustain(50);
|
||
|
BD == true;
|
||
|
Serial.print("Tone4 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc3a < TH && BD) {
|
||
|
myInst.pause (true);
|
||
|
BD == false;
|
||
|
Serial.println("Tone4 not active");
|
||
|
}
|
||
|
|
||
|
if (adc0b < TH && !BE) {
|
||
|
vol = 120/count;
|
||
|
myInstr.play(true);
|
||
|
myInstr.setVolume(vol);
|
||
|
// myInst.setSustain(50);
|
||
|
BE == true;
|
||
|
Serial.print("Tone5 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc0b < TH && BE) {
|
||
|
myInstr.pause (true);
|
||
|
BE == false;
|
||
|
Serial.println("Tone5 not active");
|
||
|
}
|
||
|
|
||
|
if (adc1b < TH && !BF) {
|
||
|
vol = 120/count;
|
||
|
myInstru.play(true);
|
||
|
myInstru.setVolume(vol);
|
||
|
// myInst.setSustain(50);
|
||
|
BF == true;
|
||
|
Serial.print("Tone6 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc1b < TH && BF) {
|
||
|
myInstru.pause (true);
|
||
|
BF == false;
|
||
|
Serial.println("Tone6 not active");
|
||
|
}
|
||
|
|
||
|
|
||
|
if (adc2b < TH && !BG) {
|
||
|
vol = 120/count;
|
||
|
myInstrum.play(true);
|
||
|
myInstrum.setVolume(vol);
|
||
|
// myInst.setSustain(50);
|
||
|
BG == true;
|
||
|
Serial.print("Tone7 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc2b < TH && BG) {
|
||
|
myInstrum.pause (true);
|
||
|
BG == false;
|
||
|
Serial.println("Tone7 not active");
|
||
|
}
|
||
|
|
||
|
if (adc3b < TH && !BH) {
|
||
|
vol = 120/count;
|
||
|
myInstrume.play(true);
|
||
|
myInstrume.setVolume(vol);
|
||
|
// myInst.setSustain(50);
|
||
|
BH == true;
|
||
|
Serial.print("Tone8 active at vol:");
|
||
|
Serial.println(vol);
|
||
|
}
|
||
|
|
||
|
else if (adc3b < TH && BH) {
|
||
|
myInstrume.pause (true);
|
||
|
BH == false;
|
||
|
Serial.println("Tone8 not active");
|
||
|
}
|
||
|
// if (adc0b < TH) {
|
||
|
// //result += tone_5.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc1b < TH) {
|
||
|
// //result += tone_6.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc2b < TH) {
|
||
|
// //result += tone_7.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc3b < TH) {
|
||
|
// //result += tone_8.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc0c < TH) {
|
||
|
// //result += tone_9.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc1c < TH) {
|
||
|
// //result += tone_10.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc2c < TH) {
|
||
|
// //result += tone_11.next() * (1/count);
|
||
|
// }
|
||
|
// if (adc3c < TH) {
|
||
|
// //result += tone_12.next() * (1/count);
|
||
|
// }
|
||
|
}
|