13-12-2023, 01:39 PM
Buenos días a todos desde Guadalajara (España), soy informático jubilado y como la informática además de mi profesión siempre a sido una afición más, estoy dando mis primeros pasos en Arduino y es esta práctica me he encontrado con un problema.
Tengo un arduino mega y una pantalla táctil STONE capacitativa de 3,5", me comunico con la pantalla por el puerto Serial1 y no tengo ningún problema para recibir datos de la pantalla de los códigos que envía la pantalla pero a la hora de enviar comandos a la pantalla, bien sea para cambiar de pantalla o presentar valores en campos o etiquetas de esa pantalla es cuando tengo problemas puesto que el comando mandado, si lo aplico en el simulador de la pantalla lo hace perfectamente, pero cuando lo hago por el puerto Serial1 no me hace ni caso.
Para poder solucionar el problema resumí el programa a la mínima expresión (simplemente un comando para cambiar de pantalla) probé 3 sistemas, objeto json, con el comando en una variable y con el comando directamente con la sentencia Serial1.print o Serial1.println (he probado con los tres puertos serie (Serial2, Serial2 y Serial3) con el mismo resultado es decir ninguno, a continuación pego el código, por si alguien sabe decirme como solucionar el problema con el que me encuentro, seguramente debido a mi poca experiencia con el tema Arduino.
#include <stone.h>
#include <ArduinoJson.hpp>
#include <ArduinoJson.h>
#include <SoftwareSerial.h>
/*
ST<{"cmd_code":"open_win","type":"window","widget":"clv4"}>ET
este es el comando que debe llegar a la pantalla y probado en el simulador funciona
*/
void setup ()
{
Serial.begin(115200); //para poder ver por el monitor serial que es lo que se manda a la pantalla
Serial.println("Mandando el comando a la pantalla");
delay(200);
Serial1.begin(115200); // puerto serie 1 para comunicar con la pantalla
Serial1.flush();
SerializeObject();
}
void loop(){}
void SerializeObject()
{
StaticJsonDocument<100> doc;
doc["cmd_code"] = "open_window";
doc["type"] = "window";
doc["widget"] = "clv4";
// Enviar el comando a la pantalla
Serial1.write("ST<");
serializeJson(doc, Serial1);
Serial1.write(">ET\n");
// Enviar el comando al puerto monitor para saber que se a mandado a la pantalla
Serial.write("ST<");
serializeJson(doc, Serial);
Serial.write(">ET\n");
}
Y lo que aparece por el puerto mnitor al enviar el comando es:
ST<{"cmd_code":"open_win","type":"window","widget":"clv4"}>ET
Que es lo que debe llegar a la pantalla para cambiar a la pantalla clv4, pero no causa ningún efecto
Tengo un arduino mega y una pantalla táctil STONE capacitativa de 3,5", me comunico con la pantalla por el puerto Serial1 y no tengo ningún problema para recibir datos de la pantalla de los códigos que envía la pantalla pero a la hora de enviar comandos a la pantalla, bien sea para cambiar de pantalla o presentar valores en campos o etiquetas de esa pantalla es cuando tengo problemas puesto que el comando mandado, si lo aplico en el simulador de la pantalla lo hace perfectamente, pero cuando lo hago por el puerto Serial1 no me hace ni caso.
Para poder solucionar el problema resumí el programa a la mínima expresión (simplemente un comando para cambiar de pantalla) probé 3 sistemas, objeto json, con el comando en una variable y con el comando directamente con la sentencia Serial1.print o Serial1.println (he probado con los tres puertos serie (Serial2, Serial2 y Serial3) con el mismo resultado es decir ninguno, a continuación pego el código, por si alguien sabe decirme como solucionar el problema con el que me encuentro, seguramente debido a mi poca experiencia con el tema Arduino.
#include <stone.h>
#include <ArduinoJson.hpp>
#include <ArduinoJson.h>
#include <SoftwareSerial.h>
/*
ST<{"cmd_code":"open_win","type":"window","widget":"clv4"}>ET
este es el comando que debe llegar a la pantalla y probado en el simulador funciona
*/
void setup ()
{
Serial.begin(115200); //para poder ver por el monitor serial que es lo que se manda a la pantalla
Serial.println("Mandando el comando a la pantalla");
delay(200);
Serial1.begin(115200); // puerto serie 1 para comunicar con la pantalla
Serial1.flush();
SerializeObject();
}
void loop(){}
void SerializeObject()
{
StaticJsonDocument<100> doc;
doc["cmd_code"] = "open_window";
doc["type"] = "window";
doc["widget"] = "clv4";
// Enviar el comando a la pantalla
Serial1.write("ST<");
serializeJson(doc, Serial1);
Serial1.write(">ET\n");
// Enviar el comando al puerto monitor para saber que se a mandado a la pantalla
Serial.write("ST<");
serializeJson(doc, Serial);
Serial.write(">ET\n");
}
Y lo que aparece por el puerto mnitor al enviar el comando es:
ST<{"cmd_code":"open_win","type":"window","widget":"clv4"}>ET
Que es lo que debe llegar a la pantalla para cambiar a la pantalla clv4, pero no causa ningún efecto