8 relè con un solo pulsante

Benvenuto in Moddingstudio!
Iscriviti subito per partecipare a questa fantastica community!
REGISTRATI ADESSO!

danielee73

Fresh User
8 Novembre 2012
29
0
2
Ciao a tutti, ho una scheda con 8 relè e vorrei provare a pilotarla con un solo tasto. Mi spiego meglio, vorrei utilizzalo per scambiare i vari relè. Es:spingo il tastino si eccita il primo relè, sipingo di nuovo, si spegne il primo e si eccita il secondo e così via fino a riniziare il ciclo.
io ho provato con il primo ma non so come farlo spegnere e attivare il secondo.
il programma base è quello tipico del led:
const int rele=13;
consr int tasto=7;
int memoria=0;
int stato=0;
val=0;

void setup(){
pinMode(rele, OUTPUT);
pinMode(tasto, INPUT);

void loop(){
val=digitalRead(tasto);

if((val==HIGH)&&(memoria=LOW){
state=1-state;
delay(10);
}
memoria=val;
if (state==1){
digitalWrite(rele, HIHG);
}else{
digitalWrite(rele, LOW);
}
}
 

RyujiAndy

Regular User
5 Luglio 2009
668
0
0
Se posti lo schema elettrico di come hai collegato il tutto questa sera posso buttarti giù il programma
 

SPIKE666

Regular User
26 Dicembre 2009
201
0
0
Secondo me se imposti 8 uscite indipendenti, e col pulsante vai ad incrementare una variabile, e questa variabile controllata da una serie di 8 if la cui affermazione positiva disabilita l'uscita precedente e attiva la successiva magari con un ritardo se ti va, risolvi con un programmino semplice semplice
 

danielee73

Fresh User
8 Novembre 2012
29
0
2
Secondo me se imposti 8 uscite indipendenti, e col pulsante vai ad incrementare una variabile, e questa variabile controllata da una serie di 8 if la cui affermazione positiva disabilita l'uscita precedente e attiva la successiva magari con un ritardo se ti va, risolvi con un programmino semplice semplice
ciao grazie di avermi risposto.
Siccome sono all'inizi con arduino come faccio a incrementare una variabile con il tasto?
 

RyujiAndy

Regular User
5 Luglio 2009
668
0
0
Nello schema che mi hai linkato CI sono 4 relay e TU parli di 8, basta che sappia quali pin intendi utilizzare.
 

danielee73

Fresh User
8 Novembre 2012
29
0
2
Ciao, scusa dell'attesa ma ho poco tempo. Allora è vero quello che dici ma la scheda che ho è più o meno la stessa. Se il programma può funzionare su 4 relè può essere ampliato anche su 8. L'unico cosa che non so, e come fargli fare il ciclo con una variabile che conta fino a 8 e poi azzera per riniziare.
ciao
 

SPIKE666

Regular User
26 Dicembre 2009
201
0
0
Ciao, scusa dell'attesa ma ho poco tempo. Allora è vero quello che dici ma la scheda che ho è più o meno la stessa. Se il programma può funzionare su 4 relè può essere ampliato anche su 8. L'unico cosa che non so, e come fargli fare il ciclo con una variabile che conta fino a 8 e poi azzera per riniziare.
ciao
io farei cosi (sono un neofita non uccidetemi)

#define puls 3 // assegnazione pin pulsante
#define rele1 4 // assegnazione pin relè
#define rele2 5 // assegnazione pin relè
#define rele3 6 // assegnazione pin relè
#define rele4 7 // assegnazione pin relè
#define rele5 8 // assegnazione pin relè
#define rele6 9 // assegnazione pin relè
#define rele7 10 // assegnazione pin relè
#define rele8 11 // assegnazione pin relè

int i=0;//variabile controllo


void setup()
{

pinMode(rele1, OUTPUT); //assegnata uscita relè
pinMode(rele2, OUTPUT); //assegnata uscita relè
pinMode(rele3, OUTPUT); //assegnata uscita relè
pinMode(rele4, OUTPUT); //assegnata uscita relè
pinMode(rele5, OUTPUT); //assegnata uscita relè
pinMode(rele6, OUTPUT); //assegnata uscita relè
pinMode(rele7, OUTPUT); //assegnata uscita relè
pinMode(rele8, OUTPUT); //assegnata uscita relè

pinMode(puls , INPUT); //assegna ingresso pulsante ora


digitalWrite(puls, HIGH); //Abilita res. pull-up così da collegare il pulsante tra gnd e il pin 3


}


void loop() {


if (digitalRead(puls) == LOW) // Pulsante premuto
{
i++;
delay (1000); //ritardo di un secondo puoi toglierlo se ti va
}



if(i==9) //limite cicli variabile
{
i=0;
}

//Abilitazione uscte

if(i == 0)
{
digitalWrite(rele1, LOW);
digitalWrite(rele2, LOW);
digitalWrite(rele3, LOW);
digitalWrite(rele4, LOW);
digitalWrite(rele5, LOW);
digitalWrite(rele6, LOW);
digitalWrite(rele7, LOW);
digitalWrite(rele8, LOW);
}

if(i == 1)
{
digitalWrite(rele1, HIGH);
}

if(i == 2)
{
digitalWrite(rele1, LOW);
delay(1000);
digitalWrite(rele2, HIGH);
}

if(i == 3)
{
digitalWrite(rele2, LOW);
delay(1000);
digitalWrite(rele3, HIGH);
}

if(i == 4)
{
digitalWrite(rele3, LOW);
delay(1000);
digitalWrite(rele4, HIGH);
}

if(i == 5)
{
digitalWrite(rele4, LOW);
delay(1000);
digitalWrite(rele5, HIGH);
}

if(i == 6)
{
digitalWrite(rele5, LOW);
delay(1000);
digitalWrite(rele6, HIGH);
}

if(i == 7)
{
digitalWrite(rele6, LOW);
delay(1000);
digitalWrite(rele7, HIGH);
}

if(i == 8)
{
digitalWrite(rele7, LOW);
delay(1000);
digitalWrite(rele8, HIGH);
}


}
 

danielee73

Fresh User
8 Novembre 2012
29
0
2
non preoccuparti, non ti uccido.
Intanto grazie. Quando arrivo a casa lo provo. Ti faccio sapere.

grazie.
 

RyujiAndy

Regular User
5 Luglio 2009
668
0
0
eccoti lo sketch:
Codice:
int tasto = 2; // Pin Tasto
int relay[] = {3, 4, 5, 6, 7, 8, 9, 10}; // Array pin Relays
int statotasto = 0; // memoria provvisoria tasto
int ultimostatotasto = 0; // vecchia memoria provvisoria tasto
int relayattivo = 8;

void setup() {
  pinMode(tasto, INPUT); // definisco ingresso pin tasto
  for (int a = 0; a < 8; a++) { // ciclo 8x
    pinMode(relay[a], OUTPUT); // definisco uscite relay
  }
}

void loop() {
  statotasto = digitalRead(tasto); // Leggo stato tasto
  if (statotasto == 1) ultimostatotasto = 1; // se il tasto è premuto gli lo assegno alla memoria
  if (statotasto == 0 && ultimostatotasto == 1) { // se la memoria è attiva e lo stato attuale è disattiv o allora
    ultimostatotasto = 0; // azzero la memoria
    relayattivo++; // incremento il relay attivo 
    if (relayattivo > 8) relayattivo = 0; // se il relay attivo supera l'8 allrora lo riazzero
  }
  for (int a = 0; a < 8; a++) { // ciclo 8x
    if (a == relayattivo) { // se il ciclo è uguate al relay attivo
      digitalWrite(relay[a], HIGH); // attivo il relay
    } else { // altrimenti
      digitalWrite(relay[a], LOW); // distattivo il relay
    }
  }
  delay(50);
}
devi solo assegnare i pin esatti.
P.S.: scusa il ritardo ma da quando insegno wiring ho un sacco da fare
 

danielee73

Fresh User
8 Novembre 2012
29
0
2
Buongiorno a tutti.
Allora ho provato il programma di spike666 e devo dire che funziona bene, ho solo apportato alcune modifiche sui tempi perchè era troppo lento, ma ripeto va benissimo. Oggi se ho tempo voglio provare a caricare quello di Ryujiandy, che è molto breve e usa l'array per risolvere i cicli if. vi faccio sapere
 

federico18

Fresh User
7 Dicembre 2015
2
0
0
73
gradirei avere progetto e sketch di questo progetto.Mi sono iscritto 10 minuti fa e sono rimasto colpito.Colgo l'occasione per ringraziarvi per avermi accettato.Grazie
 

Ultimi Messaggi

Statistiche del Sito

Discussioni
82.047
Messaggi
748.206
Membri
130.301
Ultimo iscritto
CalemSe