Conexión entre dos hc-05 intento de control para manejar un coche rc

Tengo 2 HC-05 conectados entre si, uno esclavo que es el del coche y el otro el maestro.

El código del coche se activa con letras pero lo que no se es como enviarlas con el maestro.
Aquí los codigos:
coche RC

/*

  • Created by Vasilakis Michalis // 12-12-2014 ver.2
  • Project: Control RC Car via Bluetooth with Android Smartphone
  • More information at www.ardumotive.com
    /
    // Importamos las librerias necesarias de la pantalla
    #include <Wire.h>
    #include <LCD.h>
    #include <LiquidCrystal_I2C.h> // F Malpartida’s NewLiquidCrystal library
    /
    -----( Declare Constants )-----/
    #define I2C_ADDR 0x20 // Direccion I2C para PCF8574A que es el que lleva nuestra placa diseñada por MJKDZ
    //definimos las constantes para esta placa
    //mjkdz i2c LCD board
    // addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
    LiquidCrystal_I2C lcd(I2C_ADDR, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);
    #define LED_OFF 0
    #define LED_ON 1
    //L293 Connection
    const int motorA1 = 5; // Pin 2 of L293
    const int motorA2 = 6; // Pin 7 of L293
    const int motorB1 = 10; // Pin 10 of L293
    const int motorB2 = 9; // Pin 14 of L293
    //Leds connected to Arduino UNO Pin 12
    const int lights = 12;
    //Buzzer / Speaker to Arduino UNO Pin 3
    const int buzzer = 3 ;
    //Bluetooth (HC-06 JY-MCU) State pin on pin 2 of Arduino
    const int BTState = 2;
    //Calculate Battery Level
    const float maxBattery = 8.0;// Change value to your max battery voltage level!
    int perVolt; // Percentage variable
    float voltage = 0.0; // Read battery voltage
    int level;
    // Use it to make a delay… without delay() function!
    long previousMillis = -1000
    10;// -100010=-10sec. to read the first value. If you use 0 then you will take the first value after 10sec.
    long interval = 1000
    10; // interval at which to read battery voltage, change it if you want! (10*1000=10sec)
    unsigned long currentMillis; //unsigned long currentMillis;
    //Useful Variables
    int i=0;
    int j=0;
    int state;
    int vSpeed=200; // Default speed, from 0 to 255

void setup() {
// Set pins as outputs:
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(lights, OUTPUT);
pinMode(BTState, INPUT);
// Initialize serial communication at 9600 bits per second:
Serial.begin(9600);
lcd.begin (16,2); // inicializar lcd
// Activamos la retroiluminacion
lcd.setBacklight(LED_ON);
}

void loop() {
//Stop car when connection lost or bluetooth disconnected
if(digitalRead(BTState)==LOW) { state=‘S’; }

//Save income data to variable ‘state’
if(Serial.available() > 0){
state = Serial.read();
}

//Change speed if state is equal from 0 to 4. Values must be from 0 to 255 (PWM)
if (state == ‘0’){
vSpeed=0;}
else if (state == ‘1’){
vSpeed=100;}
else if (state == ‘2’){
vSpeed=180;}
else if (state == ‘3’){
vSpeed=200;}
else if (state == ‘4’){
vSpeed=255;}

/Forward*****/
//If state is equal with letter ‘F’, car will go forward!
if (state == ‘F’) {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
/Forward Left**/
//If state is equal with letter ‘G’, car will go forward left
else if (state == ‘G’) {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
analogWrite(motorB1, 200); analogWrite(motorB2, 0);
}
/Forward Right**/
//If state is equal with letter ‘I’, car will go forward right
else if (state == ‘I’) {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 200);
}
/Backward*****/
//If state is equal with letter ‘B’, car will go backward
else if (state == ‘B’) {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
/Backward Left**/
//If state is equal with letter ‘H’, car will go backward left
else if (state == ‘H’) {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 200); analogWrite(motorB2, 0);
}
/Backward Right**/
//If state is equal with letter ‘J’, car will go backward right
else if (state == ‘J’) {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, 200);
}
/Left**/
//If state is equal with letter ‘L’, wheels will turn left
else if (state == ‘L’) {
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, 200); analogWrite(motorB2, 0);
}
/Right**/
//If state is equal with letter ‘R’, wheels will turn right
else if (state == ‘R’) {
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 200);
}
/Lights*****/
//If state is equal with letter ‘W’, turn leds on or of off
else if (state == ‘W’) {
if (i==0){
digitalWrite(lights, HIGH);
i=1;
}
else if (i==1){
digitalWrite(lights, LOW);
i=0;
}
state=‘n’;
}
/Forward*****/
//pantalla cosa 1 ‘X’
if (state == ‘X’) {
lcd.clear();
lcd.setBacklight(LED_OFF);//Backlight OFF
delay(500);

lcd.backlight(); //Backlight ON
lcd.setCursor(0,0);
lcd.print(“Dalas Review”);
lcd.setCursor(0,1);
lcd.print(“Mini”);
delay(2000);
}
/Horn sound*****/
//If state is equal with letter ‘V’, play (or stop) horn sound
else if (state == ‘V’){
if (j==0){
tone(buzzer, 1000);//Speaker on
j=1;
}
else if (j==1){
noTone(buzzer); //Speaker off
j=0;
}
state=‘n’;
}
/Stop*****/
//If state is equal with letter ‘S’, stop the car
else if (state == ‘S’){
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
/Battery******/
//Read battery voltage every 10sec.
currentMillis = millis();
if(currentMillis - (previousMillis) > (interval)) {
previousMillis = currentMillis;
//Read voltage from analog pin A0 and make calibration:
voltage = (analogRead(A0)*5.015 / 1024.0)11.132;
//Calculate percentage…
perVolt = (voltage
100)/ maxBattery;
if (perVolt<=75) { level=0; }
else if (perVolt>75 && perVolt<=80) { level=1; } // Battery level
else if (perVolt>80 && perVolt<=85) { level=2; } //Min ------------------------ Max
else if (perVolt>85 && perVolt<=90) { level=3; } // | 0 | 1 | 2 | 3 | 4 | 5 | >
else if (perVolt>90 && perVolt<=95) { level=4; } // ------------------------
else if (perVolt>95) { level=5; }
Serial.println(level);
}

}

y el del maestro que no se como funciona:

#include <SoftwareSerial.h>

// se define al Pin2 como RX, Pin3 como TX
SoftwareSerial mySerial(0,1);// RX,TX

void setup()
{//inicializa la comunicación serial
Serial.begin(9600);
}
void loop()
{
mySerial.write(‘f’);
delay(2000);
mySerial.write(‘g’);
delay(2000);
}

Lo que quiero es ponerlo con botones, pero intente probar a ver si arrancaba el motor pero no hace nada.
con el móvil probé el codigo del coche y funciona bien, el blutu esta puesto:
RXD BLUTU= TX1
TXD BLUTU= RX0
A ver si alguien puede ayudarme ya que soy un novato. Saludos!!!

Hola, hay varias cosas que veo a primera vista, en el codigo del maestro incluyes muy bien la linea:

#include <SoftwareSerial.h>

pero mas tarde solo inicias el serial (el USB de tu arduino)

void setup()
{//inicializa la comunicación serial
Serial.begin(9600);
}

debes iniciar asi:

void setup()
{//inicializa la comunicación serial
mySerial.begin(9600);
}

porque lo nombraste asi aqui:

SoftwareSerial mySerial(0,1);// RX,TX

en el codigo del coche no has incluido ningun código para manejar el bluetooth, te falta incluir igual que en el maestro:

#include <SoftwareSerial.h>
SoftwareSerial mySerial(0,1);// RX,TX

e iniciarlo en void setup() como antes.

Espero ayudarle. :slight_smile:

PD: Seria bueno si modificara su post, incluyó el código con los tags de Quote, se lee mejor si usa los tags para Código, </>. :slight_smile:

_Gromek:
Hola, hay varias cosas que veo a primera vista, en el codigo del maestro incluyes muy bien la linea:

#include <SoftwareSerial.h>

pero mas tarde solo inicias el serial (el USB de tu arduino)

void setup()

{//inicializa la comunicación serial
Serial.begin(9600);
}



debes iniciar asi:


void setup()
{//inicializa la comunicación serial
mySerial.begin(9600);
}



porque lo nombraste asi aqui:


SoftwareSerial mySerial(0,1);// RX,TX



en el codigo del coche no has incluido ningun código para manejar el bluetooth, te falta incluir igual que en el maestro:


#include <SoftwareSerial.h>
SoftwareSerial mySerial(0,1);// RX,TX



e iniciarlo en void setup() como antes.

Espero ayudarle. :)

PD: Seria bueno si modificara su post, incluyó el código con los tags de Quote, se lee mejor si usa los tags para Código, </>. :)

Te explico es que el primero es un proyecto que saque de internet, mi conocimiento de programacíón no llega a un gran nivel, si especifique en el maestro, porque en el esclavo lee las letras que envía el móvil.

Por lo cual pensé que a lo mejor tenía que estar nombrado las salidas del blutu.
Lo que yo quería era poner es que por ejemplo si toco el joystick envíe una letra:

int angulo = 0 ;
int Eje_X = A1 ;
int Eje_Y = A2 ;
int boton = 4 , LED = 12 ;

void setup()
{
pinMode( boton, INPUT_PULLUP) ;
}

void loop()
{
angulo = map( analogRead(A1), 0, 1024, 0, 180);
servo1.write(angulo);
if ( ! digitalRead(boton))
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
delay(250) ;
}

lik de este código= http://www.prometec.net/joystick-servo/
Pero en vez que gire un servo o encienda un led, quiero que envie la letra, ya que tengo entendido que es como funciona mi código del coche.

Hay muchas cosas mal planteadas.
Si usas

SoftwareSerial mySerial(0,1);// RX,TX

no debes elegir los pines 0 y 1 que justamente son Hardware

En el código del master esta comentado justamente usar 2 y 3 que son los que debiste usar.
Luego cuando todo esta terminado y no tienes nada que ver por monitor serie entonces lo conectas directamente a 0 y 1 y no usas SoftwareSerial.
SoftwareSerial es para crear un puerto serie cuando no lo tienes como pasa con el UNO/Nano/Mini Pro y otros.

#include <SoftwareSerial.h>
  
// se define al Pin2 como RX, Pin3 como TX
SoftwareSerial mySerial(3,4);// RX,TX
  
void setup()
{//inicializa la comunicación serial
   Serial.begin(9600); // este se usará para ver en el monitor serie
   mySrial.begin(9600); // este se usa para conectar el BT a 3 y 4
}
void loop() {
   mySerial.write('f');
   Serial.println('f');
   delay(2000);
   mySerial.write('g');
   Serial.pirntln('g');
   delay(2000);
}

Luego el receptor espera datos que tu Master no esta enviando.
Espera velocidad de 0 a 4 para cambiar de velocidades.
Espera valores en mayúsculas

// If state is equal with letter 'F', car will go forward!
// If state is equal with letter 'G', car will go forward left
// If state is equal with letter 'I', car will go forward right
// If state is equal with letter 'B', car will go backward
// If state is equal with letter 'H', car will go backward left
// If state is equal with letter 'J', car will go backward right
// If state is equal with letter 'L', wheels will turn left
// If state is equal with letter 'R', wheels will turn right
// If state is equal with letter 'W', turn leds on or of off
// If state is equal with letter 'V', play (or stop) horn sound
// If state is equal with letter 'S', stop the car

Ahi tiens los comandos
F hacia adelante
G hacia la izquierda
I hacia la derecha
B hacia atras
H hacia atras y a la izquierda
L ruedas giran a la izquierda
R ruedas giran a la derecha
W prende/apaga los leds
V enciende/apaga una sirena o buzzer
S detiene el coche

Todo eso debe implementarse en el Master.

f y g minúsculas no hacen nada.