Go Down

Topic: Proyecto SAYCA (Sistemas antirrobo y confort arduido) (Read 2 times) previous topic - next topic

fjramirez

Aug 01, 2012, 07:05 pm Last Edit: Aug 01, 2012, 07:26 pm by fjramirez Reason: 1
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 http://code.google.com/p/arduino-tvout/ (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 http://www.arduinodev.com/hardware/obd-kit/ 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)
Code: [Select]
#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

Igor R

#1
Aug 01, 2012, 08:07 pm Last Edit: Aug 01, 2012, 08:09 pm by Igor R Reason: 1
Si no recuerdo mal, TVOut tiene su propias funciones para manejo de puerto serie...mira a ver si eso es el problema....http://code.google.com/p/arduino-tvout/wiki/EX2

Creo que el autor lo hizo porque como bien dices, el micro va un poco al límite, y para respetar los tiempos,interrupciones, y demás que se necesitas,tuvo que hacer la parte del manejo serie. No sé como esta el tema de envio, o era sólo para recepción.... te tocará investigar un poco.

Saludos


Igor

fjramirez


Si no recuerdo mal, TVOut tiene su propias funciones para manejo de puerto serie...mira a ver si eso es el problema....http://code.google.com/p/arduino-tvout/wiki/EX2

Creo que el autor lo hizo porque como bien dices, el micro va un poco al límite, y para respetar los tiempos,interrupciones, y demás que se necesitas,tuvo que hacer la parte del manejo serie. No sé como esta el tema de envio, o era sólo para recepción.... te tocará investigar un poco.

Saludos


Igor


Quieres decir que use la modificación de la librería del propio tvout y no la de arduino? mmmm muy interesante eso que me dices jajaja, voy a probar.

Gracias Igor R, siempre estas hay ayudando!!!

fjramirez

nada, se conoce que la librería es para la antigua versión de arduino me da erro

Quote
#include <TVout.h>
#include <pollserial.h>
#include <fontALL.h>

TVout TV;
pollserial pserial;

void setup()  {
  TV.begin(PAL,184,72);
  TV.select_font(font6x8);
  TV.println("Serial Terminal");
  TV.println("-- Version 0.1 --");
  TV.set_hbi_hook(pserial.begin(57600));
}

void loop() {
  if (pserial.available()) {
    TV.print((char)pserial.read());
  }
}



C:\Archivos de programa\arduino\libraries\pollserial/pollserial.h:46: error: conflicting return type specified for 'virtual void pollserial::write(uint8_t)'
C:\Archivos de programa\arduino\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

Oye, ahora que estoy viendo, este proyecto es tuyo no Igor??
http://www.youtube.com/watch?v=CZGxynxNAlM
Yo quiero justo hacer esoooo, podrias echarme una mano. Lo que quiero es manejar ese tipo de pantalla, entre 4,3" y estoy viendo que seguir con la libreria TVout me va a dar muchos problemas. También he visto esto: http://www.batsocks.co.uk/products/Shields/TellyMate%20Shield.htm alguien a trabajado con el?? Es para mostrar un menú y datos en tiempo real de rpm y km/h del coche.

fjramirez

#4
Aug 01, 2012, 10:27 pm Last Edit: Aug 01, 2012, 10:29 pm by fjramirez Reason: 1
Bien, ya modifique la librería pollserial para que funcione en la IDE de arduino 1.0.1 Probé el ejemplo y lo metí en mi código y va perfecto!!! Ahora bien, quiero usar solo un arduino, la librería OBD usa el puerto Serial es decir el 0, pero como tengo que usar el que gestiona TVout como lo haría???

En OBD.cpp encontre:
Quote
#ifndef OBDUART
#define OBDUART Serial
#endif

para usar el puerto serie 1 u otro del arduino mega yo lo hacia asi:
Quote
#ifndef OBDUART
#define OBDUART Serial1
#endif


pero como lo tengo que hacer para usar:
Quote
#include <pollserial.h>
pollserial pserial;

Go Up