system
April 22, 2014, 7:14pm
1
selve a tutti;da poco mi sono cimentato nel mondo di arduino,e come tutto all inizio arrivano i problemi da risolvere..a voi chiedo unapiccola mano :il seguente programma spegne e accende due led (prima uno poi altro poi entrambi)premendo un pulsante di un radiocomando 4canali,vorrei che l ultimo skech (led ad intermittenza)vada sino a che io prema il pulsante del radiocomando quindi ritornando all inizio e via di seguito...come posso fare??grazie a tutti anticipatamente
int marco;
int lavatrice=0;
void setup(){
pinMode(13,OUTPUT);
pinMode(2,OUTPUT);
pinMode(11,INPUT);
Serial.begin(9600);
}
void loop() {
marco=digitalRead(11);
if ((marco==HIGH) and(lavatrice==0)) {
digitalWrite(13,HIGH);
Serial.println("LED ROSSO ACCESO");
digitalWrite(2,LOW);
Serial.println("LED VERDE SPENTO");
lavatrice=1;
delay(500);
Serial.println("STOP");
}
else if ((marco==HIGH) and (lavatrice==1)){
digitalWrite(13,LOW);
Serial.println("LED ROSSO SPENTO");
digitalWrite(2,HIGH);
Serial.println("LED VERDE ACCESO");
lavatrice=2;
delay(500);
Serial.println("STOP");
}
else if ((marco==HIGH) and (lavatrice==2)){
digitalWrite(13,HIGH);
Serial.println("LED ROSSO ACCESO");
digitalWrite(2,HIGH);
Serial.println("LED VERDE ACCESO");
lavatrice=3;
delay(500);
Serial.println("STOP");
}
else if((marco==HIGH) and (lavatrice==3))
{
digitalWrite(13,HIGH);
Serial.println("LED ROSSO ACCESSO");
digitalWrite(2,LOW);
Serial.println("LED VERDE SPENTO");
delay(1000);
digitalWrite(13,LOW);
Serial.println("LED VERDE ACCESSO");
digitalWrite(2,HIGH);
Serial.println("LED ROSSO SPENTO");
lavatrice=0;
delay(500);
Serial.println("");
Serial.println("STOP");
}
}
Benvenuto.
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum
Il codice devi postarlo racchiudendolo negli appositi tag (delimitatori)
Vedi sezione 7 del regolamento, spiega bene come fare.
ciao
si puo risolvere con un'altra variabile e un altro if
solo che se schiacci il pulsante mentre sei nei "delay" dell'ultima parte potrebbe non funzionare.
leo72
April 22, 2014, 9:16pm
4
system
April 27, 2014, 11:09am
5
si si per sbaglio..nn sono riscito a eliminarlo...scusate :|.....camperos grazie per l'aiuto ma questo if dove come l 'ho devo impostare per far si che lo sketc vada all infinito fino a nuovo ordine??
PaoloP
April 27, 2014, 11:37am
6
Ho modificato leggermente il tuo sketch inserendo il blocco switch
int marco;
int lavatrice = 0;
void setup() {
pinMode(13, OUTPUT);
pinMode(2, OUTPUT);
pinMode(11, INPUT);
Serial.begin(9600);
}
void loop() {
marco = digitalRead(11);
if (marco == HIGH) {
delay(20); // debounce
switch (lavatrice) {
case 0:
digitalWrite(13, HIGH);
Serial.println("LED ROSSO ACCESO");
digitalWrite(2, LOW);
Serial.println("LED VERDE SPENTO");
lavatrice = 1;
delay(500);
Serial.println("STOP");
break;
case 1:
digitalWrite(13, LOW);
Serial.println("LED ROSSO SPENTO");
digitalWrite(2, HIGH);
Serial.println("LED VERDE ACCESO");
lavatrice = 2;
delay(500);
Serial.println("STOP");
break;
case 2:
digitalWrite(13, HIGH);
Serial.println("LED ROSSO ACCESO");
digitalWrite(2, HIGH);
Serial.println("LED VERDE ACCESO");
lavatrice = 3;
delay(500);
Serial.println("STOP");
break;
case 3:
digitalWrite(13, HIGH);
Serial.println("LED ROSSO ACCESSO");
digitalWrite(2, LOW);
Serial.println("LED VERDE SPENTO");
delay(1000);
digitalWrite(13, LOW);
Serial.println("LED VERDE ACCESSO");
digitalWrite(2, HIGH);
Serial.println("LED ROSSO SPENTO");
lavatrice = 0;
delay(500);
Serial.println("");
Serial.println("STOP");
break;
default:
break;
}
}
}// end loop
Lo switch case permette di selezionare uno dei casi in base alla variabile di controllo, nel tuo caso lavatrice.
Ora devi solamente cambiare il modo di gestire la variabile lavatrice in modo che cambi ogni volta che premi il pulsante e non in base ai casi precedenti.
Se hai difficoltà chiedi.
Buona domenica.
so già che poi mi dici che funziona 1 volta si e 8 no
nella parte che vuoi fare continuare fino a nuovo ordine ci sono
1.5 secondi che il pulsante non puo funzionare
100 millisecondi circa che puo funzionare,
certo puoi guardare il led e premere al momento giusto
per quanto riguarda a cio che vuoi fare senza stravolgere il tuo sketch devi
esempio non completo:
int vaiSempre = 0;
-----------
else if((marco==HIGH) and (lavatrice==3)and(vaiSempre==0)
{
vaiSempre = 1;
}
if (vaiSempre==1 && marco==LOW){
//tuo sketch
}
//poi devi farlo tornare vaiSempre a 0 alla prossima pigiata di pulsante,
edit:
Paolo in contemporanea, c'ho messo 20 minuti a scrivere e non avevo visto la tua risposta