Benvenuto in Moddingstudio.com.
Pagina 1 di 2 12 UltimaUltima

  1. #1
    danielee73 č offline
    • Registrato da Nov 2012
    • Messaggi: 29
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Unhappy 8 relč con un solo pulsante

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

  2. # ADS
    Circuit advertisement


     

  3. #2
    RyujiAndy č offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Se posti lo schema elettrico di come hai collegato il tutto questa sera posso buttarti giů il programma
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  4. #3
    SPIKE666 č offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 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

  5. #4
    danielee73 č offline
    • Registrato da Nov 2012
    • Messaggi: 29
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Citazione Originariamente Scritto da SPIKE666 Visualizza Messaggio
    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?

  6. #5
    danielee73 č offline
    • Registrato da Nov 2012
    • Messaggi: 29
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    questo č link dello schema dei collegamenti.
    [Solo gli utenti registrati e attivati possono vedere i link ]

  7. #6
    RyujiAndy č offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    Nello schema che mi hai linkato CI sono 4 relay e TU parli di 8, basta che sappia quali pin intendi utilizzare.
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

  8. #7
    danielee73 č offline
    • Registrato da Nov 2012
    • Messaggi: 29
    • Ha ringraziato: 0
      Grazie ricevuti: 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

  9. #8
    SPIKE666 č offline
    • Registrato da Dec 2009
    • Messaggi: 199
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    Citazione Originariamente Scritto da danielee73 Visualizza Messaggio
    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);
    }


    }

  10. #9
    danielee73 č offline
    • Registrato da Nov 2012
    • Messaggi: 29
    • Ha ringraziato: 0
      Grazie ricevuti: 0

    non preoccuparti, non ti uccido.
    Intanto grazie. Quando arrivo a casa lo provo. Ti faccio sapere.

    grazie.

  11. #10
    RyujiAndy č offline
    • Registrato da Jul 2009
    • Messaggi: 668
    • Ha ringraziato: 1
      Grazie ricevuti: 11

      Visita il profilo Google+ di RyujiAndy
    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
    Stesso pianeta Tutto un altro Mondo
    Gleiche Planet ganz andere Welt.

Tag per Questa Discussione

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Torna a inizio pagina
Moddingstudio.com - Powered by vBulletin
Copyright (c) 2011 vBulletin Solutions, Inc. All rights reserved.
Brown Editore S.r.l. - Capitale Sociale 1.087.500€ I.V. - P.Iva: 12899320159 - Viale Sarca, 336 Edificio 16 - 20126 Milano
Tutti gli orari sono GMT +1. Adesso sono le 13:22.