Pulsante che manda un comando alla pressione ed uno diverso al rilascio

Ciao a tutti!

Sono nuovo su questo forum e neofita nel mondo Arduino.
Ho acquistato il libro di Leonardo Milani per studiare e seguo anche i video di Paolo Aliverti.

Mi trovo nel momento dello studio dove ho tante informazioni in testa e sono un po confuso.

Mi occupo di professional Show Lighting e sto facendo un Add-on per una console luci con OSC.
Ci sono molti esempi dove sto prendendo spunto e che mi sono d'auito (ho cmq molto lavoro da fare).
Dove invece non riesco trovare spunti e/o aiuti riguarda la gestione del pulsante con pressione/rilascio;

Ovvero io vorrei che alla pressione di un pulsante venga mandato un messaggio, ed al rilascio del medesimo ne venga mandato un altro, (una sola volta).

Ho preparato un harware prevedendo l'utilizzo della resistenza di PULLUP interna di Arduino sulla cui gestione ho poca esperienza (altri esperimenti fatti con dei relè ho cablato la resistenza da 10k su ogni pulsante)
incollo il piccolo (sicuramente errato) sketch che sto iniziando a fare:

Cmq nella porta seriale ottengo la risposta (le risposte...)

void setup() {

  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);

}


void loop() {
  if (digitalRead(2) == LOW) {

    Serial.println("Vediamo se funziona A");
  }

  if (digitalRead(3) == LOW) {

    Serial.println("Vediamo se funziona B");
  }
  if (digitalRead(4) == LOW) {

    Serial.println("Vediamo se funziona C");
  }
}

grazie in aticipo a chi vorrà darmi qualche aiuto/consiglio.

Giovanni

Buongiorno e benvenuto :slight_smile: ,

essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

... poi, in conformità al suddetto regolamento, punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE). Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nel rispetto del citato regolamento nessuno ti risponderà (eventuali risposte verrebbero cancellate), quindi ti consiglio di fare il tutto al più presto. :wink:

Salve,
come da gentile richiesta è stato fatto il tutto.
Grazie e perdoni le mancanze.
Giovanni

Benvenuto, Giovanni! :slight_smile:

Devi rilevare lo stato del pulsante e invertire l'uscita ogni volta che il pulsante cambia stato.
Quindi: leggi continuamente il pulsante e lo confronti con lo stato precedente (che ogni volta scrivi in una variabile): se è diverso, cambi lo stato dell'uscita.
E' indispensabile un antirimbalzo, che nella maniera più semplice può essere costituito da un condensatore da 100nF in parallelo al pulsante.

L'inversione puoi realizzarla con una variabile che passa da 0 a 1 e viceversa, ad esempio a=1-a, oppure leggendo lo stato corrente dell'uscita con digitalRead e scrivendo l'opposto con digitalWrite.
Leggi anche qui: Toggling a pin state - #3 by Arrch

Il tuo programma è perfetto... ma rileva semplicemente la pressione di un pulsante! :slight_smile:

Ciao e grazie,
mi hai dato tante informazioni, ora le studierò con attenzione, faro dei test ed eventualmente scriverò per eventuali dubbi.
Grazie anche per il link, perchè non sapevo esattamente che cosa andare a cercare per studiare, non essendo ferratissimo sull'argomento.
Saluti
Giovanni

1 Like