Buenos días.
Estoy trabajando en un nuevo proyecto para mi coche el cual consiste en controlar todo el vehículo desde un arduino Mega. Las luces, encendido, etc. estarán controlados por 3 módulos de 4 reveladores, la comunicación sera por bluetooth a mi celular. Diseñé una aplicación en app inventor donde me muestra la información de los sensores de presión y temperatura así como voltaje y velocidad. La aplicación también cuenta con botones para poder accionar los relevadores, cundo se presiona un botón se envia una letra mayúscula al arduino para activar el relavador y si se presiona otra vez envía una letra minuscula para desactivar el relevador.
Para poder obtener la velocidad tengo un modulo GPS neo 6M.
Hardware utilizado:
Arduino MEGA 2560
Modulo bluetooth HC-06
Modulo GPS GY-NEO6MV2 con EEPROM de control de vuelo y antena APM2.5
Modulo relevador de 4 canales
Módulo Sensor Detector De Voltaje Hasta 25 V para conectar a los sensores
El problema lo tengo con la comunicación bluetooth y comunicación al monitor serial. Ya probé el modulo de gps con un código de ejemplo y funciona bien, puedo ver la información en el monitor serial, pero cuando cargo el código que yo diseñe y conecto el celular al modulo bluetooth no logro tener ninguna comunicación. Los leds TX y RX en el arduino tampoco se encienden cuando presiono algún botón en el celular.
Anexo el código para ver si ustedes pueden notar algún error en el.
///INCLUI BIBLIOTECA GPS/COMUNICACION SERIAL///
#include <SoftwareSerial.h>
#include "TinyGPS++.h"
TinyGPSPlus gps;
////DEFINE ENTRADAS SWITCHES///
int boton_ignicion=2;
int boton_marcha=3;
int boton_luces=4;
int boton_luces_aux=5;
int boton_dir_izq=6;
int boton_dir_der=7;
int boton_wiper=8;
int boton_claxon=9;
int switch_puerta=10;
int switch_stop=11;
int switch_reversa=12;
////DEFINE ENTRADAS SENSORES////
int sensor_pres=A0;
int sensor_temp=A1;
int sensor_volt=A2;
int sensor_gas=A3;
/////DEFINE SALIDAS////
int corriente_relay1=52;
int corriente_relay2=53;
int salida_ignicion=22;
int salida_marcha=23;
int salida_luces_bajas=24;
int salida_luces_altas=25;
int salida_luces_aux1=26;
int salida_luces_aux2=27;
int salida_dir_izq=28;
int salida_dir_der=29;
int salida_wiper=30;
int salida_bomba_agua=31;
int d=0;
int i=0;
int estado=0;
////DEFINE VARIABLES/////
char buffer [10];
float valorpres;
float valortemp;
float valorvolt;
float valorgas;
float rangoP;
float rangoT;
float rangoV;
float rangoG;
/////INICIA CONFIGURACION/////
void setup() {
Serial.begin(19200);
Serial1.begin(9600); ///comunicacion bluetooth
Serial2.begin(9600); ///comunicacion GPS
//////ENTRADAS//////
pinMode(boton_ignicion,INPUT);
pinMode(boton_marcha,INPUT);
pinMode(boton_luces,INPUT);
pinMode(boton_luces_aux,INPUT);
pinMode(boton_dir_izq,INPUT);
pinMode(boton_dir_der,INPUT);
pinMode(boton_wiper,INPUT);
pinMode(boton_claxon,INPUT);
pinMode(switch_puerta,INPUT);
pinMode(switch_stop,INPUT);
pinMode(switch_reversa,INPUT);
///////////////SALIDAS///////////////
pinMode(corriente_relay1,OUTPUT);
pinMode(corriente_relay2,OUTPUT);
pinMode(salida_ignicion,OUTPUT);
pinMode(salida_marcha,OUTPUT);
pinMode(salida_luces_bajas,OUTPUT);
pinMode(salida_luces_altas,OUTPUT);
pinMode(salida_luces_aux1,OUTPUT);
pinMode(salida_luces_aux2,OUTPUT);
pinMode(salida_dir_izq=28,OUTPUT);
pinMode(salida_dir_der=29,OUTPUT);
pinMode(salida_wiper=30,OUTPUT);
pinMode(salida_bomba_agua=31,OUTPUT);
////SECUENCIA INICIO RELEVADORES////
digitalWrite(salida_ignicion,HIGH);
digitalWrite(salida_marcha,HIGH);
Serial.print("ENCENDIDO");
delay(100);
digitalWrite(corriente_relay1,HIGH);
digitalWrite(corriente_relay2,HIGH);
delay(300);
digitalWrite(salida_luces_bajas,HIGH);
digitalWrite(salida_luces_altas,HIGH);
digitalWrite(salida_luces_aux1,HIGH);
digitalWrite(salida_luces_aux2,HIGH);
digitalWrite(salida_dir_izq=28,HIGH);
digitalWrite(salida_dir_der=29,HIGH);
digitalWrite(salida_wiper=30,HIGH);
digitalWrite(salida_bomba_agua=31,HIGH);
}
/////LECTURA SENSORES/////
float oilPres(){
valorpres = analogRead(sensor_pres);
rangoP=(float (valorpres)/1023)*50; //falta calcular valores para obtener dato real
return rangoP;
}
float oilTemp(){
valortemp = analogRead(sensor_temp);
rangoT=(float (valortemp)/1023)*50;
return rangoT;
}
float volts(){
valorvolt = analogRead(sensor_volt);
rangoV=(float (valorvolt)/1023)*50;
return rangoV;
}
float fuel(){
valorgas = analogRead(sensor_gas);
rangoG=(float (valorgas)/1023)*50;
return rangoG;
}
//////INICIA SECUENCIA//////
void loop() {
//////LECTURA GPS/////////
while(Serial2.available()){ // check for gps data
if(gps.encode(Serial2.read())){ // encode gps data
Serial.print("Velocidad: ");Serial.print(gps.speed.kmph());Serial.println(" Km/hs");
//////LECTURA SENSORES//////
int temperatura=oilTemp();
int presion=oilPres();
int voltaje=volts();
int gasolina=fuel();
int velocidad=gps.speed.kmph();
sprintf(buffer,"%d/%d/%d/%d/%d",velocidad/presion/temperatura/gasolina/voltaje);//concadena varias variables diferentes como int, char en una sola cadena, aprovecho la coma para dividir en appinventor los datos
Serial.println(buffer);
Serial1.println(buffer);
}
}
///////ACTIVACIO SWITCHES//////
if(Serial1.available()>0){
estado = Serial1.read();
Serial.print(estado);
}
while(salida_ignicion,HIGH){
if((estado =='A')or(boton_ignicion,HIGH)){
digitalWrite(salida_ignicion,LOW);
}
}
while(salida_ignicion,LOW){
if((estado=='a')or(boton_ignicion,HIGH)){
digitalWrite(salida_ignicion,HIGH);
}
}
while(salida_ignicion,LOW){
if ((estado =='B')or(boton_marcha,HIGH)){
digitalWrite(salida_marcha,LOW);
}
if((estado=='b')or(boton_marcha,LOW)){
digitalWrite(salida_marcha,HIGH);
}
}
while((salida_luces_bajas,HIGH)and(salida_luces_altas,HIGH)){
if ((estado =='E')or(boton_luces,HIGH)){
digitalWrite(salida_luces_bajas,LOW);
}
}
while((salida_luces_bajas,LOW)and(salida_luces_altas,HIGH)){
if((estado=='F')or(boton_luces,HIGH)){
digitalWrite(salida_luces_bajas,HIGH);
digitalWrite(salida_luces_altas,LOW);
}
}
while((salida_luces_bajas,HIGH)and(salida_luces_altas,LOW)){
if(estado=='f'){
digitalWrite(salida_luces_altas,HIGH);
}
}
if ((estado =='G')or(boton_luces_aux,HIGH)){
digitalWrite(salida_luces_aux1,LOW);
digitalWrite(salida_luces_aux2,LOW);
}
if((estado=='g')or(boton_luces_aux,HIGH)){
digitalWrite(salida_luces_aux1,HIGH);
digitalWrite(salida_luces_aux2,HIGH);
}
if ((estado =='C')or(boton_dir_izq,HIGH)){
for(int i = 0; i<10; i++) ///enciende y apaga la dir izquierda 10 veces
digitalWrite(salida_dir_izq,LOW);
delay(1500);
digitalWrite(salida_dir_izq,HIGH);
delay(1500);
}
if(estado=='c'){
digitalWrite(salida_dir_izq,HIGH);
}
if ((estado =='D')or(boton_dir_der,HIGH)){
for(int d = 0; d<10; d++) ///enciende y apaga la dir derecha 10 veces
digitalWrite(salida_dir_der,LOW);
delay(1500);
digitalWrite(salida_dir_der,HIGH);
delay(1500);
}
if(estado=='d'){
digitalWrite(salida_dir_der,HIGH);
}
while(salida_wiper,LOW){
if ((estado =='H')or(boton_wiper,HIGH)){
digitalWrite(salida_wiper,LOW);
}
}
while(salida_wiper,HIGH){
if((estado=='h')or(boton_wiper,HIGH)){
digitalWrite(salida_wiper,HIGH);
}
}
while(salida_bomba_agua,LOW){
if (estado =='I'){
digitalWrite(salida_bomba_agua,LOW);
delay(3000);
digitalWrite(salida_bomba_agua,HIGH);
}
}
while(salida_bomba_agua,HIGH){
if (estado =='i'){
digitalWrite(salida_bomba_agua,HIGH);
}
}
}