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.
153 lines
4.0 KiB
C++
153 lines
4.0 KiB
C++
#include <Wire.h>
|
|
#include <Adafruit_ADS1015.h>
|
|
|
|
#include <MozziGuts.h>
|
|
#include <Oscil.h>
|
|
#include <tables/square_no_alias_2048_int8.h>
|
|
//#include <ReverbTank.h> /*Only required for reverb*/
|
|
//#include <SensorToButton.h>
|
|
//ReverbTank reverb;
|
|
|
|
//Multiplex adresses
|
|
Adafruit_ADS1115 adsa (0x48);
|
|
Adafruit_ADS1115 adsb (0x49);
|
|
Adafruit_ADS1115 adsc (0x4A);
|
|
Adafruit_ADS1115 adsd (0x4B);
|
|
|
|
#define CONTROL_RATE 64 // powers of 2 please
|
|
|
|
Oscil<SQUARE_NO_ALIAS_2048_NUM_CELLS, AUDIO_RATE> tone_1(SQUARE_NO_ALIAS_2048_DATA);
|
|
Oscil<SQUARE_NO_ALIAS_2048_NUM_CELLS, AUDIO_RATE> tone_2(SQUARE_NO_ALIAS_2048_DATA);
|
|
Oscil<SQUARE_NO_ALIAS_2048_NUM_CELLS, AUDIO_RATE> tone_3(SQUARE_NO_ALIAS_2048_DATA);
|
|
|
|
int count= 0;
|
|
boolean note1 = false;
|
|
boolean note2 = false;
|
|
boolean note3 = false;
|
|
boolean codeswitch = false;
|
|
|
|
|
|
void setup(){
|
|
|
|
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
|
|
adsa.begin();
|
|
adsb.begin();
|
|
adsc.begin();
|
|
adsd.begin();
|
|
|
|
startMozzi(CONTROL_RATE);
|
|
tone_1.setFreq(262);
|
|
tone_1.setPhase(120);
|
|
tone_2.setFreq(330);
|
|
tone_2.setPhase(240 );
|
|
tone_3.setFreq(392);
|
|
}
|
|
void updateControl(){
|
|
//Log number of notes playing
|
|
if (note1){
|
|
count++;
|
|
}
|
|
if (note2){
|
|
count++;
|
|
}
|
|
if (note3){
|
|
count++;
|
|
}
|
|
}
|
|
|
|
|
|
int updateAudio(){
|
|
int result = 0;
|
|
|
|
//Play notes and mix down (according to notes playing
|
|
if (note1) {
|
|
result += tone_1.next() * (1/count);
|
|
}
|
|
if (note2) {
|
|
result += tone_2.next() * (1/count);
|
|
}
|
|
if (note3) {
|
|
result += tone_3.next() * (1/count);
|
|
}
|
|
//int arev = reverb.next(result); /*Initialize reverb*/
|
|
|
|
//return result + (arev>>3); /*Reverb: Mix signal*/
|
|
//return arev; /*Reverb: Wet signal*/
|
|
//return result; /*Reverb: Dry signal*/
|
|
|
|
//if (!codeswitch){
|
|
//polysynth
|
|
return result;
|
|
//}
|
|
//else if (codeswitch) {
|
|
//controlvoltage
|
|
//return CV;
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
void loop(){
|
|
//Messure LDR multiplex inputs
|
|
int16_t adc0a, adc1a, adc2a, adc3a, adc0b, adc1b, adc2b, adc3b, adc0c, adc1c, adc2c, adc3c, adc0d, adc1d, adc2d, adc3d;
|
|
|
|
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(" ");
|
|
|
|
// delay(1000);
|
|
audioHook();
|
|
|
|
|
|
//Switch between auditive output and CV out
|
|
// if (digitalRead (8) == LOW){
|
|
// codeswitch = false;
|
|
// }
|
|
// if (digitalRead (8) == HIGH){
|
|
// codeswitch = true;
|
|
// }
|
|
|
|
|
|
}
|