chiarimenti su Serial.parseInt()

ciao a tutti, non riesco a capire che valori ritorna il Serial.parseInt() in queste righe di codice:

void loop() {
  if(Serial.available()) {
    repetitions = Serial.parseInt();
    count = Serial.parseInt();
    for(int i = 0; i < count; i++)
      durations[i] = Serial.parseInt();

Grazie in anticipo

Basta leggere nel reference ...

... riceve dei caratteri dalla seriale sino a quando o riceve un carattere che non è numerico o si supera un tempo massimo (prefissabile). A quel punto trasforma i caratteri ricevuti in un numero.

Ad esempio, il numero 100, trasmesso in ASCII sulla seriale è composto da 3 caratteri: 0x31, 0x30, 0x30; la parseInt() riceve questi tre caratteri e restituisce un numero intero che vale 100.

Guglielmo

ok, grazie per la risposta...ma allora non capisco perchè repetitions, count e tutti i valori di durations sono diversi se vengono tutti dal ritorno di Serial.parseInt().

Ok, forse ho capito ma avrei bisogno di conferma…praticamente se io avessi questi dati: “1,2,3,4,5” e avessi 5 variabili intere a,b,c,d,e scrivendo:

a=Serial.parseInt();
b=Serial.parseInt();
c=Serial.parseInt();
d=Serial.parseInt();
e=Serial.parseInt();

“a” assumerebbe valore 1,
“b” assumerebbe valore 2,
“c” assumerebbe valore 3,
e così via?

esatto, ma devi essere sicuro come una roccia (e tu come sasso sei già a metà strada :slight_smile: ) che ci sia esatta corrispondenza tra l'istante in cui leggi e la trasmissione seriale, se perdi un passo sei finito

Ok, grazie mille!

Sasso_Analogico:
Ok, forse ho capito ma avrei bisogno di conferma...praticamente se io avessi questi dati: "1,2,3,4,5" e avessi 5 variabili intere a,b,c,d,e scrivendo:

Se tu stessi trasmettendo sulla linea seriale 0x31, 0x0D, 0x32, 0x0D, 0x33, 0x0D, 0x34, 0x0D, 0x35, 0x0D ... dove lo 0x0D è il CR inserito per chiudere la parseInt(), allora SI.

In pratica serve a convertire una trasmissione di caratteri numerici che vengono inviati in ASCII in un numero.

Ripeto ... studia il reference !

Guglielmo

Ok, grazie ancora

gpb01:
dove lo 0x0D è il CR inserito per chiudere la serialParseInt(), allora SI.

Guglielmo

lui aveva esempiato (passami il neologismo: fare un esempio -> esempiare) una virgola, anch'essa fa da separatore per il parseint, se ricordo bene

Standardoil:
lui aveva esempiato (passami il neologismo: fare un esempio → esempiare) una virgola, anch’essa fa da separatore per il parseint, se ricordo bene

SI, si, qualsiasi carattere NON numerico interrompe la ricezione da parte della parseInt() ed attiva la conversione. Stessa cosa se, tra una sequenza di caratteri ed un altra, si fa passare un tempo superiore al timeout.

Era solo per puntualizzare che i caratteri devono arrivare come ASCII … :wink:

Guglielmo

Piccolo OT per Guglielmo

Serial.setTimeOut, non si trova subito subito, nel reference della parseint viene indicata, ma non c'è il link
ma comunque il dubbio non è questo
il timeout di queste funzioni viene dalla classe Stream, qualunque cosa voglia dire, dato che io e il C++ non ci amiamo
e nel caso di un file? voglio dire nel caso tentassi di leggere da un file aperto ma finito (ho letto fino all'ultimo byte) il timeout funzionerebbe come per la seriale? mi sembra di capire che sì, ma adesso non ho il materiale per fare una prova

gpb01:
Era solo per puntualizzare che i caratteri devono arrivare come ASCII ... :wink:

Guglielmo

non vedo macchine che trasmettono EBCDIC da almeno 28 anni :slight_smile:

Standardoil:
non vedo macchine che trasmettono EBCDIC da almeno 28 anni :slight_smile:

No, ma basta usare la Serial.write() di Arduino per trasmette numeri in "binario" invece che in ASCII come con la Serial.print() ... quindi ... sempre meglio puntualizzare :smiling_imp:

Guglielmo

gpb01:
Era solo per puntualizzare che i caratteri devono arrivare come ASCII ... :wink:

No ma un attimo...è l'arduino che li converte in ASCII però, perchè io al seriale mando numeri in dec.

No, aspetta chiariamo
la serial.parseint converte un numero scritto in ASCII in un intero, leggendolo dalla seriale, con limiti e time otu già discussi
prendi per buono che la seriale riceve i nueri così scritti
se non è così non è la serial.parseint che ti serve

Va bene, grazie...ultima (speriamo) domanda...sapete consigliarmi una wiki che spieghi bene tutte (o le principali) funzioni della libreria IRemote?