problema con software pallone aerostatico

Ciao a tutti, sono un principiante.
Ho costruito un contagiri che serve per misurare l’altitudine di un pallone aerostatico e la sua velocità di salita da terra. È formato da un disco di plexiglass collegato a una puleggia in cui il filo che tiene il pallone fa un giro completo, e contiene un magnete il cui passaggio viene rilevato da un sensore ad effetto Hall. Il segnale viene quindi mandato ad un Arduino Uno R3 che moltiplica la circonferenza della puleggia per il numero di giri che essa ha compiuto, ottenendo così la lunghezza del filo passato e di conseguenza l'altitudine del pallone.
Ho un problema con il programma. Devo fare in modo che quando il valore del sensore Hall scende a zero a causa del passaggio del magnete, la variabile giri aumenti di uno. La variabile giri e il valore del sensore devono essere stampati su un lcd. Tuttavia, l'LCD si aggiornerebbe troppe volte a causa del comando lcd.clear(), risultando così quasi sempre vuoto. Non posso metter un delay, perche questo bloccherebbe tutto il ciclo, includendo la rilevazione del sensore e rischiando di perdere un passaggio del magnete.
Come posso fare?
Grazie mille in anticipo,
N.Bagnasco

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… 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 il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

nk842:
Devo fare in modo che quando il valore del sensore Hall scende a zero a causa del passaggio del magnete, la variabile giri aumenti di uno. La variabile giri e il valore del sensore devono essere stampati su un lcd. Tuttavia, l'LCD si aggiornerebbe troppe volte a causa del comando lcd.clear(), risultando così quasi sempre vuoto.

Per gestire la visualizzazione puoi stampare il solo valore nelle posizioni specifiche, ad esempio se hai 4 cifre ti basterà posizionare il cursore (lcd.setCursor) alla riga e colonna dove iniziare a scrivere, e "riempire" con spazi, ad esempio:

void mostraContatore(int valore) {
  lcd.setCursor(6,0); // Riga 0 colonna 6
  if ( valore <1000 )
    lcd.print(" ");
  if ( valore <100 )
    lcd.print(" ");
  if ( valore <10 )
    lcd.print(" ");
  lcd.print(valore);
}

A quel punto aggiorni solo il valore. Ovviamente questo aggiornamento lo farai solamente quando il valore cambia (meglio evitare di farlo continuamente nel loop, tanto sarebbe inutile).

Per rilevare il cambiamento ti consiglierei di usare un interrupt nel quale aggiorni solo il contatore (ricorda che in tal caso la variabile devi definirla "volatile"), poi nel loop() puoi semplicemente scrivere sul display solo se il valore corrente è diverso da quello precedente.