EEprom memorizzare caratteri

salve a tutti,
Ho un arduino mega e un display nextion.
Ho una pagina dove ci si accede dopo aver inserito una password.
La password è memorizzata dentro la eeprom di arduino.
Per il momento è fissa e ha lunghezza 4 caratteri. ho fatto così:

    EEPROM.write(0,1);
    EEPROM.write(1,1);
    EEPROM.write(2,1);
    EEPROM.write(3,1);

Nella pagina dove ho l'inserimento password c'è un tastierino e il tasto invia.
Il tasto invia prende quello che ho scritto nel campo TempPassword e lo mette nel buffer di lettura.
poi c'è il confronto carattere per carattere.
questo è lo script:

void bEnterPopCallback(void *ptr)
{   
  dbSerialPrintln("bEnterPopCallback");
  //svuoto il buffer
  memset(buffer, 0, sizeof(buffer));
  //Scrivo il contenuto della variabile nel buffer
  TempPassword.getText(buffer, sizeof(buffer));
  //stampo sulla seriale la password inserita
    Serial.print("Password Inserita:");
    Serial.print(buffer[0]);
    Serial.print(buffer[1]);
    Serial.print(buffer[2]);
    Serial.print(buffer[3]);
    Serial.println();
    Serial.println(Security,BIN);

    //stampo sulla seriale la password in eeprom
    Serial.print(EEPROM.read(0));
    Serial.print(EEPROM.read(1));
    Serial.print(EEPROM.read(2));
    Serial.print(EEPROM.read(3));


if (Security == 1 & buffer[0] == EEPROM.read(0) & buffer[1] == EEPROM.read(1) & buffer[2] == EEPROM.read(2) & buffer[3] == EEPROM.read(3))
  {
    page1.show();
    ActualPage = 1;
  }

il codice continua ma il problema è in queste righe...

Sulla seriale le variabili sono corrette ma il confronto non va a buon fine.
che diavolo sta succedendo?
avete qualche idea?

il buffer è una array di caratteri
char buffer[20] = {0};

c'è qualche problema di conversione perché se creo un array di caratteri:
char password[20] = {0};
e ci provo a sposatre dentro i valori memorizzati nella eeprom:
** password[0]=(EEPROM.read(0));**
** password[1]=(EEPROM.read(1));**
** password[2]=(EEPROM.read(2));**
** password[3]=(EEPROM.read(3));**

mi ritrovo caratteri strani
help pleaseeeeee!!!

Nell'if usi uno solo &
Per l'operatore AND logico devi usare &&

Ciao E grazie per la risposta. si hai ragione ho corretto ma non è cambiato nulla.

Secondo me trovi semplicemente i valori che ci hai scritto che ... NON sono caratteri ma **il valore binario 00000001; **se vuoi memorizzare il carattere '1' o, appunto, lo scrivi nella forma '1' (con i singoli apici) o scrivi il suo valore ASCII 0x31.

Guglielmo

ohhhhh Grazieeeeee
Avevo immaginato una cosa del genere. scrivevo "1" come si fa di solito con le stringhe...
praticamente vedevo 1 ma era il numero e non il carattere.

Grazie siete stati utilissimi.
buona giornata.

Le uniche scritture in EEPROM che vedo sono EEPROM.write(0,1); e le successive, quindi scrivi il valore 1, non l'ASCII del carattere!

Buona giornata

fratt:
Nell'if usi uno solo &
Per l'operatore AND logico devi usare &&

Vero, però in questo specifico caso fortuitamente il risultato non cambia. Le singole espressioni relazionali di confronto danno tutte come risultato 0 o 1, e a questo punto usare & o && su sequenze di 0 e 1 non fa differenza (se non nella short-circuit evaluation).

robotronico:
praticamente vedevo 1 ma era il numero e non il carattere

È un errore comune quello di non ricordare che i "caratteri non esistono", ma sono simboli umani rappresentati in memoria con dei codici numerici, in questo caso secondo lo standard ASCII. Poi se scrivere '1', 49, 0b00110001, 0x31, è solo scelta del programmatore. Trattandosi di caratteri la forma '1' è la più chiara :wink:

PS:riguardo a: "altavoz es una variabile che no viene puesta a 8 en el codigo", la magia è che le variabili locali non sono inizializzate e possono avere valori casuali, e quindi per puro caso possono assumere il valore "giusto".

Ciao Claudio.
Si ti confermo che in questo caso un & è sufficiente.

Gracias por tu respuesta... certe volte è meglio non indagare troppo... soprattutto quando le cose funzionano :slight_smile:

robotronico:
Si ti confermo che in questo caso un & è sufficiente.

Si, ma è solo un caso ... sintatticamente, se si deve fare un AND logico (come nel caso degli IF), si DEVE usare &&; quello che stai usando te è un AND binario bit a bit che ha tutt'altro scopo e che, solo per fortuna, nel tuo caso va anche bene.

Guglielmo

robotronico:
meglio non indagare troppo... soprattutto quando le cose funzionano :slight_smile:

Eh ma devono funzionare perché lo vogliamo e lo abbiamo progettato così noi, non per caso :wink:

>robotronico: Quando si quota un post, NON è necessario riportarlo (inutilmente) tutto; bastano poche righe per far capire di cosa si parla ed a cosa ci si riferisce, inoltre, se si risponde al post immediatamente precedente, normalmente NON è necessario alcun "quote" dato che è sottinteso. :slight_smile:

Gli utenti da device "mobile" (piccoli schermi) ti ringrazieranno per la cortesia :wink:

Guglielmo

P.S.: Ho eliminato io il "quote" dal tuo post #7 poco sopra :wink:

ok ragazzi grazie!
siete stati davvero utili.
Buona domenica a tutti :wink: