Tengo el siguiente codigo. Empieza con la lectura de una micro SD con datos de sensores en un archivo txt, los cuales son leidos primero en el string completo (parrafo completo), despues son separados
y almacenados en una variable individual (siguen siendo string), despues, como se necesita sacar el promedio de esas operaciones se convierten a float. Al final pasar a variable tipo char para ser enviadas
a la pantalla nextion a su correspondiente elemento text. El codigo completo es el siguiente:
//Librerias de la nextion
#include <doxygen.h>
#include <NexButton.h>
#include <NexConfig.h>
#include <NexCrop.h>
#include <NexGauge.h>
#include <NexHardware.h>
#include <NexHotspot.h>
#include <NexObject.h>
#include <NexPage.h>
#include <NexPicture.h>
#include <NexProgressBar.h>
#include <NexSlider.h>
#include <NexText.h>
#include <Nextion.h>
#include <NexTouch.h>
#include <NexWaveform.h>
#include <Nextion.h>
#include <EasyNextionLibrary.h>
#include <trigger.h>
// Librerias de la micro SD y una libreria especial que se para tramas de string de forma mas rapida.
#include <SD.h>
#include <Separador.h>
Separador s;
File myFile;
int UltimaPocicion=0;
int pausa=1000;
// Arduino -> Nextion
// Pino 5v -> Vermelho
// Pino GND -> Preto
// Pino 0 -> azul
// Pino 1 -> Amarelo
//Nomenclatura es:
//"T" para referir temperatura
//"H" para referir humedad
//Numeros del uno al cinco para ubicar numero de sensor y de variable, por ejemplo T1S1 es temperatura varable 1 del sensor 1.
//Se declaran los elementos de la nextion y se especifican sus carateristicas
//Ojo a la linea de abajo es de la variable donde tengo problema pero ya revise muchas veces y esta bien declarado.
NexText TPROM = NexText(4, 3, "TPROM");
//
sensor 1
NexText T1S1 = NexText(6, 4, "T1S1");
NexText T2S1 = NexText(6, 6, "T2S1");
NexText T3S1 = NexText(6, 7, "T3S1");
NexText T4S1 = NexText(6, 5, "T4S1");
NexText T5S1 = NexText(6, 3, "T5S1");
NexText H1S1 = NexText(7, 7, "H1S1");
NexText H2S1 = NexText(7, 6, "H2S1");
NexText H3S1 = NexText(7, 5, "H3S1");
NexText H4S1 = NexText(7, 4, "H4S1");
NexText H5S1 = NexText(7, 3, "H5S1");
void setup() {
// Si inicia la nextion y el puerto serial
nexInit();
Serial.begin(9600);
Serial.print("Iniciando SD ...");
if (!SD.begin(53)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
}
void loop() {
//Se corresponde a leer la micro sd y a especificar la lectura por párrafo y se imprime.
myFile = SD.open("datos3.txt");//abrimos el archivo
int totalBytes=myFile.size();
String cadena="";
if (myFile) {
if(UltimaPocicion>=totalBytes) UltimaPocicion=0;
myFile.seek(UltimaPocicion);
//--Leemos una línea de la hoja de texto
while (myFile.available()) {
char caracter=myFile.read();
cadena=cadena+caracter;
UltimaPocicion=myFile.position();
if(caracter==10)//ASCII de nueva de línea
{
break;
}
}
//
myFile.close(); //cerramos el archivo
Serial.println("Ultima cadena leida es:");
Serial.println(cadena);
//En esta ´parte se usa la libreria "separador.h". El string leido corresponde a un parrafo del archivo txt. seria algo como:
// 22.2, 22,3, 22.4, 22.5, 22.6, 22.7, 22.2, 22,3, 22.4, 22.5, 22.6, 22.7, (todo es un solo string) la libreria separa cada elemento, diferenciandolo con las comas.
String datosrecibidos = cadena;
String elemento1 = s.separa(datosrecibidos, ',',1); //aqui separa por ejemplo segun la posicion desde "cadena" corresponde a 22.3 (pues dice que va en posicion 1)
String elemento2 = s.separa(datosrecibidos, ',',2);
String elemento3 = s.separa(datosrecibidos, ',',3);
String elemento4 = s.separa(datosrecibidos, ',',4);
String elemento5 = s.separa(datosrecibidos, ',',5);
String elemento6 = s.separa(datosrecibidos, ',',6);
String elemento7 = s.separa(datosrecibidos, ',',7);
String elemento8 = s.separa(datosrecibidos, ',',
;
String elemento9 = s.separa(datosrecibidos, ',',9);
String elemento10 = s.separa(datosrecibidos, ',',10);
//aqui solo se imprime ya cada string separado para verificar en puerto serial y se agrega °C
Serial.println("La temperatura 1 es: " + elemento1 + "°C");
Serial.println("La temperatura 2 es: " + elemento2 + "°C");
Serial.println("La temperatura 3 es: " + elemento3 + "°C");
Serial.println("La temperatura 4 es: " + elemento4 + "°C");
Serial.println("La temperatura 5 es: " + elemento5 + "°C");
Serial.println("La temperatura 6 es: " + elemento6 + "°C");
Serial.println("La temperatura 7 es: " + elemento7 + "°C");
Serial.println("La temperatura 8 es: " + elemento8 + "°C");
Serial.println("La temperatura 9 es: " + elemento9 + "°C");
Serial.println("La temperatura 10 es: " + elemento10 + "°C");
//Aqui se convierte en float cada string
float felemento1 = elemento1.toFloat();
float felemento2 = elemento2.toFloat();
float felemento3 = elemento3.toFloat();
float felemento4 = elemento4.toFloat();
float felemento5 = elemento5.toFloat();
float felemento6 = elemento6.toFloat();
float felemento7 = elemento7.toFloat();
float felemento8 = elemento8.toFloat();
float felemento9 = elemento9.toFloat();
float felemento10 = elemento10.toFloat();
//En esta parte se hace un simple promedio (por ello se necesitaba convertir de string a float)
float PROMtemp = ((felemento1 + felemento2 + felemento3 + felemento4 + felemento5 + felemento6 + felemento7 + felemento8 + felemento9 + felemento10)/10);
//Aqui resulta el problema, solo estoy haciendolo con un solo elemento porque no he podido resolver dicho problema. Al pasar el float PROMtemp a char (que es el tipo de dato que necesita
// la funcion setText en el simulador de nextion y en la pantalla no se visualiza nada. Ya verifique el nombre del elemento, su forma de declararlo con sus características y todo y no me envia nada.
char TPROMED [10];
dtostrf(PROMtemp, 5, 1, TPROMED); //number, width, decimal places, buffer
TPROM.setText(TPROMED);
/Aqui solo verifico con el puerto serial, no es importante
Serial.println("Promedio FLOAT de Temperatura es: ");
Serial.println(PROMtemp);
Serial.println("Promedio STRING de Temperatura es: ");
Serial.println(TPROMED);
Serial.println("oPERACION es: ");
Serial.println(TPROMED);
Serial.println(felemento1);
Serial.println(felemento2);
Serial.println(felemento3);
Serial.println(felemento4);
Serial.println(felemento5);
Serial.println(felemento6);
Serial.println(felemento7);
Serial.println(felemento8);
Serial.println(felemento9);
Serial.println(felemento10);
} else {
Serial.println("Error al abrir el archivo");
}
//Aqui envio datos tipos char a los elementos setText de la nextion y funciona bien, solo son de prueba pero en el caso de arriba no puedo.
//
sensor 1
char DatoS1T1[5] = "123";
char DatoS1T2[5] = "456";
char DatoS1T3[5] = "789";
char DatoS1T4[5] = "123";
char DatoS1T5[5] = "456";
T1S1.setText(DatoS1T1);
T2S1.setText(DatoS1T2);
T3S1.setText(DatoS1T3);
T4S1.setText(DatoS1T4);
T5S1.setText(DatoS1T5);
char DatoS1H1[5] = "123";
char DatoS1H2[5] = "456";
char DatoS1H3[5] = "789";
char DatoS1H4[5] = "123";
char DatoS1H5[5] = "456";
H1S1.setText(DatoS1H1);
H2S1.setText(DatoS1H2);
H3S1.setText(DatoS1H3);
H4S1.setText(DatoS1H4);
H5S1.setText(DatoS1H5);
}