Arduino nano + hc-05 + hc12

Buenas tardes, necesito ayuda, no me funciona bien la comunicación serie de los módulos hc12.

tanto en el receptor como emisor ya tengo los mismos parámetros en cuanto a comandos AT. en realidad son lo de por defecto, pero aun así los he revisado en los dos.

En el nano con el hc12 emisor lo tengo conectado a los pines 10 11 uso la librería SoftwareSerial,
uso el comando Serial.print ("a"); para mandarlo por el hc12.

//para uso en arduino nano//
//modulo maestro//

//para cajoneras 2.0 o para modulos individuales
//este sketh es para modulo maestro y 8 reles pines 2 a 9
//tambien tiene habilitada 4 pines de entrada pulsador 12 a 13 (ojo este ultimo es con led)
//puerto serie 2 en pines rx 10 y tx 11

//variables
//A off pin 2 compresor
//B off pin 3 CONVERTIDOR
//C off pin 4 USB
//D off pin 5 NEVERA
//E off pin 6 LUZ INTERIOR
//F off pin 7 LUZ TRASERA
//G off pin 8 AGUA
//H off pin 9 CALENTADOR

//a on pin 2
//b on pin 3
//c on pin 4
//d on pin 5
//e on pin 6
//f on pin 7
//g on pin 8
//h on pin 9
//z todo off

///
#include <SoftwareSerial.h>

SoftwareSerial serial2(10, 11);  //10RX 11TX
int button1 = 0;
int button2 = 0;
int estadoluz = 0;
int estadoagua = 0;
void setup()
{
 
    
//pines reles
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
pinMode(3,OUTPUT);
digitalWrite(3,HIGH);
pinMode(4,OUTPUT);
digitalWrite(4,HIGH);
pinMode(5,OUTPUT);
digitalWrite(5,HIGH);
pinMode(6,OUTPUT);
digitalWrite(6,HIGH);
pinMode(7,OUTPUT);
digitalWrite(7,HIGH);
pinMode(8,OUTPUT);
digitalWrite(8,HIGH);
pinMode(9,OUTPUT);
digitalWrite(9,HIGH);

//pines entrada


pinMode(12,INPUT);

pinMode(13,INPUT);


// BLUETOOTH
    Serial.begin(9600);
// HC-12    
    serial2.begin(9600);
 }
void loop() 
{ 
 
 button1 = digitalRead(12);
 button2 = digitalRead(13);
 if (button1 == 1) { 
  if (estadoluz == 1) { digitalWrite(6,HIGH); estadoluz = 0;
 } else { digitalWrite(6,LOW); estadoluz = 1;
  }
   
 }

 if (button2 == 1) { 
  if (estadoagua == 1) { digitalWrite(8,HIGH); estadoagua = 0;
 } else { digitalWrite(8,LOW); estadoagua = 1;
  }
   
 }
 
 char c = Serial.read(); 
 if (c == 'A') { digitalWrite(2,HIGH); serial2.print('b');
 }
 if (c == 'B') { digitalWrite(3,HIGH);
}
  
 if (c == 'C') { digitalWrite(4,HIGH); 
}
 if (c == 'D') { digitalWrite(5,HIGH); 
}
 if (c == 'E') {digitalWrite(6,HIGH);
} 
 if (c == 'F') { digitalWrite(7,HIGH);
} 
 if (c == 'G') { digitalWrite(8,HIGH); 
}
 if (c == 'H') { digitalWrite(9,HIGH); 
 }

 if (c == 'I') {serial2.print(2);}
 
 if (c == 'J') {serial2.print("J");
 }
 if (c == 'K') {serial2.print("K");
 } 
 if (c == 'L') {serial2.print("L");
 } 
 if (c == 'M') {serial2.print("M");
 } 
 if (c == 'N') {serial2.print("N");
 } 
 if (c == 'O') {serial2.print("O");
 } 
 if (c == 'P') {serial2.print("P");
 }  
 if (c == 'Q') {serial2.print("Q");
 } 
  
 if (c == 'R') {serial2.print("R");
 } 
  
 if (c == 'S') {serial2.print("S");}
 if (c == 'T') {serial2.print("T");}
 if (c == 'U') {serial2.print("U");} 
 
 
 if (c == 'V') {serial2.print("V");} 
 
 if (c == 'W') {serial2.print("W");}
 
 if (c == 'X') {serial2.print("X");}
 
 if (c == 'Y') {serial2.print("Y");}
 
 
 
 
 
 
 if (c == 'a') { digitalWrite(2,LOW); serial2.print("a");
 } 
 if (c == 'b') { digitalWrite(3,LOW);
} 
 if (c == 'c') { digitalWrite(4,LOW); 
}
 if (c == 'd') { digitalWrite(5,LOW);
} 
 if (c == 'e') { digitalWrite(6,LOW);
}  
 if (c == 'f') { digitalWrite(7,LOW);
} 
 if (c == 'g') { digitalWrite(8,LOW);
}  
 if (c == 'h') { digitalWrite(9,LOW);
}  
 if (c == 'i') {serial2.print(1);}
 if (c == 'j') {serial2.print("j");}
 if (c == 'k') {serial2.print("k");}
 if (c == 'l') {serial2.print("l");}
 if (c == 'm') {serial2.print("m");}
 
 if (c == 'n') {serial2.print("n");} 
 if (c == 'o') {serial2.print("o");} 
 
 if (c == 'p') {serial2.print("p");}
 if (c == 'q') {serial2.print("q");}
   
 if (c == 'r') {serial2.print("r");}
 
 if (c == 's') {serial2.print("s");}
 if (c == 't') {serial2.print("t");} 
 if (c == 'u') {serial2.print("u");} 
 
 
 if (c == 'v')  {serial2.print("v");}
 
 if (c == 'w') {serial2.print("w");}
 
 if (c == 'x') {serial2.print("x");}
 
 if (c == 'y') {serial2.print("y");} 
 
 
 
 if (c == 'z') {digitalWrite(2,HIGH),
               digitalWrite(3,HIGH),
               digitalWrite(4,HIGH),
               digitalWrite(5,HIGH),
               digitalWrite(6,HIGH),
               digitalWrite(7,HIGH),
               digitalWrite(8,HIGH),
               digitalWrite(9,HIGH),
               serial2.print("z");
                   
 }
 



//delay(1000); 
}

