Vai al contenuto

8 relè con un solo pulsante


danielee73

Messaggi raccomandati

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);

}

}

Link al commento
Condividi su altri siti

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
Link al commento
Condividi su altri siti

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?

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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);

}

 

 

}

Link al commento
Condividi su altri siti

eccoti lo sketch:

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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

  • 1 anno dopo...

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



  • Community Hive Community Hive

    Community Hive allows you to follow your favorite communities all in one place.

    Follow on Community Hive
  • Utenti

    Non ci sono membri da mostrare

×
×
  • Crea Nuovo...