Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Conteggio che torna indietro dopo determinata soglia

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

2
voti

[11] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utentepusillus » 2 mag 2018, 14:53

Foto Utentepapa10
Spesso nella sezione Arduino vengono poste domande sciocche da giovani che non hanno voglia di documentarsi o che vorrebbero farsi scrivere codice da altri, così si è un po prevenuti quando si incontrano certe richieste.
Tanto di cappello a chi, come te, impegna la mente a studiare cose nuove. Non sono un tuo coetaneo, ma anche io cerco di imparare qualcosa di nuovo, anche se a volte mi demoralizzo un po quando capisco che alcuni argomenti sono fuori dalla mia portata.
Magari potresti scrivere qualcosa sul tuo profilo così chi ti legge possa valutare le tue richieste con la giusta prospettiva.
Un saluto O_/
Avatar utente
Foto Utentepusillus
3.207 3 6 11
Master
Master
 
Messaggi: 1031
Iscritto il: 5 mar 2016, 15:19
Località: Latina

0
voti

[12] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utentepapa10 » 2 mag 2018, 16:59

ok grazie della puntualizzazione
Avatar utente
Foto Utentepapa10
71 1 3 4
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 20 ott 2011, 17:11

0
voti

[13] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utentepapa10 » 2 mag 2018, 18:20

ho rifatto il codice come da voi suggeritomi,ma conta sempre crescente e non decrementa mai.Un suggerimento?Almeno per sapere l'errore e non commetterlo piu'.
Codice: Seleziona tutto
#include <LCD.h>



#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Most of the backpacks like the one shown are at 0x27 or at 0x3f.
#define I2C_ADDR     0x27 // <--Change to match your display

LiquidCrystal_I2C lcd(I2C_ADDR,2,1,0,4,5,6,7,3,POSITIVE);

int n = 0;
int direzione=0;

void setup ( )
{
  lcd.begin ( 20, 4 ); // <--Change to match your display
  lcd.setBacklight(1);
  lcd.print("ciao");
  lcd.print(", Gianni");
  delay(600);
  lcd.setCursor(0,1);
  lcd.print(" sto contando");
  delay(600);
  lcd.setCursor(0,3);
  lcd.print("conto bene");}
void loop ()
{
  lcd.setCursor(3,2);
  lcd.print(n++,DEC);

  if((n==31) && (direzione==+1))
   direzione=-1;
 
  if((n==0) && (direzione=-1))
    direzione=+1;
  delay(1000);}
Grazie
Avatar utente
Foto Utentepapa10
71 1 3 4
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 20 ott 2011, 17:11

0
voti

[14] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utenteboiler » 2 mag 2018, 18:49

Ti è chiaro cosa fa questa linea di codice?
Codice: Seleziona tutto
lcd.print(n++,DEC);


In particolare l'operazione di post-increment?
https://en.wikipedia.org/wiki/Increment ... _operators

Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

0
voti

[15] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utenteboiler » 2 mag 2018, 18:51

Per esteso, in quale parte del codice dopo la tua ultima modifica ti aspetteresti di vedere una dipendenza nel conteggio dal valore di direzione?
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

1
voti

[16] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto UtenteIlGuru » 2 mag 2018, 19:47

n++ all' interno di lcd.print esegue l'incremento implicito assegnando ad n il nuovo valore, questo è il motivo per cui il ciclo conta solo in avanti.

Il mio suggerimento diceva anche come eseguire l'incremento, inoltre va inizializzata anche direzione a +1 o -1 altrimenti saltano le due if.

Prova così:

Codice: Seleziona tutto
#include <LCD.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Most of the backpacks like the one shown are at 0x27 or at 0x3f.
#define I2C_ADDR     0x27 // <--Change to match your display

LiquidCrystal_I2C lcd(I2C_ADDR,2,1,0,4,5,6,7,3,POSITIVE);

int n = 0;
int direzione=+1;

void setup ( )
{
  lcd.begin ( 20, 4 ); // <--Change to match your display
  lcd.setBacklight(1);
  lcd.print("ciao");
  lcd.print(", Gianni");
  delay(600);
  lcd.setCursor(0,1);
  lcd.print(" sto contando");
  delay(600);
  lcd.setCursor(0,3);
  lcd.print("conto bene");
}

void loop ()
{
  lcd.setCursor(3,2);

  if((n==31) && (direzione==+1))
   direzione=-1;
 
  if((n==0) && (direzione=-1))
    direzione=+1;

  n = n + direzione;
  lcd.print(n,DEC);

  delay(1000);
}


Ora dovrebbe contare da 1 a 30 e poi fino ad 1 ricominciando il ciclo.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

0
voti

[17] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utentepapa10 » 2 mag 2018, 20:08

E stata una mia vista grave a non inserire la riga : n = n + direzione;
lcd.print(n,DEC);.Adesso va avanti conta sino a 31 e decrementa sino a 1,poi incrementa 10,20,30,40,60 ecc e poi torna a 10.Non dovrebbe arrivare sino a 31 ,poi decrementare sino a 1 e continuare ancora sino a 31.Senza questi numeri 10,20,30 ecc.? Grazie ancora
Avatar utente
Foto Utentepapa10
71 1 3 4
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 20 ott 2011, 17:11

0
voti

[18] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto UtenteIlGuru » 2 mag 2018, 20:16

Credo che lo 0 sia quello del 30 e quando scrive i numeri da 1 a 9 sovrascrive solo il primo carattere del display in posizione 3,1
Prova a fargli fare il clear del display prima di lcd.setCursor
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

0
voti

[19] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto Utentepapa10 » 2 mag 2018, 20:27

ok adesso e' perfetto,ringrazio tutti per avermi aiutato ed avermi fatto capire "incremento e decremento" usando gli "if". :D
Avatar utente
Foto Utentepapa10
71 1 3 4
Frequentatore
Frequentatore
 
Messaggi: 248
Iscritto il: 20 ott 2011, 17:11

0
voti

[20] Re: Conteggio che torna indietro dopo determinata soglia

Messaggioda Foto UtenteIlGuru » 2 mag 2018, 21:12

Sostanzialmente dovevi realizzare quella che si definisce una macchina a stati, e memorizzare in un registro lo stato della macchina ovvero il fatto di dover incrementare o decrementare ( direzione ).
La pratica priva di teoria è una strada lunga, dolorosa e povera di soddisfazioni.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti