Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

creare 2 pagine per un solo 2x16

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[11] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentexyz » 22 set 2019, 20:34

danielealfa ha scritto:questo puo essere un esempio?

Quello è un codice scritto meglio, non benissimo, ci sono delle notazioni da programma C non rispettate. Lo stato per le pagine multiple è la variabile globale "menu".
Avatar utente
Foto Utentexyz
5.930 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1578
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[12] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto UtenteIlGuru » 22 set 2019, 20:51

Se metti qualunque codice nel main loop che cosa ti aspetti che succeda quando quel codice termina?
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.149 1 10 13
Master
Master
 
Messaggi: 1386
Iscritto il: 31 lug 2015, 23:32

0
voti

[13] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentedanielealfa » 22 set 2019, 21:21

per farlo fare solo una volta dal loop come si fa...
Avatar utente
Foto Utentedanielealfa
222 2 4 7
Sostenitore
Sostenitore
 
Messaggi: 1157
Iscritto il: 27 mag 2009, 22:51

0
voti

[14] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto UtenteIlGuru » 22 set 2019, 21:27

Si fa una macchina a stati in cui ogni stato visualizza una cosa, alla fine del ciclo si decide in quale stato muoversi.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
4.149 1 10 13
Master
Master
 
Messaggi: 1386
Iscritto il: 31 lug 2015, 23:32

0
voti

[15] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentedanielealfa » 23 set 2019, 0:01

ho provato ma quando vado a creare il void demo();
non me lo riconosce come dice qui
http://stor.altervista.org/prog-stati-finiti/prog-stati-finiti.php
devo forse fare riconoscere i nomi diVersi
Avatar utente
Foto Utentedanielealfa
222 2 4 7
Sostenitore
Sostenitore
 
Messaggi: 1157
Iscritto il: 27 mag 2009, 22:51

0
voti

[16] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentexyz » 23 set 2019, 12:37

danielealfa ha scritto: quando vado a creare il void demo();
non me lo riconosce ...

Arduino si programma in un subset del C++ (usa il GCC come compilatore), quindi si deve rispettare la sintassi del C++ (la quale deriva dal C).

API di Arduino instanzia lui la funzione principale "main", chiama una sola volta "setup" e in un loop infinito "loop". quindi se crei una funzione deve essere per forza chiamata in una delle due funzioni precedenti, altrimenti viene ignorata.
Avatar utente
Foto Utentexyz
5.930 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1578
Iscritto il: 5 dic 2009, 18:37
Località: Italy Turin

0
voti

[17] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentedanielealfa » 24 set 2019, 17:33

ciao a tutti, allora ho cercato in giro ed ho provato a modificare il listato
ho modificato per lcd a ic2, ed e' ok, ho creato quatto stati, o ameno credo,il del e'' una cosa per vedere se cambiava
la comunicazione seriale uguale.
ecco qui, in uno stato ho provato a fare scrivere ,scrive ma viene cancellato dai dati e fa schifo.
ora come vi sembra?
Codice: Seleziona tutto
#define BUTTON A2                                 // pin di input a cui è collegato il pulsante
#define LED 13         
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>
// Variabili
int ContatorePulsantePremuto = 0;                   // conta il numero di volte che il pulsante è premuto buttonPushCounter
int StatoPulsante = 0;                              // stato corrente del pulsante
int StatoPulsantePrecedente = 0;       
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
byte smiley[8] = {
  B00100,
  B01110,
  B11111,
  B00000,
  B00100,
  B01110,
  B11111,
};
byte sat1[8] = {
  B00110,
  B01110,
  B01110,
  B01111,
  B01110,
  B01110,
  B01100,
};
byte sat2[8] = {
  B01110,
  B00100,
  B01110,
  B11111,
  B01110,
  B00100,
  B11111,
};
byte sat3[8] = {
  B01100,
  B01110,
  B01110,
  B11110,
  B01110,
  B01110,
  B00110,
};
TinyGPSPlus gps;
SoftwareSerial gpsSerial(9, 8);
const int serialTime = 200;
void setup()

