Problema con un mini database su arduino uno

Buona sera,
sto realizzando un piccolo database tramite Arduino, salvando in dati su SD. Il problema sorge quando provo a fare il login, ho creato un enum che gestisce tutto ciò ma quando vado a inserire la stringa che prende il nome utente, essa non viene stampata su seriale dopo l’inserimento.

#include <SD.h>
#include <SPI.h>

enum Fasi {
  INIZIO,
  ACCESSO,
  VERIFICA_REGISTRAZIONE,
  REGISTRATO
}
enum Login {
INS_NOME_UTENTE,
  INS_PASS,
  VERIFICA_LOGIN,
};
Login L = INS_NOME_UTENTE;
Fasi Fase = INIZIO;
String accesso, nomeUt, registrazione, password;
File dataBase;
void setup() {
  Serial.begin (9600);
  Serial.println (F("Connesione in corso..."));
  if (!SD.begin(4)) {
    Serial.println(F("Connesione fallita, riavviare il programma."));
    return;
  }
  Serial.println(F("Connessione effetuata, benvenuto nel dB!"));
}
void loop() {
switch (Fase) {
    case INIZIO:
      Serial.println (F("Ti sei gia registrato?\nSi;\nNo;\nScelta:"));
      
      Fase = ACCESSO;
      break;
    case ACCESSO:
      if (Serial.available() > 0)
      {
        registrazione = Serial.readString();
        registrazione.toUpperCase();

        if (registrazione == "SI")
        {
          switch (L)
          {
            case INS_NOME_UTENTE:
              Serial.print("Inserisci il tuo nome utente: ");
              L = INS_PASS;
              break;
        case INS_PASS:
             if (Serial.available() > 0)
              {
                nomeUt = Serial.readString();
                Serial.println(nomeUt);
              Serial.print(F("Inserire la password: "));
                L = VERIFICA_LOGIN;
              }
              break;

Buona sera e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (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.

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

Arduino Uno ? UN database ? Con 2K di Ram ?

Ciao il codice è parziale e non completo, e non si può analizzare il flusso del programma.
Quando in programmazione si usava il salto incondizionato il goto, si creavano codici spaghetto, cioè codici in cui non si riusciva più a capire il flusso di esecuzione di un programma.
Tu hai creato un codice spaghetto senza usare il goto :slight_smile:
Quando in uno switch incontri un break, l'esecuzione esce dallo switch(L), che è dentro a un if() che a sua volta è dentro a un altro switch() che a sua volta è dentro a un ciclo infinito la funzione loop().

NON VALE LA PENA, modificare questo programma perché è pensato molto male, conviene invece riscriverlo in modo più corretto.

Vedo che usi due macchina a stati finiti che ha l'unico scopo di annullare l'effetto di essere nella funzione loop(), cioè di annullare l'effetto che il codice si ripete continuamente.
Non è obbligatorio usare la funzione loop(), se ad esempio mettessi tutte le operazioni nella funzione setup() il codice sarebbe molto semplice, oppure puoi pensare fare richieste nella funzione loop()

Serial.print("Inserisci il tuo nome utente: ");

e poi richiamare una funzione che svolge i compito di accesso alla sd, programmando nello stesso modo di un programma per PC.

[OT]

Torn24

molto interessante quello che scrivi, essendo un autodidatta mi ritrovo in pieno con la definizione di "programmatore a spaghetti", con i pic intrecciavo talmente tanti goto e call che dopo una settimana che non lavoravo sul codice non capivo nemmeno più cosa combinava :confused:

Sarebbe utile avere delle linee guida sul modo corretto di programmare con gli errori comuni da non fare, dai pochi libri/guide che ho visto su internet sono o davvero le basi per super principianti o cose scritto in aramaico antico per laureati in ingegneria informatica, conosci qualche cosa intermedia per programmatori della domenica come me? :slight_smile:

Ciao -zef, sono anche io autodidatta, quindi anche il mio codice non è a livelli di codice professionale.

Ma la linea guida del linguaggio C, è che un programma invece di essere composto da molte righe di codice, è scomposto in molte funzioni relativamente semplici.
Quindi in caso di arduino non sentirsi "obbligati" a inserite tutto il codice nelle due funzioni setup() e loop(), ma all'occorrenza creare altre funzioni per compiti specifici.

Prova a fare una ricerca su programmazione top down e programmazione strutturata.

ok grazie e mi scuso per quest'ulteriore OT :confused: