Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

trasformare caratteri in interi

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] trasformare caratteri in interi

Messaggioda Foto Utentelcua31989 » 22 apr 2013, 0:05

Ciao a tutti,

sto scrivendo un firmware in C per il PIC micro 16F1827 che comunica tramite RS232 ad un PC. Il PIC elabora i dati ricevuti (la temperatura) e fa partire una stufetta elettrica nel box se necessario. Ora la comunicazione via RS232 è funzionante, ma ho un problema su come convertire la temperatura. Qui entra in gioco il virtual terminal che, per impostare una temperatura di 21.5°C invia prima il '2' , l' '1' il carattere '.' e poi il '5'. Tutti questi dovrebbero essere caratteri quindi per trasformarli in interi si sottrare 48 da ogni numero inviato. Così però ottengo tre variabili con i rispettivi valori: decine=2, unità=1 e decimi=5. Queste tre distinte variabili, si devono salvare in una variabile di tipo float chiamata temp in rappresentazione decimale.

Come faccio a fare in modo che la mia variabile temp abbia il valore di 21.5 (o anche 21 scartando il decimale) avnedo le tre variabili con valori diversi?

E' possibile fare una cosa del genere?

Un grazie mille a tutti,
lcua31989
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[2] Re: trasformare caratteri in interi

Messaggioda Foto Utentefairyvilje » 22 apr 2013, 0:45

La libreria standard C mette a disposizione una funzione chiamata atof, ovvero alpha to float. Se non fosse disponibile occorre che tu la implementi. Controlla in tal caso possiamo riparlarne ;)

P.S. Più che su 3 variabili diverse lavora su un array...
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

4
voti

[3] Re: trasformare caratteri in interi

Messaggioda Foto UtentePietroBaima » 22 apr 2013, 1:14

Così potrebbe andarti bene, è quello che vuoi fare?

Codice: Seleziona tutto
#include <stdio.h>

int main (void)
{
   int n[]={2,1,5};
   float temp;
   
   temp=(float)n[0]*10+(float)n[1]+(float)n[2]/10;
   
   printf("%f\n",temp);
   
   return 0;
}


O_/
Pietro
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[4] Re: trasformare caratteri in interi

Messaggioda Foto Utentefairyvilje » 22 apr 2013, 4:07

Forse per questo contesto può anche bastare :D. Anzi forse bastava usare un razionale fixed point senza sprecare preziosa memoria.
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

0
voti

[5] Re: trasformare caratteri in interi

Messaggioda Foto UtentePietroBaima » 22 apr 2013, 10:16

Foto Utentefairyvilje, già :D è proprio quello che intendevo. Dovrebbe bastare, ma vediamo se va bene per l'OP.

Ciao,
Pietro.
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[6] Re: trasformare caratteri in interi

Messaggioda Foto Utentelcua31989 » 22 apr 2013, 12:44

Ciao Pietro,

Il tuo codice mi sembra quello che spreca meno RAM al PIC micro.
Era proprio qiello che intendevo io.

Grazie,
Lcua31989
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

0
voti

[7] Re: trasformare caratteri in interi

Messaggioda Foto UtenteIvanSB » 28 apr 2013, 19:08

PietroBaima ha scritto:Così potrebbe andarti bene, è quello che vuoi fare?

Codice: Seleziona tutto
#include <stdio.h>

int main (void)
{
   int n[]={2,1,5};
   float temp;
   
   temp=(float)n[0]*10+(float)n[1]+(float)n[2]/10;
   
   printf("%f\n",temp);
   
   return 0;
}


O_/
Pietro


Se sono "caratteri" as in 0 passato come '0' mancano delle sottrazioni.
Si può fare anche un solo cast.
Avatar utente
Foto UtenteIvanSB
 
Messaggi: 14
Iscritto il: 25 mar 2013, 17:14

0
voti

[8] Re: trasformare caratteri in interi

Messaggioda Foto UtenteShockwaver » 7 mag 2013, 10:20

IvanSB ha scritto:
PietroBaima ha scritto:Così potrebbe andarti bene, è quello che vuoi fare?

Codice: Seleziona tutto
#include <stdio.h>

int main (void)
{
   int n[]={2,1,5};
   float temp;
   
   temp=(float)n[0]*10+(float)n[1]+(float)n[2]/10;
   
   printf("%f\n",temp);
   
   return 0;
}


O_/
Pietro


Se sono "caratteri" as in 0 passato come '0' mancano delle sottrazioni.
Si può fare anche un solo cast.


Esatto, ipotizzando i valori come variabili char leggibili '2' '1' ecc (e ricordandosi del punto) verrebbe

Codice: Seleziona tutto
float temp = 0.0;
temp = (n[0] - '0') * 10 + (n[1] - '0') + ((float)n[3] - '0')/10);

Però se la seriale produce stringhe null terminated (o quanto meno ti facessi carico di appenderlo tu lo '\0')

suggerirei la:
Codice: Seleziona tutto
#include <stdio.h>
.
.
.
sscanf(n, "%f", &temp);

magari fai un controllo per vedere se va a buon fine.

O_/
Ultima modifica di Foto Utentelillo il 7 mag 2013, 10:24, modificato 1 volta in totale.
Motivazione: Non quotare tutto per rispondere al messaggio precedente ;)
Anyone who has never made a mistake has never tried anything new
Two things are infinite: universe and human stupidity, and I'm not sure about the former
You did not really understand something unless you can explain it to your grandmother
A. Einstein
Avatar utente
Foto UtenteShockwaver
770 1 5 11
Expert
Expert
 
Messaggi: 859
Iscritto il: 3 mar 2010, 18:56


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti