Go Down

Topic: Comunicación Serial entre arduinos más bluetooth (Read 385 times) previous topic - next topic

tebi_rg

Nov 30, 2018, 02:35 pm Last Edit: Dec 03, 2018, 09:23 am by tebi_rg
Hola,

estoy creando un proyecto para iluminar una tabla con 198 leds. Mi idea es la de realizarlo a través del bluetooth  HC-06. Este comunicará con un arduino maestro que tendrá 4 esclavos, que a su vez con dos MUX cada esclavo iluminarán su led según el código introducido desde la app movil.

El problema:

Estoy probando con un maestro y un esclavo (A pequeña escala). El bluetooth envía correctamente los datos al maestro pero el maestro no logra enviar dichos datos al arduino esclavo para que este encienda sus led.

Muestro el código de maestro:

Code: [Select]

#include <SoftwareSerial.h>

SoftwareSerial hc06(2,3);   //Tx D2 y Rx D3
SoftwareSerial ardu1(10,11);  // Tx Rx


String cmd="";

void setup(){
  
//Initialize Serial Monitor
  Serial.begin(4800);
//Initialize Bluetooth Serial Port
  hc06.begin(9600);
//Comunicacion Ardu_1
 ardu1.begin(2400);
 pinMode(4,OUTPUT);
}

void loop(){
  hc06.listen();
  //Read data from HC06
  while(hc06.available()>0){
    cmd+=(char)hc06.read();
  }

  //Select function with cmd
  if(cmd!=""){
    Serial.print("Command recieved : ");
    Serial.println(cmd);
    ardu1.listen();
    
    if(cmd=="a1"){
      Serial.println("Enciende A1");
        ardu1.write("a1"); // También he probado con ardu1.print
 
    }else if(cmd=="a2"){
      Serial.print("Enciende A2");
       ardu1.write("a2");
    }
    
    cmd=""; //reset cmd
  }
  delay(100);
}


Código del esclavo:
Code: [Select]

#include <SoftwareSerial.h>

SoftwareSerial master(2,3);   //Tx D2 y Rx D3

String cmd="";

void setup(){
  
//Initialize Serial Monitor
  Serial.begin(4800);
//Initialize Bluetooth Serial Port
  master.begin(2400);
  pinMode(15,OUTPUT);
  pinMode(16,OUTPUT);
}

void loop(){
  master.listen();
  
  //Read data from HC06
  
  while(master.available()>0){
    Serial.println(master.read());
    cmd+=(char)master.read();
  }

  //Select function with cmd
  if(cmd!=""){
    
    if(cmd=="a1"){
      digitalWrite(15,HIGH);
    }else if(cmd=="a2"){
      digitalWrite(16,HIGH);
    }else{
      digitalWrite(15,LOW);
      digitalWrite(16,LOW);
    }
    
    cmd=""; //reset cmd
  }
  delay(100);
}


Y ahora unas imágenes de las conexiones aunque no se aprecian muy bien:



y un esquema de los que pretendo:



No veo que error estoy cometiendo para no poder comunicar entre arduinos.

Muchas gracias a todos, espero haber posteado correctamente, es mi primera vez.

surbyte

Porque usas dos SoftwareSerial en el maestro?
Porque no usas el HardwareSerial y eliminas los msg de impresion en el monitor Serie ?

tebi_rg

#2
Dec 03, 2018, 09:40 am Last Edit: Dec 03, 2018, 09:44 am by tebi_rg
Ante todo es mi primera experiencia con arduino disculpad mi ignorancia.

Como se ve en el esquema general el maestro deberá comunicarse con el bluetooth y cuatro arduinos más.
En esta prueba quiero ver que realmente puedo comunicarme con pines digitales y mas de un softwareSerial. La idea inicial es:

- HardwareSerial para el bluetooth
- 4 SoftwareSerial para cada uno de los arduino esclavos.

Entiendo que hardwareSerial son los especificos de TR y RX de la placa:

¿podría por ejemplo enviar desde el maestro una misma señal del Tx a los Rx de los diferentes esclavos? o ¿Que el bluetooth envie desde su Tx la señal a los Rx de cuatro arduinos? Así me evitaría la función de recepción en el maestro.

Adjunto foto de la tabla a iluminar: (Se llama moonboard, es para escalada)





Muchas gracias.

surbyte

#3
Dec 03, 2018, 01:56 pm Last Edit: Dec 03, 2018, 02:02 pm by surbyte
Quote
- 4 SoftwareSerial para cada uno de los arduino esclavos.
El único que puede hacer eso es un MEGA y no con SoftwareSerial sino con los 4 puertos Serie que tiene.
Nunca he visto una aplicación donde un MEGA use un SoftwareSerial ademas de sus 4 puertos y eso es por algo.

Debes reconsiderar todo porque hay soluciones pero no de este modo.
Tampoco he visto en los ultimos 4 años un proyecto con 4 softwareSerial funcionando.
Ya hay problema con 2 imagina con 3 o 4.

Soluciones posibles:

Alternativa 1
Por lo que veo usas NANOs y lo mejor sería que uses modulos RS485 para comunicarte como éste.




Colocas 1 en cada NANO y otro en el Master, con esto no tendrás limitación hasta 254 módulos (depende del chip MAX que use).

Claro que la comunicación cambiará levemente (lo estoy simplificando) pero no vas a tener problemas.

Busca : Arduino 485 o Arduino RS485 y verás muchos tutoriales de como enviarle información a tus esclavos.

Entonces si, podras usar ademas la comunicación BT con SoftwareSerial en el Master.

Alternativa 2

Si tienes un MEGA habría que probar conectando los 4 NANOs a cada uno de sus puertos y ver si es posible usar SoftwareSerial para el BT.

tebi_rg

Muchísimas gracias. Miraré la información que comentas sobre el RS485 del cual no sabía nada. Lo dicho, gracias por tu ayuda y la del foro, felicitaciones por la gran labor que hacéis.

Go Up