Convertire stringa a numero long

Salve, sono alle prese con l'acquisizione dati numerici da seriale SX - TX. Ho creato una variabile stringa al fine di comporre il dato intero fino al fine riga. Fin qui tutto ok. Ora devo far calcolare i dati acquisiti nella variabile strnga, ho provato a convertire la stringa in double, perdendo il terzo dopo la virgola, mi occorrebbe convertirla in long, ma non so come procedere. Vi ringrazio anticipatamente per la cortese attenzione.

Prima di tutto ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato.

Dopo di che, se devi convertire una stringa classica del 'C' in un long, puoi usare l'apposita funzione che si trova in <stdlib.h> ovvero la atol().

Guglielmo

@Giovanni1974 devi specificare che tipo di stringa (ossia "String"? O una stringa C ovvero "char *"?) altrimenti non possiamo che darti risposte generiche.
Magari posta anche il codice (o almeno le parti che riguardano questa cosa) così capiamo meglio.

La ringrazio per la correzione e per l'aiuto, non riesco a trovare la libreria stdlib.h per arduino :roll_eyes:

Grazie per la cortese attenzione, ecco il frammento di codice:

char c; 
String Dis = ("");
    if (SSerial.available ()) {       
    Dis = "";
 do {
       c = SSerial.read();
       if((c != '\n')&&(c != '\r'))
       Dis += c;
     } while (c != '\n');
    }

Non c'è nulla da trovare, fa parte del set di istruzioni standard del C (stdlib - standard library) normalmente incluse a prescindere.

@Giovanni1974 : In conformità al REGOLAMENTO, fosse anche per una sola riga, il codice va racchiuso negli appositi tag ... :roll_eyes:

... cortesemente, quindi, edita il tuo post più sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Grazie. :slight_smile:

Guglielmo

... e comunque tu NON stai usando le stringhe classiche del 'C' bensì la classe String con i suoi oggetti (cosa che su Arduino noi sconsigliamo sempre per i noti problemi), per cui ... se cerchi tra i metodi della classe String trovi quello che cerchi.

Guglielmo

ok!
Grazie

Salve, ho scaricato anche la IDE.Zip di arduino e non è presente.. Se la includo non diventa rossa è normale?

Ma non devi includerla, è già inclusa.

Ok!
Grazie

T'è già stato detto che è una cosa DI BASE che è sempre presente e che non devi scaricare null'altro.

In ogni caso, quella va bene per le stringhe classiche del 'C' e NON per la classe String (che tu sembra stia usando) ... hai capito la differenza tra le due cose ? ? ?

Per la classe String devi cercare il giusto metodo nella classe.

Guglielmo

... hai capito la differenza tra le due cose ? ? ? Purtroppo no, non sono un esperto. Magari un semplice esempio sarebbe molto gradito..

Un esempio è ben poco utile e rende poco ...

char stringaClassica[] = "Questa è una stringa classica";
String stringaString   = "Questa è una stringa con la classe String";

... purtroppo occorre STUDIARE per capire bene ... ti ho messo prima sia il link a cosa sono le stringhe classiche del 'C' sia il link alla classe String ... sono entrambe cose ben spiegate nel reference con tutti i vari esempi ... :roll_eyes:

Sul motivo per cui su Arduino è bene NON usare la classe String è spiegato nel primo post di QUESTO thread.

Guglielmo

Salve,
se può servire allego la soluzione con un semplice toFloat();

char c; 
String Dis = ("");
float a;
    if (SSerial.available ()) {       
    Dis = "";
 do {
       c = SSerial.read();
       if((c != '\n')&&(c != '\r'))
       Dis += c;
     } while (c != '\n');
    }
a = Dist.toFloat();
Serial.print (a, 3); //

... uno dei "metodi" della "classe" String che ti avevo indicato.

Però, se hai letto quanto ti ho indicato, avrai capito che con tale classe, su Arduino, prima o poi, avrai problemi, quindi ... io cercherei di trovare il tempo per imparare ad usare le stringhe classiche del 'C' e lascerei stare String ... :roll_eyes:

Guglielmo