Allora prima di tutto vi metto il circuito fatto con fritzing:
adesso vi spiego il mio "problema".
Quello che voglio provare a fare è accendere i led in sequenza a distanza di un secondo l'uno dall'altro,se e solo se il bottone rimane premuto.
Con questo codice:
const int v = 2;
const int r1=3;
const int r2 = 4;
const int r3=5;
const int g = 6;
const int bottone = 12;
int statoBottone;
void setup(){
pinMode(v,OUTPUT);
pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT);
pinMode(r3,OUTPUT);
pinMode(g,OUTPUT);
pinMode(bottone,INPUT);
}
void loop(){
statoBottone=digitalRead(bottone);
if(statoBottone==HIGH){
delay(1000);
digitalWrite(v,HIGH);
delay(1000);
digitalWrite(r1,HIGH);
delay(1000);
digitalWrite(r2,HIGH);
delay(1000);
digitalWrite(r3,HIGH);
delay(1000);
digitalWrite(g,HIGH);
}
if(statoBottone==LOW){
for(int i=2;i<=6;i++) digitalWrite(i,LOW);
}
}
Più o meno ottengo quello che voglio,però ovviamente quando smetto di schiacciare il bottone non è detto che i Led si spengano subito..
Qui Arduino Playground - HoldButton e qui Arduino Playground - AvoidDelay ho letto un po' sulla funzione millis() che forse è quella che mi serve,ma non riesco ad utilizzarla,ho provato così,ma non funziona:
const int v = 2;
const int r1=3;
const int r2 = 4;
const int r3=5;
const int g = 6;
const int bottone = 12;
unsigned long int timer;
int statoBottone;
void setup(){
pinMode(v,OUTPUT);
pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT);
pinMode(r3,OUTPUT);
pinMode(g,OUTPUT);
pinMode(bottone,INPUT);
}
void loop(){
statoBottone=digitalRead(bottone);
if(statoBottone==HIGH){
timer = millis();
if(millis()-timer >=1000) digitalWrite(v,HIGH);
if(millis()-timer >=2000) digitalWrite(r1,HIGH);
if(millis()-timer >=3000) digitalWrite(r2,HIGH);
if(millis()-timer >=4000) digitalWrite(r3,HIGH);
if(millis()-timer >=5000) digitalWrite(g,HIGH);
}
if(statoBottone==LOW){
for(int i=2;i<=6;i++) digitalWrite(i,LOW);
}
}
Ho provato in questo modo perchè se ho ben capito millis() restituisce i millisecondi passati dal momento in cui si avvia il microprocessore della scheda arduino,quindi se a timer assegno i millisecondi che sono passati quando premo il bottone millis()-timer dovrebbe essere il tempo in cui il bottone rimane schiacciato.
Sicuramente è sbagliato perchè non funziona:)
Grazie in anticipo per l'aiuto e chiedo scusa per il messaggio un po' lungo..