Buon giorno,
dopo un po' di prove sono al mio primo progetto con uno scopo.
Il programma dovrebbe accendere 3 led ogni volta che il piezzo viene sollecitato e progressivamente spegnerli. Se viene risollecitato si riaccendono e ripartono a calare progressivamente (in allegato lo schema). uso arduino Uno R3.
lo sketch:
int Movimento=0;
const int PinMovimento=A0;
const int PinMov=2;
const int PinLed=3;
const int PinLed2=5;
const int PinLed3=9;
unsigned int residuoMovimento=0;
unsigned int tempi=millis();
unsigned int tempodireazione=100;
unsigned int sensibilita=2;
unsigned int a=0;
char dba=1;
void ricarica(int quanto){
a++;
if (a<5){
residuoMovimento=255;
if (dba){ Serial.print("\t a: ");}
if (dba){ Serial.println(a);}
}
}
void setup() {
if (dba){Serial.begin(9600);}
pinMode(PinMov,OUTPUT);
pinMode(PinLed,OUTPUT);
pinMode(PinLed2,OUTPUT);
pinMode(PinLed3,OUTPUT);
}
void loop() {
Movimento=analogRead(PinMovimento);
//delay(2);
if (Movimento>sensibilita){
if (dba){ Serial.print("\t Movimento: ");}
if (dba){ Serial.println(Movimento);}
ricarica(Movimento);
if (dba){ Serial.print("\t residuoMovimento: ");}
if (dba){ Serial.println(residuoMovimento);}
}
if (((millis()-tempi)>tempodireazione) && (residuoMovimento>0)){
residuoMovimento=residuoMovimento-5;
if (dba){ Serial.println(constrain(residuoMovimento,0,255));}
analogWrite(PinLed, constrain(residuoMovimento,0,255));
analogWrite(PinLed2, constrain(residuoMovimento,0,255));
analogWrite(PinLed3, constrain(residuoMovimento,0,255));
tempi=millis();
if (residuoMovimento==0){a=0;}
}
}
Problema1: quando collego 1 solo led il piezzo ha una sensibilità ragionevole, quando sono collegati 3 led praticamente sempre va in loop registrando un micro movimento, ho sistemato un po' le cose ritardando la lettura successiva e introducendo una tolleranza ma qualche volta va in loop leggendo sempre lo stesso valore anche con valori maggiori.
Problema2: se collegato via usb i cicli hanno un tempo, se lo collego via usb ad un alimentatore (quello della apple 1A-5V) il ciclo è tutto sballato (molto più istantaneo).
avete un suggerimento su dove ricercare il problema? Credo che il problema stia nei collegamenti o nel metodo in cui ho collegato l'hardware.
La variabile a è un bruttissimo sistema per uscire dal loop quando ci entra ma non è un sistema decoroso...
Grazie,
T.