Ciao a tutti.
Come ho detto nella presentazione ho costruito e assemblato un circuito per display LCD Nokia 3330.
Nel creare sketch, ricorre spesso l'esigenza di dover visualizzare un numero di tipo int o float.
Per visualizzare qualcosa sul display è richiesto un puntatore di caratteri, quindi il numero, prima lo scompongo tra parte intera e parte decimale e poi trasformo il tutto in puntatore *char.
Nei miei sketch questo problema l'ho risolto inserendo un bel pò di codice per ogni volta che deve essere eseguita l'operazione di visualizzazione.
Ho cercato di creare una funzione, che non funziona, ma dato che devo imparare vorrei un aiuto a creare una libreria (che mi dia un pò di flessbilità) per questo problema.
Di seguito posto i file che ho creato che non funzionano di cui vorrei venirne a capo, e soprattutto a capire:
file .h
// -----
// NumberTopunt.h è una libreria che converte un numero int, float, double, ecc, in un puntatore di caratteri
// che può essere visualizzata direttamente su un LCD Nokia 3310 e simili.
// -----
#ifndef NumTopunt_h
#define NumTopunt_h
#include "Arduino.h"
class NumberTopunt{
public:
char *Num2punt(float numero, int precisione);
private:
float _numero; // numero
int _precisione; // decimali dopo la virgola
};
#endif
File .cpp
#include "Arduino.h"
#include "NumberTopunt.h"
char *NumberTopunt::Number2punt(float numero, int precisione){
_numero = numero;
_precisione = precisione;
int ndec = _precisione; // numero (intero >0) di decimali da modificare per una maggior precisione
int decimali=1; // risultato dopo l'elevamento a potenza
int base=10;
int intPart = int(val);
for(int i=0; i<ndec; i++) // ciclo che esegue l'elevamento a potenza
decimali*=base;
long decPart =decimali*(val-intPart); //I am multiplying by 1000 assuming that the foat values will have a maximum of 3 decimal places
//Change to match the number of decimal places you need
if(decPart>0)return(decPart); //return the decimal part of float number if it is available
else if(decPart<0)return((-1)*decPart); //if negative, multiply by -1
else if(decPart=0)return(00); //return 0 if decimal part of float number is not available
String stringa="";
int lung_numero=0;
stringa+=String(int (_numero)+ "."+String(decPart);
lung_numero=stringa.length(); // Funzione che restituisce la lunghezza in intero di una stringa
//if(lung_punt <= 0)
//lung_punt=12;
char puntatorestringa[5]={' ', ' ', ' '};
stringa.toCharArray(puntatorestringa, 5);
for(int i=lung_numero; i<5; i++)
puntatorestringa[i]=' ';
stringa="";
return puntatorestringa;
}