salvataggio combinazione

ciao, quello che dovrei fare con arduino e impostare attraverso il monitor seriale una combinazione di 4 cifre.
il problema è che non riesco a salvare quelle 4 cifre.
in allegato lascio il codice (nn funzionante) della parte del programma che ho sviluppato fino adesso.
spero che qualcuno sia in grado di aiutarmi.
voglio ringraziare già in anticipo tutti coloro che mi aiuteranno a risolvere questo problema.

typedef struct s_struct {
  char vett[4];
} t_struct1;

t_struct1 t_struct;

int led = 12;
int x = 0;
String str;

void  input();

void setup() {
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  
}





void loop() {
input();
  Serial.println(t_struct.vett);
}















//IMMISIONE DATI
void input() {
  Serial.println("Inserire la sequenza di 4 bit da ricercare: ");
  if (Serial.available() == 0) {
    while (Serial.available() >= 0) {
      int sequenza = Serial.read();
      str = String(sequenza);
      str.toCharArray(t_struct.vett, 4);
    }

  }

}

ciao

ho una domanda, scusa se mi permetto

ma hai provato a leggere il tuo programma?

perché se ti metti a leggerlo ti accorgi subito di un errore e poi anche magari altri ci sono

tradotto dall'inglese tu hai scritto:

SE (if) non ci sono caratteri da leggere, FINCHE' (while) c'è ne sono, leggili dentro una variabile intera?

non mi sembra un flusso di operazioni molto chiaro, e a te?

Karma grazie

Ciao!

  1. Hai una struct contenente solo un array di char, dal codice che hai postato non ti serve una struct ma
    un semplice array di char

  2. Usare un oggetto String al posto di un array di char è sconsigliato, ma tu vuoi ottenere proprio un
    array di char, quindi non usare String ma salva i caratteri direttamente nell'array

  char vett[5]; // Se la struct contiene solo un array tanto vale usare direttamente un array

                     // L'array deve avere tanti elementi quanti il carattere, più uno per il terminatore.


int led = 12;
int x = 0;
String str;

void  input();

void setup() {
  Serial.begin(115200);
  pinMode(led, OUTPUT);
 
}





void loop() {
input();
  Serial.println(vett);
}















//IMMISIONE DATI
void input() {
    int i=0; // Variabile contatore
    Serial.println("Inserire la sequenza di 4 bit da ricercare: ");
    if (Serial.available() ) {// Se ci sono caratteri sulla seriale eseguo la lettura


      while (Serial.available() > 0) {
          /* Inserisco il carattere nel vettore nella posizione indicata da i, poi 
              incremento la variabile i di uno per il prossimo carattere.
          vett[i++] = Serial.read();
          
      }

      // I caratteri sono terminati, devo mettere il terminatore stringa in ultima posizione dell array

       vett[i]='\0';

  }

}

Poi voglio farti notare che su un microcontrollore, arduino, non puoi programmare come fai su un PC.

Ad esempio nel loop(), che viene ripetuto continuamente, chiami la funzione input(), questa stamperà continuamente un messaggio sulla seriale, perché non esiste un metodo che attende da seriale e mette in pausa il programma. Dovresti creare un while(!Serial..available()); che blocca il programma fino a che non ci sono dati sulla seriale.

In pratica per input e output su seriale arduino, non hai metodi o funzioni che si comportano come quelle di molti linguaggi su PC.

ilPanzer:
ciao, quello che dovrei fare con arduino e impostare attraverso il monitor seriale una combinazione di 4 cifre.
il problema è che non riesco a salvare quelle 4 cifre.

Una domanda, ma per salvarle intendi che le vuoi riavere già valorizzate quando riaccendi Arduino?

... ho ripulito il thread da tutte le discussioni, OT, sui punti "karma" ... riprendiamo a parlare dei problemi del OP.

Guglielmo

ilPanzer:
ciao, quello che dovrei fare con arduino e impostare attraverso il monitor seriale una combinazione di 4 cifre.

Ma scusa, io (ed altri) ti stavamo già rispondendo QUI, ti spiacerebbe leggere almeno le nostre risposte, ed in particolare l'ultima (la mia) che conteneva una serie di indicazioni, invece di creare nuovi topic inutili come questo?

Grazie, prosegui lì e ti aiuterò.