[RISOLTO] Azzeramento valore encoder con pulsante

Ciao a tutti, come da titolo, sto lavorando ad un progettino che consiste nell'impiegare un encoder rotativo, per determinare il numero di giri compiuto da un alberino, ad esso collegato; per poi scriverlo su un display a segmenti.
Fin qui nessun problema, lo sketch funziona perfettamente. Tuttavia ho la necessità di azzerare il valore letto dall'encoder premendo un pulsante.
Ho provato varie strade ma nulla, l'ultimo valore percepito dall'encoder rimane stampato sul display anche se premo il pulsante di rerset, è come se non accadesse nulla quando lo premo.
Ho controllato più volte i collegamenti e non ho trovato imperfezioni, l'unico problema a mio parere è qualcosa di mancante o di errato nello sketch che ora vi allego.
Ringrazio fin da subito quanti ci daranno un occhiata :slight_smile:

#include <Encoder.h>
#include <TM1637Display.h>

#define pulsante 11             // pin pulsante

int stato_pulsante = 0;

Encoder myEnc(2, 3);               // pin collegamento encoder

const int CLK = 6;                 // pin collegamento display
const int DIO = 7;    
TM1637Display display(CLK, DIO); 


void setup() {
  display.setBrightness(0x0a);        // setup display   

  pinMode ( pulsante, INPUT);        // setup pulsanti
  digitalWrite ( 11, LOW);
}

long oldPosition  =  -999;              

void loop() {                           // loop encoder e display
  long newPosition = myEnc.read();      
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    long quota = (newPosition/2391);      // divido il valore letto dall'encoder per ottenere un incremento di 1 per giro
    display.showNumberDec(quota);        // scrivo il sul display il valore diviso
  }

 stato_pulsante = digitalRead ( pulsante );             

  if ( stato_pulsante == HIGH ) { newPosition == 0; }     // se premo il pulsante azzero il conteggio dell'encoder

  
}

aggiungi la stampa del valore 0 quando premi il pulsante....

if ( stato_pulsante == HIGH ) {
    newPosition == 0;  // se premo il pulsante azzero il conteggio dell'encoder
    display.clear();    //non so come si chiama nella tua libreria, puoi anche pulire il display
    display.showNumberDec(0);
  }

Ciao Patrick_M, anzitutto ti ringrazio per il tuo aiuto. Ho provato a modificare lo sketch con il tuo suggerimento, e questo è quello che accade: premo il pulsante di reset e la cifra sul display si azzera (come dovrebbe essere) però quando ruoto nuovamente l'encoder, il conteggio riparte dall'ultimo numero visualizzato sul display, prima dell'azzeramento. es: se sul display leggo "10", premo reset e successivamente leggo "0", ruoto nuovamente l'encoder ed anzichè avere come valore sul display "1", ottengo "11". :frowning:

Azzera anche la variabile quota quando premi il pulsante...

Ragazzi sono appena riuscito a risolvere facendo cosi:

#include <TM1637Display.h>

#include <Encoder.h>


#define pulsante 11             // pin pulsante

int stato_pulsante = 0;

Encoder myEnc(2, 3);               // pin collegamento encoder

const int CLK = 6;                 // pin collegamento display
const int DIO = 7;    
TM1637Display display(CLK, DIO); 


void setup() {
  display.setBrightness(0x0a);        // setup display   

  pinMode ( pulsante, INPUT);        // setup pulsanti
  digitalWrite ( 11, LOW);
}

long oldPosition  =  -999;              

void loop() {                           // loop encoder e display
  long newPosition = myEnc.read();      
  if (newPosition != oldPosition) {
    oldPosition = newPosition;
    long quota = (newPosition/2391);      // divido il valore letto dall'encoder per ottenere un incremento di 1 per giro
    display.showNumberDec(quota);        // scrivo il sul display il valore diviso
  }

 stato_pulsante = digitalRead ( pulsante );             

  if ( stato_pulsante == HIGH ) {
    myEnc.write (0);                  
    
  }
  
}