////32-41 strip corta
#define cuoreros 32
#define cuorebia 33
#define meteora 34
#define supercar 35
#define supercarmulti 36
#define barrarimb 37
#define serpente 38
#define velocerandom 39
#define lentocambio 40
#define onde 41
////44-51 strip lunga
#define fuoco 44
#define metrand 45
#define metbianco 46
#define metrosso 47
#define cascata 48
#define onda 49
#define lampobianco 50
#define lamporosso 51
////22-29 binario
int lastSoundValue;
int soundValue;
unsigned long lastNoiseTime = 0;
unsigned long currentNoiseTime = 0;
unsigned long lastLightChange = 0;
byte Conta = 0;
unsigned long startMillis;
const int startPin = 22; // Starting pin number for LEDs
int numLEDs = 8; // Number of LEDs
String str;
/////////////////////////////////////////////////////////////
void setup() {
pinMode(2, INPUT); //microfono
pinMode(4, INPUT); //busypin High = riproduce
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
for (int i = 0; i < 30; i++) {pinMode(startPin + i, OUTPUT);}
for (int i = 0; i < 30; i++) {digitalWrite(startPin + i, HIGH);}
Serial.begin(9600);
Serial.println("s");
}
/////////////////////////////////////////////////////////////////////
void serialEvent() { /////ad ogni loop
while(Serial.available()) {
str = Serial.readStringUntil('\n');
//str = Serial.read();
Serial.println(str);
}
Serial.flush();
if (str == "k" ||str == "j" ||str == "w" ||str == "x" ||str == "y"){goto suo;}
for (int i = 0; i < 30; i++) {digitalWrite(32 + i, HIGH);} //spegne tutti
//luci______________________________
if (str == "O") {disB(1); digitalWrite(onde, LOW);goto suo;} //inizio
if (str == "N") {digitalWrite(velocerandom, LOW); digitalWrite(cascata, LOW);goto suo;} //random
if (str == "R") {digitalWrite(cuoreros, LOW); digitalWrite(lamporosso, LOW);goto suo;} //ore allineato
if (str == "Q") {digitalWrite(cuorebia, LOW); digitalWrite(lampobianco, LOW);goto suo;} //min allineato
if (str == "A") {digitalWrite(cuoreros, LOW); digitalWrite(fuoco, LOW);goto suo;} //comple
if (str == "C") {digitalWrite(metrosso, LOW); digitalWrite(meteora, LOW);goto suo;} //nat
if (str == "D") {digitalWrite(supercar, LOW); digitalWrite(metbianco, LOW);goto suo;} //ult
if (str == "E") {digitalWrite(onde, LOW); digitalWrite(onda, LOW);goto suo;} //dom
if (str == "F") {digitalWrite(lentocambio, LOW); digitalWrite(metrand, LOW);goto suo;} //lun
if (str == "G") {digitalWrite(onde, LOW); digitalWrite(metrand, LOW);goto suo;} //mar
if (str == "H") {digitalWrite(supercarmulti, LOW); digitalWrite(metrand, LOW);goto suo;} //mer
if (str == "I") {digitalWrite(supercar, LOW); digitalWrite(metrand, LOW);goto suo;} //gio
if (str == "L") {digitalWrite(lentocambio, LOW); digitalWrite(metrand, LOW);goto suo;} //ven
if (str == "M") {digitalWrite(onde, LOW); digitalWrite(metrand, LOW);goto suo;} //sab
if (str == "P") {digitalWrite(barrarimb, LOW); digitalWrite(cascata, LOW);goto suo;} //home min
if (str == "Q") {digitalWrite(supercarmulti, LOW); digitalWrite(fuoco, LOW);goto suo;} //home ore
suo:
//suoni________________________________
if (str == "k") {disB(random(10,15));}//ogni ora comple
if (str == "j") {disB(random(16,20));}//ogni ora nat
if (str == "w") {disB(random(21,25));}//ogni ora ultimo
if (str == "x") {disB(2);}//ogni mezzog
if (str == "y") {disB(3);}//ogni ora
}
//////////////////////////////////////////////////////////////
void loop() {
//////////////gestione mic
soundValue = digitalRead(2);
currentNoiseTime = millis();
if (soundValue == 1) { // if there is currently a noise
if ((currentNoiseTime > lastNoiseTime + 200) && // to debounce a sound occurring in more than a loop cycle as a single noise
(lastSoundValue == 0) && // if it was silent before
(currentNoiseTime < lastNoiseTime + 800)) //agire qui per sensibilità............... if current clap is less than 0.8 seconds after the first clap
{
Conta = Conta + 1;
startMillis = millis();
}
else if ((lastSoundValue == 0) &&(currentNoiseTime > startMillis + 800)) {Conta=0;}
lastNoiseTime = currentNoiseTime;
}
lastSoundValue = soundValue;
if (Conta == 2) {digitalWrite(3, LOW);}
else if (Conta == 3) {Conta=0; disB(random(100,200));}
if (currentNoiseTime - startMillis >= 3000) {Conta=0; digitalWrite(3, HIGH);}
}
//////////////////////////////////////////////////////////////////////////////////////
void disB(int decimalNumber) {
for (int i = 0; i < numLEDs; i++) {
int state = (decimalNumber >> i) & 1; // Extract each bit
digitalWrite(startPin + i, state);
}
}