Vorrei che se un pin è HIGH lo sketc facesse delle cose diverse dal pin in LOW

Sò che il titolo è confusionale.

Cerco di spigarmi meglio, vorrei che se ho D2 HIGH lo sketch faccia una cosa e se D2 è LOW vorrei ne facesse un'altra.

Mi potete consigliare su cosa devo focalizzare le mie ricerche?
Grazie

Molto semplicemente devi definire il pin come un pin in input tramite la funzione pinMode() e poi ne leggi lo stato tramite la funzione digitalRead() e ti comporti di conseguenza … :slight_smile:

Guglielmo

Ciao Guglielmo,
ne approfitto ancora della tua esperienza.

Ciò che ho bisogno è che arduino faccia proprio due cose diverse.

Cioè, dopo il setup, ad un certo punto del loop ho bisogno che lo sketch se D2 è HIGH faccia delle cose e se è LOW ne faccia altre.
In pratica mi servirebbe che ad un certo punto aver la possibilità, tramite un selettore/pulsante, di far imboccare o la strada A o la strada B.

La soluzione piu semplice che mi viene in mente e' if...else ... Arduino - Else

Etemenanki:
La soluzione piu semplice che mi viene in mente e' if...else ... Arduino - Else

Sicuramente, per quello che vuole fare gelholder, è la soluzione ideale :grin:

Guglielmo

Lo sketch che ho fa si che se la corrente “currentValue” è maggiore di 3 si attiva un relè ed il dmx assume il valore dato dal potenziometro.

Ciò che vorrei fare è avere la possibilità, tramite un selettore, a bisogno, di poter escludere “currentValue” e poter attivare il relè ed avere l’uscita dmx al valore dato dal potenziometro anche quindi nel caso in cui “currentValue” sia inferiore a 3.
Il codice senza selettore è (e funziona benissimo):

 int dmxchannel= (pippo);
      Serial.println(dmxchannel);
ChDMX=(dmxchannel);
pot1=analogRead(A1);
 if (currentValue >= 3)
   {
    digitalWrite(8, HIGH);
    Serial.println("Relais ON");
 
             
DMXvalue=map(pot1,0,1023,1,255);   
Serial.println(DMXvalue); 

    }
  else if (currentValue < 3) 
    {
    digitalWrite(8, LOW);
    DMXvalue=0;
    Serial.println("Relais OFF"); 
    }
    DmxSimple.write(ChDMX, DMXvalue);

Ho provato a var questo (aggiungendo un pulsante su D2)… con le varie variabili che mi son passate per la testa…:

int dmxchannel= (pippo);
Serial.println(dmxchannel);
ChDMX=(dmxchannel);
pot1=analogRead(A1);
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
 
if (buttonState=HIGH)
     {
      if (currentValue >= 3)
       {
        digitalWrite(8, HIGH);
        Serial.println("Relais ON");            
        DMXvalue=map(pot1,0,1023,1,255);   
        Serial.println(DMXvalue); 
       }
       else if (currentValue < 3) 
       {
        digitalWrite(8, LOW);
        DMXvalue=0;
       Serial.println("Relais OFF"); 
       }
      DmxSimple.write(ChDMX, DMXvalue);
    } 
  else if (buttonState=LOW)
  {
    DMXvalue=map(pot1,0,1023,1,255);   
    Serial.println(DMXvalue); 
    DmxSimple.write(ChDMX, DMXvalue);
  }

… ma mantenendo premuto il pulsante, come se fosse un selettore, non influisce minimamente sull’andamento dello sketch e funziona come lo sketch “originale” ove l’uscita è attivata solo se ho un carico superiore al valore pre-impostato.
Forse devo usare degli interrupt?

A parte che se hai postato lo sketch completo, non vedo dove hai dichiarato il pin del pulsante, comunque in quel modo peggiori le cose... Hai messo un if dentro l'altro, se il primo non è soddisfatto il secondo manco lo guarda, per cui per avere il relay on dovresti per forza avere il pulsante high e il current value maggiore di 3... Riprendi il primo sketch, ci metti tutti i dati per dichiarare il pulsante, poi nell'if fai un or cioè metti che se il current value è maggiore di 3 o il pulsante è high, esegui tutta la tiritera... Nell'else invece metti un and cioè se current value è minore di 3 e il pulsante è low eseguì quest'altra cosa... Non sono un programmatore ma spero di essermi spiegato...

ho provato a fare questo, non va ed il relè mi stava impazzendo…

int pot1=analogRead(A1);
int pushButton = 2;
int ChDMX;
int DMXvalue;
int dmxchannel= (pippo);
Serial.println(dmxchannel);
ChDMX=(dmxchannel);
pot1=analogRead(A1);
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);

 if ((currentValue >= 3) or (buttonState=HIGH))
    {
    digitalWrite(8, HIGH);
    Serial.println("Relais ON");            
    DMXvalue=map(pot1,0,1023,1,255);   
    Serial.println(DMXvalue); 
    }
  else if ((currentValue < 3) or (buttonState=LOW))
    {
    digitalWrite(8, LOW);
    DMXvalue=0;
    Serial.println("Relais OFF"); 
    }
    DmxSimple.write(ChDMX, DMXvalue);

Guarda: && - Arduino Reference

Invece di

or

si usa

||

Per non parlare del fatto che questa è un'assegnazione, non un confronto:

buttonState=HIGH

Già... diciamo che ha usato una sintassi "alla BASIC".... :grin:

E poi nell'else if ci vuole un and e non un or... Sempre booleano chiaramente...

HO CAPITO ED HO RISOLTO!

:slight_smile:

GRAZIE