{
  lcd.init();                      // initialize the lcd
  lcd.init();
 
  lcd.backlight();
  pinMode(BUTTON, INPUT);                           // imposta il pin digitale come output
  pinMode(LED, OUTPUT);                             // imposta il pin digitale come input
  Serial.begin(9600);     
  lcd.createChar(1, smiley);
  lcd.createChar(2, sat1);
  lcd.createChar(3, sat2);
  lcd.createChar(4, sat3);
  lcd.begin(16,2);
  lcd.clear(); 
  gpsSerial.begin(9600);
  lcd.setCursor(0,0);
  lcd.print("   RICERCA    ");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print(" SATELLITE");
  lcd.setCursor(12,1);
  lcd.write(2);
  lcd.write(3);
  lcd.write(4);
  delay(1000);
  lcd.clear();
} // end setup
void loop()
{
  StatoPulsante = digitalRead(BUTTON);              // legge il valore dell'input e lo conserva

  if (StatoPulsante != StatoPulsantePrecedente) {   // compara lo stato del pulsante attuale con il precedente
      if (StatoPulsante == HIGH) {                    // se lo stato è cambiato incrementa il contatore
                                                     // se lo stato corrente è alto, il pulsante è passato da off a on
      ContatorePulsantePremuto++;
      if (ContatorePulsantePremuto == 1) {                   // controlla se il pulsante è stato premuto una volta
        Serial.print("numero di volte tasto premuto:  ");    // stampa sulla console "numero di volte tasto premuto:"
        Serial.println(ContatorePulsantePremuto, DEC);       // stampa il numero di volte che il pulsante è stato premuto
     lcd.setCursor(0,0);
       lcd.print("hjhhh ");
       lcd.setCursor(1,0);
       lcd.print("hjhhjh");
     }delay(1000);
     
      if (ContatorePulsantePremuto == 2) {                   // controlla se il pulsante è stato premuto due volte
         Serial.print("numero di volte tasto premuto:  ");
         Serial.println(ContatorePulsantePremuto, DEC);
     }
      if (ContatorePulsantePremuto == 3) {                   // controlla se il pulsante è stato premuto tre volte
        Serial.print("numero di volte tasto premuto:  ");
        Serial.println(ContatorePulsantePremuto, DEC);
     
     }
      if (ContatorePulsantePremuto == 4) {                   // controlla se il pulsante è stato premuto quattro volte
        Serial.print("numero di volte tasto premuto:  ");
        Serial.println(ContatorePulsantePremuto, DEC);
     }
    }
  }

  StatoPulsantePrecedente = StatoPulsante; // salva lo stato corrente nella variabile che indica lo stato precedente per il loop successivo

 
 
 
 
 
  // controlla se il pulsante è stato premuto quattro volte se vero indica che è finito il ciclo
  // il led lampeggia 2 volte per 50 millisecondi
  // vengono inizializzate nuovamente le variabili
  // si riavvia il ciclo

  if (ContatorePulsantePremuto > 4) {
    Serial.println("fine ciclo");
    digitalWrite(LED, HIGH);                                 // accende il LED 
    delay(500);                                               // aspetta 50 millisecondi 
    digitalWrite(LED, LOW);                                  // spegne il LED 
    delay(100);                                               // aspetta 50 millisecondi
    // inizializzazione delle variabili
    ContatorePulsantePremuto = 0;
    StatoPulsante = 0;
    StatoPulsantePrecedente = 0;
    Serial.println("mi riavvio");                            // stampa sulla console "mi riavvio"
  }


int start = millis();
int now = millis();
do {
while (gpsSerial.available() > 0) {
gps.encode(gpsSerial.read());
}
now = millis();
} while ((now - start) < serialTime);
  if (gps.altitude.isUpdated())
  {
    int h;
    h = (gps.time.hour()) + 2;
    if( 24 <= h ) {
    h = h - 24;
    }
       if (h < 10) {
       lcd.setCursor(0,0);
       lcd.print(" ");
       lcd.setCursor(1,0);
       lcd.print(h);
       } else  {
       lcd.setCursor(0,0);
       lcd.print(h);
       }
    lcd.setCursor(2,0);
    lcd.print(":");
    int m;
    m = gps.time.minute();
       if (m < 10) {
       lcd.setCursor(3,0);
       lcd.print("0");
       lcd.setCursor(4,0);
       lcd.print(m);
       } else {
       lcd.setCursor(3,0);
       lcd.print(m);
       }
  }
if (gps.altitude.isUpdated())
  {
    lcd.setCursor(7,0); 
    lcd.print("Alt:");
     int koudo;
     koudo = (int)(gps.altitude.meters());
     if (koudo == 0) {
     lcd.setCursor(11,0);
     lcd.print("----");
     } else if (koudo < 10) {
     lcd.setCursor(11,0);
     lcd.print("   ");
     lcd.setCursor(14,0);
     lcd.print(koudo);
     } else if (koudo < 100) {
     lcd.setCursor(11,0);
     lcd.print("  ");
     lcd.setCursor(13,0);
     lcd.print(koudo);
     } else if (koudo < 1000) {
     lcd.setCursor(11,0);
     lcd.print(" ");
     lcd.setCursor(12,0);
     lcd.print(koudo);
     } else {
     lcd.setCursor(11,0);
     lcd.print(koudo);
     }
    lcd.setCursor(15,0);
    lcd.print("m");
  }
  if (gps.speed.isUpdated())
  {
    int s;
    s = (int)(gps.speed.kmph());
       if (s == 0) {
        int satV;
        satV = (int)(gps.satellites.value());
        if (satV < 10){
        lcd.setCursor(0,1);
        lcd.print(" ");
        lcd.setCursor(1,1);
        lcd.print(satV);
         } else {
        lcd.setCursor(0,1);
        lcd.print(satV);
         }
        lcd.setCursor(2,1);
        lcd.write(2);
        lcd.write(3);
        lcd.write(4);
        lcd.print("s "); 
       } else if (s < 10) {
       lcd.setCursor(0,1);
       lcd.print("  ");
       lcd.setCursor(2,1);
       lcd.print(s);
       lcd.print("km/h");
       } else if (s < 100) {
       lcd.setCursor(0,1);
       lcd.print(" ");
       lcd.setCursor(1,1);
       lcd.print(s);
       lcd.print("km/h");
       } else {
       lcd.setCursor(0,1);
       lcd.print(s);
       lcd.print("km/h");
       }
  }
   if (gps.course.isUpdated())
  {
    if ((gps.course.deg()) == 0) {
     lcd.setCursor(9,1);
     lcd.print("RICERCA");
    }
    else if ((gps.course.deg()) < 11.3) {
     lcd.setCursor(9,1);
     lcd.print("W--N--E");
     }
    else if ((gps.course.deg()) < 33.8) {
     lcd.setCursor(9,1);
     lcd.print("--N");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);
     lcd.print("--E");
     }
   else if ((gps.course.deg()) < 56.3) {
     lcd.setCursor(9,1);
     lcd.print("-N-");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("-E-");
     }
   else if ((gps.course.deg()) < 78.8) {
     lcd.setCursor(9,1);
     lcd.print("N--");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("E--");
     }
   else if ((gps.course.deg()) < 101.3) {
     lcd.setCursor(9,1);
     lcd.print("N--E--S");
     }
  else if ((gps.course.deg()) < 123.8) {
     lcd.setCursor(9,1);
     lcd.print("--E");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("--S");
     }
else if ((gps.course.deg()) < 146.3) {
     lcd.setCursor(9,1);
     lcd.print("-E-"); 
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("-S-");
     }
else if ((gps.course.deg()) < 168.8) {
     lcd.setCursor(9,1);
     lcd.print("E--"); 
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("S--");
     }
else if ((gps.course.deg()) < 191.3) {
     lcd.setCursor(9,1);
     lcd.print("E--S--W");
     }
else if ((gps.course.deg()) < 213.8) {
     lcd.setCursor(9,1);
     lcd.print("--S");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("--W");
     }
else if ((gps.course.deg()) < 236.3) {
     lcd.setCursor(9,1);
     lcd.print("-S-");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);   
     lcd.print("-W-");
     }
