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);
}
}
}
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
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?
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?