Ciao a tutti , volevo porre un quesito che pensavo di risolvere da solo INVECE.... magari per molti di voi e' una stupidata.....
Ho realizzato tramite il microfono amplificato dell'interfono della moto l' arduino e un relay un sistema per accendere le luci o qualsiasi altro apparecchio collegatovi . Giungo al problema :
lo sketch che uso mi permette di accendere la luce e tutto perfetto pero' devo farla spegnere tramite delay...(quindi a tempo) io vorrei che al battito delle mani prima accendo e in un secondo momento sempre battendo le mani spengo . vi posto lo sketch
int analogInput = 3;
int LEDpin = 13;
// variable to store the value
int value = 5;
// a threshold to decide when the LED turns on
int threshold = 10
;
void setup(){
// declaration of pin modes
pinMode(analogInput, INPUT);
pinMode(LEDpin, OUTPUT);
delay(0); // waits for a second
}
void loop(){
// read the value on analog input
value = analogRead(analogInput);
// if value greater than threshold turn on LED
if (value > threshold) digitalWrite(LEDpin, HIGH),delay(0); else digitalWrite(LEDpin,LOW),delay(19000);}
GRAZIE RAGAZZI MA HO QUALCHE PROBLEMA NELL 'INSERIRE IL CODICE DAL PROGRAMMA DI ARDUINO ALLA VERIFICA ME LO BLOCCA ??? SOLUZIONI ??
GRAZIE ANCORA
HO PROVATO A SISTEMARLO COSI MA NON FUNZIONA PIU' NULLA NEAANCHE CAMBIANDO I VAL DEL SENSORE BHAAAA ....
int analogInput = 3;
int LEDpin = 13;
boolean statoLuce = LOW;
void loop()
{
value = analogRead(analogInput);
if (value > threshold)
{
sopraSoglia = TRUE //Memorizzo che ho superato la soglia
}
if (sopraSoglia == TRUE && value < threshold) //Se ho superato la soglia e sono ritornato sotto la soglia
{
sopraSoglia = FALSE; //Riazzero la variabile che ho usato
if (statoLuce = LOW) //Se la luce era spenta
{
statoLuce = HIGH; //Accendila
}
else
{
statoLuce = LOW; //Spegnila
}
}
digitalWrite (LEDpin, statoLuce);
}
Ambrogio sei fantastico ed hai una gran pazienza , solo che io ho copiato e incollato pari pari il codice come me l'hai dato e la verifica di arduino è sempre negativa mi da degli errori , in particolare questi....
sketch_nov07a:5: error: 'FALSE' was not declared in this scope
sketch_nov07a.cpp: In function 'void loop()':
sketch_nov07a:22: error: 'TRUE' was not declared in this scope
sketch_nov07a:23: error: expected `;' before '}' token
sketch_nov07a:24: error: 'TRUE' was not declared in this scope
sketch_nov07a:26: error: 'FALSE' was not declared in this scope
e poi i "false" e "true" li devi scrivere in minuscolo
Così non da errori di compilazione, però non l'ho potuto provare perchè non ho l'hardware collegato. Fammi sapere, al max se non funziona ancora lo risolviamo insieme.
CIAO
int analogInput = 3;
int LEDpin = 13;
boolean statoLuce = LOW;
boolean sopraSoglia = false;
void loop()
{
value = analogRead(analogInput);
if (value > threshold)
{
sopraSoglia = true; //Memorizzo che ho superato la soglia
}
if (sopraSoglia == true && value < threshold) //Se ho superato la soglia e sono ritornato sotto la soglia
{
sopraSoglia = false; //Riazzero la variabile che ho usato
if (statoLuce = LOW) //Se la luce era spenta
{
statoLuce = HIGH; //Accendila
}
else
{
statoLuce = LOW; //Spegnila
}
}
digitalWrite (LEDpin, statoLuce);
}
IN TEMPO REALE: NIENTE DA FARE MA ORA STO PROVANDO A CAMBIARE I VALORI AL SENSORE ......... :o
NON SI PUO' AGGIUNGERE LE COSE CHE MANCANO AL PRIMO CODICE CHE AVEVO POSTATO? (CHE FUNZIONA BENE) .....
TI spiego perche mi sto incaponendo, avevo pensato di mettere un vecchio cellulare vicino al sensore e di collegarci la caldaia di casa cosi prima di tornare dal lavoro basta uno squillo e via in caso contrario pero' posso anche spegnerla......
Ma in che senso non funziona ? Non commuta mai ?!? Il programma commuta l'uscita quando il valore rilevato supera la soglia e poi ritorna al di sotto della soglia.
Se non funziona mi viene da pensare che non superi mai la soglia oppure che non vada mai al di sotto. Se hai impostato una soglia di 5 ma rilevi un valore che va dai 20 ai 100 giustamente non lo vedrai mai commutare.
Prova ad uploadare questo programma, serve per trasmettere ogni 100mS i valori che stai rilevando dal tuo sensore. Apri il serial monitor dall'IDE di Arduino e leggi i valori che rilevi, quando c'è silenzio e quando batti le mani. Così puoi sapere a che valore impostare la soglia. Se per esempio rilevi 20 quando c'è silenzio e 100 quando batti le mani, puoi impostare 50.
int analogInput = 3;
int value = 5;
void setup(){
pinMode(analogInput, INPUT);
Serial.begin(9600);
}
void loop()
{
value = analogRead(analogInput);
Serial.print(value);
delay(100);
}
Mi fai sentire una scarpa in materia ;D ;D ;D ;D ;D
il serial monitor mi da' solo una seria di aaaaaaaaaaaaa che anche se cambio i valori scorrono in avanti senza alcuna variazione nella velocità
(mi sale lo sconforto ....... :-[ :-[)
E non ti funziona ?!? Strano ... a quanto è impostato il valore di soglia ? Prova ad impostare threshold a 4. Se rilevi 1 o 2 e poi 5,6,7,8 o 9 quando batti le mani significa che la soglia la oltrepassi, e appena torni al di sotto lo stato dell'uscita dovrebbe cambiare. Non vedi il led 13 cambiare di stato ?
ho abbassato la soglia come mi hai detto ma non cambia nulla il led non si muove proprio,non è che il valore anzicche' essre 1 2 1ecc è 121? e tra l'altro quando carico lo sketch il led rimane spento anche il relay ma la luce è accesa ...... sta diventando una questione personale e mi spiace disturbare anche te ...
a questo punto non so come avevo fatto prima con lo sketch che usavo che al primo tentativo è andata bene (solo fortuna)
Ma se ricarichi il vecchio sketch ti funziona come prima ? E' per capire se è un problema hardware oppure software. Come hai collegato il relè ?
Potresti provare a collegare un potenziometro da almeno 4,7kOhm come partitore di tensione all'ingresso analogico al posto del microfono (5V e GND agli estremi e il pin centrale al tuo ingresso) e ruotando il potenziometro in un senso e poi nell'altro dovresti veder commutare l'uscita.
Provalo con entrambi. Il potenziometro serve per simulare il segnale del tuo microfono, siccome non sono sicuro di quali valori ti da il microfono, ci colleghi il potenziometro al suo posto così puoi ottenere tutti i valori che vuoi da 0 a 5V cioè da 0 a 1024. Infatti se apri il serial monitor con il programma che ti ho dato leggerai tutti i valori che ti ho detto.
Ormei è dventata una questione personale anche per me !