salve a tutti,sono nuovo e mi presento.
mi chiamo massimo e chatto da viterbo.
sto facendo amicizia con arduino,mi sto impegnando ma non è così semplice come mi aspettavo.
vi pongo subito il mio problema:
questo è quello che vorrei far fare ad un sensore ir...
ma mi da errore
perchè non posso mettere nessun delay dopo "if"???
in questo modo mi da errore!!!
Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:
Il codice DEVI racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
grazie e scusate se non ho letto il regolamento anticipatamente.
mi sono appena presentato sull'apposita pagina.
grazie per le risposte e....ops! le graffe { }
per sensore ir intendo quello di prossimità, con un diodo e un fotodiodo.
può arrivare a rilevare oggetti fino a 20 cm.
rileggerò ossessivamente questa parte riguardante l'if e l'else,
riproverò lo sketch
> maxtesla79: ti è già stato detto nel post#1, comunque ... ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post iniziale (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.
in realtà ci ho provato,credo di aver fatto come spiega gpb01, ma si vedono solo i segni ">" "<" all'inizio e alla fine dello sketch.
sicuramente ho tralasciato qualcosa.
maxtesla79:
in realtà ci ho provato,credo di aver fatto come spiega gpb01, ma si vedono solo i segni ">" "<" all'inizio e alla fine dello sketch.
Emmm ... quelli sono i simboli che vedi sul "bottone" che devi premere per inserire i TAG ... come ti ho scritto "sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra"
grazie per i vostri consigli.
sono molto emozionato,sto ampliando lo sketch e fa quasi quello che voglio.
se pigio il pulsante parte il loop ma se lo mollo si ferma tutto....
stasera farò una ricerca al riguardo.
questo "arducoso" è pazzesco!!!!
int green_led=7;
int red_led=8;
int pulsante=9;
int stato_pulsante=0;
void setup (){
pinMode(A0,INPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(13,OUTPUT);
pinMode(red_led,OUTPUT);
pinMode(green_led,OUTPUT);
pinMode(pulsante,INPUT);
digitalWrite(A2,HIGH);
digitalWrite(A1,LOW);
Serial.begin(9600);
}
void loop (){
Serial.println(analogRead(A0));
delay(100);
stato_pulsante=digitalRead(pulsante);
if(analogRead(A0)<500&&stato_pulsante==1)
{digitalWrite(green_led,HIGH);
digitalWrite(red_led,LOW);
digitalWrite(13,HIGH);
delay(50);
digitalWrite(13,LOW);
delay(300);}
else digitalWrite(13,LOW);
digitalWrite(red_led,HIGH);
digitalWrite(green_led,LOW);
}
In realtà il loop "parte sempre", ovvero si ripete sempre, essendo - appunto - un loop.
Sei tu che leggi sempre, ad ogni giro, il pulsante con:
stato_pulsante=digitalRead(pulsante);
se vuoi creare un sistema che cambia stato quando lo premi e lo lasci, devi agire diversamente.
Per prima cosa occorre eliminare i delay, infatti se premi - rilasci il pulsante, il programma se ne accorge solo se mentre è premuto sta eseguendo l'istruzione sopra citata, quindi devi fare in modo che tale istruzione venga eseguita con la maggiore frequenza possibile o devi usare un interrupt.
P.S.
Guarda fra gli esempi il codice di blink without delay
int green_led=7;
int red_led=8;
int pulsante=9;
int stato=0;
int val=0;
void setup (){
pinMode(A0,INPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(13,OUTPUT);
pinMode(red_led,OUTPUT);
pinMode(green_led,OUTPUT);
pinMode(pulsante,INPUT);
digitalWrite(A2,HIGH);
digitalWrite(A1,LOW);
Serial.begin(9600);
}
void loop (){
Serial.println(analogRead(A0));
delay(100);
if(val==1) {
(stato=1-stato);
}
stato=digitalRead(pulsante);
if(analogRead(A0)<500&&stato==1)
{digitalWrite(green_led,HIGH);
digitalWrite(red_led,LOW);
digitalWrite(13,HIGH);
delay(50);
digitalWrite(13,LOW);
delay(300);}
else digitalWrite(13,LOW);
digitalWrite(red_led,HIGH);
digitalWrite(green_led,LOW);
}
il problema è che vorrei far partire il loop con una sola pressione del pulsante, mantenendo il led verde acceso fino a che l'infrarosso non sente più l'ostacolo e quindi allo stop del loop stesso e all'inversione dei pin led.
così com'è adesso devo mantenere il pulsante premuto e comunque i led si accendono entrambi a fasi alterne.