el receptor, en este caso el nano tiene conectado el modulo hc12 directamente en rx y tx, uso un chard c = serial.read para leer el puerto serie. Luego uso if para comparar el resultado y activar el pin 13.

void setup()
{
    Serial.begin(9600);  // Debugging only
  
    
    pinMode(13, OUTPUT);    //Configuramos el pin del Led como entrada
    digitalWrite(13, false);
}

void loop()
{
    uint8_t dato;
    uint8_t datoleng=1;
    //verificamos si hay un dato valido en el RF
    dato = Serial.read();
        if((char)dato=='a')
        {
            digitalWrite(13, true); //Encendemos el Led
        }
        else if((char)dato=='b')
        {
            digitalWrite(13, false); //Apagamos el Led
        }            
    }

Problema: si veo parpadear el rx del receptor pero no activa el led.

No se si ando haciendo algo mal con este modulo o que.

Pregunta, indvidualmente has chequeado que cuando le preguntas algo al HC12 este contesta en cada micro? Digo esto porque tal vez tengas invertidos los cables RX y TX.

Pregunta, indvidualmente has chequeado que cuando le preguntas algo a cada HC12, éste contesta en cada micro? Digo esto porque tal vez tengas invertidos los cables RX y TX.

Prueba con esto en uno y luego en el otro

#include <SoftwareSerial.h>

SoftwareSerial serial2(10, 11);  //10RX 11TX

void setup()
{
// BLUETOOTH
    Serial.begin(9600);
// HC-12   
    serial2.begin(9600);
 }

void loop() {
  if (Serial.available() > 0) {  // aca envias por BT y lees tu teclado del monitor Serie.
      char val = Serial.Read();
      serial2.print(val);
  }

  if (serial2.available() > 0) {  // aca recibes y muestras en pantalla del IDE
      char val1 = serial2.Read();
      Serial.print(val1);            // lo recibido por el BT se verá en el Monitor Serie.
  }

}

esto debe funcionar en ambos individualmente, no emitiendo y recibiendo, okay?

Si envias AT
debes recibir un OK
prueba en los dos, si no lo recibes invierte cables RX y TX de SoftwareSerial.

ok muchas gracias lo reviso, aunque el rx y tx lo he revisado pero me parece bien darle otro tiento mas.

No hablo solo de revisar las conexiones, hablo de hacerlo asegurándote de que recibes respuestas de los HC12
Si no recibes respuestas, lo que has puesto antes no tiene sentido.

Ahora vi un par de cosas que no me gustan.

el receptor, en este caso el nano tiene conectado el modulo hc12 directamente en rx y tx, uso un chard c = serial.read para leer el puerto serie. Luego uso if para comparar el resultado y activar el pin 13.

Esto en principio te quita la posibilidad de saber que esta trabajando bien o mal. Déja esto para cuando estes seguro y usa tmb SoftwareSerial mientras tanto.
Además el código al menos está incompleto.

void setup()
{
    Serial.begin(9600);  // Debugging only
 
   
    pinMode(13, OUTPUT);    //Configuramos el pin del Led como entrada
    digitalWrite(13, false);
}

void loop()
{
    uint8_t dato;
    uint8_t datoleng=1;
    //verificamos si hay un dato valido en el RF
    if (Serial.available() > 0) { // nunca olvides usar esto
        dato = Serial.read();
        if((char)dato=='a')
        {
            digitalWrite(13, true); //Encendemos el Led
        }
        else if((char)dato=='b')
        {
            digitalWrite(13, false); //Apagamos el Led
        } 
    }          
}

Ahora reemplaza Serial por un mySerial por ejemplo definido con SoftwareSerial del mismo modo que en el emisor.

ando ahora mismo con ello, lo reviso y os digo que tal.