[RISOLTO]accendere e spegnere Relè

Salve a tutti, ritorno sul forum dopo essere stato assente per un po di tempo, ma vedo con piacere che è sempre più attivo!

Ho da poco acquistato una scheda relè ( http://www.robot-italy.com/it/itead-8-channels-5v-relay-module.html ) e sto facendo i miei primi passi per aprire e chiudere i relè ma mi succede una cosa strana

il programma dovrebbe fare questo:

al premere del pulsante 1 attivare il relè1, quando premo il pulsante 2 attivare il relè2 quando premo il pulsante 3 bloccare il relè2 quando premo il pulsante 4 spegnere tutti e due i relè mi sembra abbastanza semplice da gestire con dei semplici if

ma mi succede che premendo il pulsante2 che attiva il relè2 mi spegne automaticamente il relè1 che invece dovrebbe rimanere acceso. sbaglio qualcosa nella programmazione o mi sfugge il funzionamento della scheda dei relè?

void loop() 
{
...  
 Pulsante1 = digitalRead(PulsanteStart);
 Pulsante2 = digitalRead(PulsAvvio2);
 Pulsante3 = digitalRead(PilsStop2);
 Pulsante4 = digitalRead(PulsanteStop);

if (Pulsante1 == HIGH) {     
    // Relay 1 ON
    digitalWrite(Relay1, HIGH);  
  } 
  if (Pulsante4 == HIGH) {     
    // Relay 1 e 2 LOW per  bloccare tutto 
    digitalWrite(Relay 1 , LOW);
    digitalWrite(Relay2, LOW);  
  } 
  if (Pulsante2 == HIGH) {     
      // Relay 2 HIGH
    digitalWrite(Relay2, HIGH);  
  } 
  if (Pulsante3 == HIGH) {     
     // Relay 2 LOW 
    digitalWrite(Relay2, LOW);  
  } ....

vi ringrazio in anticipo

ci sono troppi errori di sintassi in quelle poche righe che hai messo, forse e' il caso che tu faccia copia e incolla dello sketch reale

oltre a quanto detto da Bunello, poi mi chiedo come piloti questi rele e come li alimenti. ]:(sul tuo link non ho letto nulla approposito di transitor o altro di pilotaggio, anche se pare possano essere pilotati in diretta), ma rimane il dubbio dell'alimentazione!

Cosa vuol dire bloccare il relè ? Almeno se lo posti tutto vediamo anche il setup non si sa mai ...

grazie ragazzi per le risposte immediate ho aggiunto alcuni altri paramentri nel codice ma il problema persiste

lo shield dei 8 relè lo alimento con i 5v dell'arduino vi posto il codice completo come potete notare dal commento nell'ultimo if ho ovviato al problema mettendo in hight anche il relè che si spegne digitalWrite(AvviaCucitrice, HIGH);

mi chiedevo se è normale questo comportamento

int PulsanteStart = 13;          //
int AvviaCucitrice = 1;         // Relay 1 per marcia cucitrice
int MarciaAvvolgitore = 2;      // Relay 2 per marcia avvolgitore
int AbilitazioneInverter = 3;   // Relay 3 per abilitazione inverter
int AllarmeFrenoMacchina = 4;   // Relay 4 per allarme fermo macchina
int Contametri = 5;             // Ingresso conta impulsi per contametri e stop macchina per nastro inceppato.
int SaliscendiH = 6;            // Ingresso finecorsa saliscendi su
int SaliscendiL = 7;            // Ingresso finecorsa saliscendi giu
int NastroFuoriH = 8;           // Ingresso nastro superiore fuori posizione 
int NastroFuoriL = 9;           // Ingresso nastro inferiore fuori posizione 
int RotturaFilo = 10;           // Ingresso sensore rottura filo
int TermicoMotore = 11;         // Ingresso stop macchina per scatto termico motore cucitrice 
int TermicoAvvolgitore = 12;    // Ingresso stop macchina per scatto termico motore avvolgitore
int MarciaManuale = A3;         // Ingresso marcia manuale avvolgitore
int AnomaliaInverter = A0;      // A0 Analogico usato come pin Digitale per ingresso allarme anomalia inverter
int IngressoMarcia = A1;        // A1 Analogico usato come pin Digitale per ingresso di marcia cucitricein 
int FineBobbina = A2;           // A2 Analogico usato come pin Digitale per ingresso micro fine bobina
int StatoPulsante = 0;          // variable for reading the pushbutton status
int StatoSaliscendiH = 0;
int StatoSaliscendiL = 0;
int StatoNastroFuoriL = 0;
int StatoNastroFuoriH = 0;
void setup() 
{
  pinMode(PulsanteStart, INPUT);          // Set Pin as input
  pinMode(AvviaCucitrice, OUTPUT);        // Set Pin as output
  pinMode(MarciaAvvolgitore, OUTPUT);     // Set Pin as output
  pinMode(AbilitazioneInverter, OUTPUT);  // Set Pin as output
  pinMode(AllarmeFrenoMacchina, OUTPUT);  // Set Pin as output
  pinMode(Contametri, INPUT);             // Set Pin as input
  pinMode(SaliscendiH, INPUT);            // Set Pin as input
  pinMode(SaliscendiL, INPUT);            // Set Pin as input
  pinMode(NastroFuoriH, INPUT);           // Set Pin as input 
  pinMode(NastroFuoriL, INPUT);           // Set Pin as input 
  pinMode(RotturaFilo, INPUT);            // Set Pin as input
  pinMode(TermicoMotore, INPUT);          // Set Pin as input
  pinMode(TermicoAvvolgitore, INPUT);     // Set Pin as input
  pinMode(MarciaManuale, INPUT);          // Set Pin as input
  pinMode(AnomaliaInverter, INPUT);       // Set Pin as input
  pinMode(IngressoMarcia, INPUT);         // Set Pin as input 
  pinMode(FineBobbina, INPUT);            // Set pin as input
}

void loop() 
{
  StatoPulsante = digitalRead(PulsanteStart);
  StatoSaliscendiH = digitalRead(SaliscendiH);
  StatoSaliscendiL = digitalRead(SaliscendiL);
  StatoNastroFuoriL = digitalRead(NastroFuoriL);
  StatoNastroFuoriH = digitalRead(NastroFuoriH);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (StatoPulsante == HIGH) {     
    // Relay 1 ON per marcia cucitrice ON  
    digitalWrite(AvviaCucitrice, HIGH);  
  } 
  if (StatoNastroFuoriL == HIGH) {     
    // Relay 1 e 2 OFF per marcia cucitrice OFF se nastro sotto fuori
    digitalWrite(AvviaCucitrice, LOW);
    digitalWrite(MarciaAvvolgitore, LOW);  
  } 
  if (StatoNastroFuoriH == HIGH) {     
    // Relay 1 OFF per marcia cucitrice OFF se nastro sopra fuori
    digitalWrite(AvviaCucitrice, LOW);
    digitalWrite(MarciaAvvolgitore, LOW);  
  } 
  if (StatoSaliscendiH == HIGH) {     
    // Relay 2 OFF per marcia avvolgitore OFF   
    digitalWrite(MarciaAvvolgitore, LOW);  
  } 
  if (StatoSaliscendiL == HIGH) {     
    // Relay 1 e 2 ON per marcia avvolgitore ON devo riavviare anche motore cucirtice altrimenti va in LOW
    digitalWrite(AvviaCucitrice, HIGH);    
    digitalWrite(MarciaAvvolgitore, HIGH);  

  } 
}

prova ad alimentarlo (come è anche scritto nel link) con alimentatore esterno a 5vcc naturalmente e con sufficiente corrente!

prima di modificare /aggiungere/levare righe di codice fa quanto sopra, poi si valuta!

grazie Martinix proverò il tuo consiglio e faccio sapere sviluppi

è forse superfluo dilro, ma meglio sottolinearlo, se non ci son fotoacoppiatori, le masse [u]devono essere messe in comune(arduino/alimentatore)[/u]

GRAZIE RAGAZZI!

ho scoperto l'errore. in pratica avevo inserito nel codice dei digitalread su pin che non avevo collegato (per portarmi avanti con il lavoro) ma non sapevo che arduino dava dei random high low come è ben specificato nei tutorial http://arduino.cc/en/tutorial/button If you disconnect the digital i/o pin from everything, the LED may blink erratically. This is because the input is "floating" - that is, it will randomly return either HIGH or LOW. That's why you need a pull-up or pull-down resistor in the circuit. grazie ancora per i vostri suggerimenti.