else if ((gps.course.deg()) < 258.8) {
     lcd.setCursor(9,1);
     lcd.print("S--");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);
     lcd.print("W--");
     }
else if ((gps.course.deg()) < 281.3) {
     lcd.setCursor(9,1);
     lcd.print("S--W--N");
     }
else if ((gps.course.deg()) < 303.8) {
     lcd.setCursor(9,1);
     lcd.print("--W");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);
     lcd.print("--N");
     }
else if ((gps.course.deg()) < 326.3) {
     lcd.setCursor(9,1);
     lcd.print("-W-");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);
     lcd.print("-N-");
     }
else if ((gps.course.deg()) < 348.8) {
     lcd.setCursor(9,1);
     lcd.print("W--");
     lcd.setCursor(12,1);
     lcd.write(1);
     lcd.setCursor(13,1);
     lcd.print("N--");
     }
else {
     lcd.setCursor(9,1);
     lcd.print("W--N--E");
     }   
  }
}

Avatar utente
Foto Utentedanielealfa
222 2 4 7
Sostenitore
Sostenitore
 
Messaggi: 1157
Iscritto il: 27 mag 2009, 22:51

0
voti

[18] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentelucaking » 24 set 2019, 17:38

Hai qualche tipo di antirimbalzo sul pulsante?
Avatar utente
Foto Utentelucaking
928 2 5 8
Expert
Expert
 
