Vai al contenuto
PLC Forum


Gestione Dati Negativi Con La Virgola In C Su Lcd


slavin89

Messaggi consigliati

buonasera a tutti

dovrei gestire su un programma in c calcoli con numeri a risultato negativo e con la virgola e avrei pensato di gestirli con numeri float ma non so come poterli poi rappresentare sul display, qualcuno mi può. Dare qualche informazione su come potrei fare ?

Link al commento
Condividi su altri siti


io di solito faccio così

dichiaro una stringa della dimensione che mi serve

char str[20] ; // 20 numero a caso

poi non uso printf ma sprintf è identica a printf solo che il risultato lo memorizza nella stringa primo parametro ad esempio

sprintf (str, "num=%02", var) ;

la stringa str contiene quello che normalmente vedresti a video usando la printf cioè se var = 10 allora str = "num=10"

Tu avrai sicuramente qualche procedura per inviare all'lcd una stringa passando str vedi il risultato della sprintf sul display.

Link al commento
Condividi su altri siti

sprintf (str, "num=%02", var) ;

come devo interpretare le componenti di questa parte di codice?

sprintf---comando

(str,------stringa è uguale a

num=%02-----questa parte come deve essere composta?

var-----cosa indica?

Link al commento
Condividi su altri siti

Scusa scrivo sempre di fretta e finisco con dare molte cose per scontate

void main()

{

float fvalue = -15.23 ;

printf ( "float value:%+06.2f\n", fvalue) ;

}

Se lo usi su un PC dovresti vedere sullo schermo: float_value:-15.23

Nella stringa di formattazione della printf "float value:%+06.2f\n" hai

float value = testo cpoiato così com'è sullo schermo

%+6.2f

% start comando formattazione (come si compone un comando di formattazione lo trovi nel link che ti ho dato o cerchi con google ne trovi Nmila di info)

+ inserisci il segno come primo carattere del numero

6 numero di cifre utilizzate per stamapre il numero (compresi segno e punto decimale)

.2 decimali da utilizzare (arrotonda se ne hai di più)

f il numero da stampare è float

\n a capo dopo la stampa

Ora se lavori su un sistema embedded e la tua printf non invia dati allo schermo puoi usare la tecnica che ti ho descritto

usi sprintf anzichè printf funzioni identiche ma la sprintf salva quello che normalmente vedresti a video in una variabile

la variabile è il primo parametro della sprintf

void main()

{

char str [40] ;

float fvalue = -15.23 ;

sprintf (str, "float value:%+06.2f\n", fvalue) ;

}

tecnicamente str è il puntatore all'area di memoria dove la sprintf scriverà il risultato dell'operazione di stampa

se lo utlizzi sun un PC non vedi nulla sullo schermo ma dopo la sprintf str cioè la memoria indirizzata da str contiene la stringa "float_value:-15.23"

Ti basta passare str al tuo driver del display per visualizzare la stringa

Suggerirei però uno studio preliminare del C non ti vedo in gran forma

Modificato: da accacca
Link al commento
Condividi su altri siti

diciamo che il C lo sto imparando quindi non sono sicuramente una cima.

Non riesco a capire una cosa..in sostanza io ho un valore "A" che è variabile da 0 a 1024 e che quindi dichiaro come unsigned int.

tale numero verrà diviso per 2 e al risultato viene tolto 50.

secondo il mio ragionamento avrei dichiarato una variabile "RESULT" come float

e avrei fatto

RESULT=((A/2)-50)

a questo punto però mi trovo che finchè il risultato è positivo intero nessun problema ma se per esempio A=31 un mare di guai perchè il risultato è negativo con la virgola.

Tra l'altro il risultato devo visualizzarlo su un display LCD

Generalmente per visualizzare un numero intero dichiaro LCD_PUTUN();

se invece voglio stampare una stringa LCD_PUTS("...."); e cosi stampo sull'LCD ciò che scrivo all'interno delle " "

Il problema quindi oltre a come effettuare il calcolo e che non sembra ci sia una funzione per passare il risultato al display

spero di essere stato più chiaro e che possiate aiutarmi

ciao a tutti

Link al commento
Condividi su altri siti

Allora potresti fare così

void main()
{
   int A ;
   float result ;
   char str [20] ;

   result = ((A/2.0)-50.0) ;

   sprintf (str. "result=%+06.2f" result) ;

   LCD_PUTS (str) ;
}

quando calcoli result devi metterci qualcosa di float altrimenti il compilatore lo considera calcolo con numeri interi e solo alla fine lo assegna a float troncando i decimali

Vado a (poca) memoria mi pare che aggiungendo il decimale alle costanti ad esempioi 50.0 anzichè 50 il calcolo diventa automaticamente float

Ma siccome non sono sicuro il piano B è

void main()
{
   int A ;
   float result ;
   char str [20] ;

   result = A ; // così A diventa un float
   result = ((result/2.0)-50.0) ;  //operazione sicuramente float

   sprintf (str. "result=%+06.2f" result) ;

   LCD_PUTS (str) ;
}
Link al commento
Condividi su altri siti

mm.. ok oggi ci provo vediamo che succede..quindi non serve eseguire il complemento a due..perchè la funzione sprintf mi esegue già l'impostazione del segno in seguito al risultato del calcolo?!

intanto grazie

Link al commento
Condividi su altri siti

ciao a tutti..

ho provato la formattazione che mi ha indicato acacca ma il compilatore MP-LAB mi restituisce degli errori

nello specifico

function declared implicit int e expression sintax ......riferito alla riga dove si esegue lo sprintf

può esserci un errore di scrittura?

Link al commento
Condividi su altri siti

pardon ho risolto, non avevo incluso la lbreria stdio..

ringrazio molto per l'aiuto il tuo approccio funziona perfettamente ora ho colto l'occasione per andare avanti a studiare questo nuovo argomento del linguaggio c..

grazie ancora

Link al commento
Condividi su altri siti

Cioa slavin bene sono contento

consolati è la strada che facciamo tutti e penso sia l'unica percorribile per imparare a programmare

Modificato: da accacca
Link al commento
Condividi su altri siti

tu mi sembra che di dimestichezza con il C ne hai parecchia..puoi consigliarmi un libro o una fonte dove poter imparare meglio?

senza nulla togliere a internet dove si trova tutto volendo, ma magari un libro per apprendere a fondo l'argomento è più indicato forse ?

Link al commento
Condividi su altri siti

puoi consigliarmi un libro o una fonte dove poter imparare meglio?

Chi intende programmare in "C" non può fare a meno di avere sempre a portata di mano "Linguaggio C" di Brian W. Kernigham e Dennis M. Ritchie, detto anche il "RitchieKernigham" tutto attaccato. :smile:

Di libri sul "C" ce ne sono parecchi, anche ottimi. Ma sen non hai letto questo non sai cos'è veramente il "C". Più che un libro è il vangelo del "C".

Io ne ho forse la prima versione in italiano, risale al 1980. Comincia a mostrare i segni dell'età e dell'uso. Ne ho anche parecchi altre nello scaffale alla mia destra, però in caso di dubbio il Ritchie fa cassazione. ;)

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Ok vedrò. Di procurarmene una copia allora ammesso di trovarla.

piccolo T

che picere rivederti Livio..sro ancora facendo test sul circuito per la pt100 e grazie ai tuoi consigli sto vedendo qualche risultato..ci ho messo più del previsto ma ho preferito dedicarci piú tempo e fare le cose con più. metodo ..

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...