secondo me non va bene...e ti spiego....
imposti una boolean a false
entri in un while perchè questa boolena è false
leggi la seriale e se trovi il LF ....
nella prima if imposti una seconda boolean a true
questa ti fa accedere al secondo if dove imposti la prima boolean (quella del while) a true
aggiungi alla String LF
esci da while e non c'entri più....
devi semore fare attenzione alla sequenza in cui imposti e verifichi le variabili.
prova questo:
String numero = "";
boolean LF = false;
void setup() {
Serial.begin(9600);
}
void loop() {
char c;
if (Serial.available()) {
c = Serial.read();
if (LF) {
if (c != 10 && c != 13) {
numero += c;
}
}
if (c == 10) {
LF = true;
}
if (c == 13 && LF) {
LF = false;
float peso = numero.toFloat() / 100;
Serial.println(peso);
numero = "";
}
}
}
mi sono dimenticato di scrivere che...come le variabili hanno una loro visibilità (scope) anche le istruzioni come break e continue hanno un loro contesto (tra le graffe in cui sono inseriti) e non si propagano in tutto il programma...quindi quelle due che hai iserito tu hanno poco senso.
Non proprio,
Continue si riferisce esplicitamente al for, while, o do...while appena esterno ad essa
Break in in più anche allo switch appena esterno
Non seguono i blocchi (parentesi graffe) ma proprio i cicli
Gli errori nella funzione scritta da bk013 sono differenti
Confonde il carattere 10 col 13
Quindi lavora un LF sì e uno no
Dopo il primo LF passa per un oggetto stringa, al quale aggiunge di tutto, in particolare i CR
Al secondo LF tenta una conversione da oggetto stringa a float
Non so bene come si comporti la conversione con stringhe sporche, ma sembra che si comporti male
Restituisce il convertito diviso 100
comunque NON è il programma del quale parla nel post 31
La logica della mia invece è questa:
In un while che non termina mai
Se c'è un carattere
Lo legge
Ignora gli spazi (eventuali zeri soppressi )
Ignora uno dei due terminatori (tanto sono usati in coppia, me ne basta uno)
L'altro terminatore restituisce il risultato del calcolo
Sottinteso: se nessuno dei tre casi precedenti
Deve essere per forza una cifra
Esegui il calcolo parziale (con una routine 'rubata' al K&R)
Il trucco è calcolare in float e dividere subito per 100
Che poi è vero che come trucco vale poco, lavorare in int e eseguire una sola divisione farei prima
Lasciamo anche allo OP qualcosa
A occhio ho usato più bit a scriverlo in italiano che in C
Mi sa che oltre a pensare direttamente in algebra complessa mi conviene parlare in C invece che in italiano
Mai che trovi le faccine quando mi servono. ...
Cioè tu vuoi dirmi che non sei riuscito a sostituire la tua funzione problematica con la.mia, che ha gli stessi parametri (btw nessuno) e restituisce lo stesso tipo?
Si tratta di un semplice copia incolla....
Adesso sono io che non capisco più...
Edit
Avrei dovuto capirlo, (vergogna mia) senza leggere la tua presentazione.
Ingannieri++
No Standardoil, è che ieri tra le tante cose, ho fatto una confusione enorme tra i commenti dei post ed altre cose. Ho chiesto scusa anche a Orso per la distrazione. Oggi provo tutto. Non c'è nessun inganno, sto solo trovando difficoltà per una cosa che effettivamente è una stupidaggine e per la quale sono grato dell'aiuto che mi stata dando. Oggi ho a disposizione la bilancia e le celle di carico e farò queste prove con i due codici.
Purtroppo con i protocolli di comunicazione e relative tempistiche ho sempre avuto un pò di problemi.
(pensiero personale) non mi devi mica chiedere scusa...non mi hai, o meglio non mi sento, ne offeso ne preso in giro...quello che volevo sapere è se avevi provato gli esempi postati da me e da Standrdoil...per capire se ti funzionavano o meno.