Bueno, pues hace ya mucho que tenia pensado realizar este proyecto, y ya hace algun tiempo que lo empece. Se trata de un sistema, en principio para coche, antirrobo, localización gps, confort, etc. todo lo que se nos ocurra.
Estoy usando la librería TVout Google Code Archive - Long-term storage for Google Code Project Hosting. (si algo des-actualizada) pero es la que mas se adapta a mis necesidades. Facilidad de uso y nos permite usar una pantalla lcd entre 4" y 7", que a la vez podemos usarla para ver películas o como monitor de aparcamiento. Es algo muy versátil. He desarrollado el entorno y todo bien, la pantalla principal muestra los Km/h, rpm, temperatura del motor y algunas cosillas mas.
Para obtener los datos del coche he usado la librería OBD Freematics OBD-II Adapter for Arduino | ArduinoDev.com y me va perfecta.
Todo funciona muy bien por separado, el problema es a la hora de juntarlo, que los datos del puerto obd que llegan por el puerto serie se procesan a tirones, es como si el programa tardara mucho para procesar la parte de video y no dedicara tiempo a escuchar los puertos series. (la librería TVout usa un puerto serie modificado)
Bien, pensé en que la librería tvout me comía muchos recursos para los puerto y decidi usar un arduino uno para manejar la información obd obtener los datos y enviar los valores ya procesados al arduino mega que maneja la librería tvout. Pero nada, el refresco de información es adecuado, pero la información me llega errónea, me pierde datos y no se cual es el motivo. Os pongo unos ejemplos de prueba:
Codigo arduino uno (lee datos del puerto obd)
#include <SoftwareSerial.h>
#include <OBD.h>
COBD obd;
SoftwareSerial SerialSYCA (2, 3); // RX, TX Puerto serie para conectar con SAYCA
String inputString = ""; // String de comandos recividos de SAYCA
boolean stringComplete = false; // Indicador de comando completo
void setup() {
Serial.begin(OBD_SERIAL_BAUDRATE); // Puerto de comunicacion con SYCA
SerialSYCA.begin(OBD_SERIAL_BAUDRATE); // Puerto de comunicacion con OBDII
inputString.reserve(20); // Reservamos espacios para el string comandos
//while (!obd.Init());
}
void loop() {
// **ENVIO DE PRUEBA**
delay (2000);
SerialSYCA.println("1234");
}
......
Adjunto el código de SAYCA que es el que procesad todo
Haber si entre todos podemos hacer algo. Y por cierto, si hay alguna librería similar a TVOut pues me seria de gran ayuda
Adjunto una imagen del terminal donde se ve que no se recibe el dato completo que es 1234
Sayca.rar (4.85 KB)