grazie mille nn lo sapevo che si poteva fare in questo modo...
ma posso eliminarea nche le R in serie ai led mettendo ai pin dei led OUTPUT_PULLUP ??
cosa buffa.. avrò sbagliato ma nn capisco dove..
ho sostituito i miei pinMode(xx, INPUT) con :
pinMode(2,INPUT_PULLUP);//tasto 1
pinMode(3,INPUT_PULLUP);//tasto 5
pinMode(4,INPUT_PULLUP);//tasto 9
pinMode(5,INPUT_PULLUP);//tasto 3
pinMode(6,INPUT_PULLUP);//tasto *
ed ora peggio di prima! i 5 led lampeggiano simultaneamente ed ininterrottamente...
proverò in maniera classica con delle R da 10 K...
Piero
se metti le PullUp devi cambiare
if (StatoBottoneUNO == HIGH )
con
if (StatoBottoneUNO == LOW)
ok ora va!
ora come suggerisce Vittorio devo gestire il caso in cui quando ci si trova in un certo stato, si ritorna allo stato iniziale se premo un tasto diverso da quello atteso o se passa un certo timeout....
suggerimenti??
grazie infinite a tutti!!
Piero
credo di esserci riuscito!!
non è il massimo ma per ora mi accontento!! poi pian piano lo migliorerò ...
const int PinBottoneUNO = 2;
const int PinBottoneCINQUE = 3;
const int PinBottoneNOVE = 4;
const int PinBottoneTRE = 5;
const int PinBottoneASTERISCO = 6;
const int PinBottoneINATTESO= 12;
const int PinBottoneRESET=13;
int StatoBottoneUNO = 0 ;
int StatoBottoneCINQUE = 0 ;
int StatoBottoneNOVE = 0 ;
int StatoBottoneTRE = 0 ;
int StatoBottoneASTERISCO = 0 ;
int StatoBottoneINATTESO=0;
int StatoBottoneRESET=0;
int var = 0;//inizializzo la variabile "var" a 1
int contatore = 0;
void setup() {
pinMode(2,INPUT_PULLUP);// tasto 1
pinMode(3,INPUT_PULLUP);//tasto 5
pinMode(4,INPUT_PULLUP);//tasto 9
pinMode(5,INPUT_PULLUP);//tasto 3
pinMode(6,INPUT_PULLUP);//tasto *
pinMode(12,INPUT_PULLUP);// bottone inatteso incrementa di 1 il contatore
pinMode(13,INPUT_PULLUP);//RESET
pinMode(7,OUTPUT);//led
pinMode(8,OUTPUT);//led
pinMode(9,OUTPUT);//led
pinMode(10,OUTPUT);//led
pinMode(11,OUTPUT);//rele
}
void loop() {
StatoBottoneRESET = digitalRead(PinBottoneRESET);
if (StatoBottoneRESET == LOW){
StatoBottoneUNO = 0 ;
StatoBottoneCINQUE = 0 ;
StatoBottoneNOVE = 0 ;
StatoBottoneTRE = 0 ;
StatoBottoneASTERISCO = 0 ;
StatoBottoneINATTESO=0;
StatoBottoneRESET=0;
var = 0;
contatore = 0;
}
StatoBottoneINATTESO = digitalRead(PinBottoneINATTESO);
if (StatoBottoneINATTESO == LOW){
contatore=(contatore+1);
}
switch (var){
case 0:
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
var=1;
contatore=0;
break;
case 1:
StatoBottoneUNO = digitalRead(PinBottoneUNO);
if (StatoBottoneUNO == LOW && contatore==0)
{
digitalWrite(7,HIGH);
var = 2 ;
contatore=(contatore+1);
}
break;
case 2:
StatoBottoneCINQUE = digitalRead(PinBottoneCINQUE);
if (StatoBottoneCINQUE == LOW && StatoBottoneUNO == LOW && contatore ==1)
{
digitalWrite(8, HIGH);
var = 3 ;
contatore=(contatore+1);
}
break;
case 3:
StatoBottoneNOVE = digitalRead(PinBottoneNOVE);
if (StatoBottoneNOVE == LOW && StatoBottoneCINQUE == LOW && StatoBottoneUNO == LOW && contatore ==2 )
{
digitalWrite(9, HIGH);
var = 4 ;
contatore=(contatore+1);
}
break;
case 4:
StatoBottoneTRE = digitalRead(PinBottoneTRE);
if (StatoBottoneTRE == LOW && StatoBottoneNOVE == LOW && StatoBottoneCINQUE == LOW && StatoBottoneUNO == LOW && contatore ==3)
{
digitalWrite(10, HIGH);
var = 5 ;
contatore=(contatore+1);
}
break;
case 5:
StatoBottoneASTERISCO = digitalRead(PinBottoneASTERISCO);
if (StatoBottoneASTERISCO == LOW && StatoBottoneTRE == LOW && StatoBottoneNOVE == LOW && StatoBottoneCINQUE == LOW && StatoBottoneUNO == LOW )
{
digitalWrite(11, HIGH);//eccita il relè
delay(1000);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(11,LOW);
digitalWrite(10,LOW);
digitalWrite(7,LOW);
delay(1000);
var = 0;
break;
}
}
}
ciao e grazie
Piero
signori ma come faccio a sostituire il led con un rele?? ho comprato un relè la cui bobina si eccita a 6 volt, ma con il tester ho visto che sul piedino dove ho il led e voglio metterci il relè ho solo 3 volt, come faccio a far eccitare il relè?? esistono relè con bobine a 3 volt?(mi hanno detto di no...) è possibile amplificare il segnale in qualche modo... bjt...??
grazie piero
devi mettere un transistore e un diodo in antiparallello alla bobbina per non danneggiare il transistore.
http://www.ecs.umass.edu/ece/m5/images/relay_circuit_schematic_L.jpg
Ciao Uwe
ok chiaro!
grazie
ho realizzato il circuito postato da UWEFED e non va!
la R da 1 K sembra essere troppo grande credo.... eliminando la R e collegando l'OUTPUT dell'arduino direttamente sulla Base del transistor tutto funziona!!
la mia preoccupazione è la segunete:
togliendo la R posso danneggiare arduino?? ho provato con una R molto più iccola (2 da 330 in parallelo) e non funziona!l'unico modo per far eccitare il relè è togliere la R.
faccio bene??
altra curiosità sul circuito:
il diodo collegato in quel modo a cosa serve??
grazie piero
ho realizzato il circuito postato da UWEFED e non va!
Non e' possibile.
Dato che la Resistenza e' obbligatoria, altrimenti ti puo' saltare la porta di Arduino ( o anche il transistor ) controlla i collegamenti
poi, lo hai messo il Pinmode (pin,OUTPUT) ?
Il diodo serve a proteggere il transistor, visto che il Relè e' un carico induttivo e quindi possono crearsi sovratensioni
la mia paura infatti è proprio quella!!
il pinMode(pin, OUTPUT) ; c'è!
come è possibile vedere dal codice che ho postato precedentemente...
ricontrollo tt i collegamenti e faccio altre prove , ma credo di aver fatto tt a modo...
ciao
Ma che alimentazione usi per il relè?
i 5 v presi da arduino stesso, perchè nn vanno bene??
con una R da 110 ohm(tre da 330 in //) funziona!
è sufficente a nn bruciare transistor e/o pin arduino??
spero proprio di si..
piccola curiosità:
se io volessi usare un relè a 12 o 24 v(avendo ovviamente una alimentazione, separata da arduino, apposita)posso usare sempre lo steso circuito con gli stessi componenti, giusto??
alla fine il transistor nn amplifica il segnale ma funge solo da "interruttore" ,esatto o sto sbagliando??
grazie
ma che modello di transistor usi ?
è come da schema un 2n3904 ma non so dirti altro...
Da quello che dici, hai un relè con una bobina da alimentare a 6V e tu la (sotto)alimenti con i 5V di arduino... Ti funziona ma ha bisogno di parecchia corrente (con un datasheet del relè si potrebbe essere più precisi) e questo ti porta a dover abbassare la resistenza di base a livelli pericolosi per la porta del micro (sei al limite). Usa un alimentatore esterno e vedrai che puoi aumentare il valore della resistenza.