Messaggi: 846
Iscritto il: 29 mag 2015, 14:28

0
voti

[19] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentedanielealfa » 24 set 2019, 17:41

una resistenza da 10k verso gnd
senza avevo volti rimbalzi, sara da migliorare sicuramente ma ora funge...
Avatar utente
Foto Utentedanielealfa
222 2 4 7
Sostenitore
Sostenitore
 
Messaggi: 1157
Iscritto il: 27 mag 2009, 22:51

0
voti

[20] Re: creare 2 pagine per un solo 2x16

Messaggioda Foto Utentedanielealfa » 24 set 2019, 20:12

allora, ho fatto dei miglioramenti .
ho fatto una "schermata" con la latitudine e longitudine.
funziona.
Codice: Seleziona tutto
   
        }   
  }
}
     
      if (ContatorePulsantePremuto == 3) {                   // controlla se il pulsante è stato premuto tre volte
        Serial.print("numero di volte tasto premuto:  ");
        Serial.println(ContatorePulsantePremuto, DEC);
  {   
if (gps.altitude.isUpdated())
  lcd.setCursor(0, 1);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("LAT ");
   lcd.print(gps.location.lat(),6 );                    // Latitude in degrees (double)
   lcd.setCursor(0,1);
   lcd.print("LON ");
   lcd.print(gps.location.lng(), 6);              // Longitude in degrees (double)
    lcd.print(millis()/1000);
    int now = millis();
    now =(int)(gps.altitude.isUpdated());
   
   
   
       
    }
   
     }
     
      if (ContatorePulsantePremuto == 4) {                   // controlla se il pulsante è stato premuto quattro volte
        Serial.print("numero di volte tasto premuto:  ");
        Serial.println(ContatorePulsantePremuto, DEC);
     }
    }
   
   

ora come si fa a aggiornare i valori in quella pagina?
cioe' quale e' il "comando " per farla aggiornare?
Avatar utente
Foto Utentedanielealfa
222 2 4 7
Sostenitore
Sostenitore
 
Messaggi: 1157
Iscritto il: 27 mag 2009, 22:51

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti