Comunicacion serial bidireccional entre 2 arduinos

He conectado 2 arduinos mediante los pines rx/tx y los he programado para que el arduino UNO mande la señal al arduino nano (la señal se envia cuando se presiona el boton 1 del keypad) para que encienda un led y funcionó, luego traté que una vez que el arduino nano prendiera el led le mandara de vuelta una señal el arduino UNO para que prenda un led, y esa parte no funcionó.
les dejo el codigo para que me colaboren a solucionarlo.

                 //codigo del arduino UNO:
#include <Keypad.h>

byte filas[] = {5,4,3,2};
byte columnas[] = {13,12,11,10};

char teclas[4][4] = {
  {'7','8','9','/'},
  {'4','5','6','*'},
  {'1','2','3','-'},
  {'C','0','=','+'}
};

Keypad teclado = Keypad(makeKeymap(teclas),filas,columnas,4,4);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(7,OUTPUT);
}

void loop() {
  char tecla_presionada = teclado.getKey();
  if(tecla_presionada){
    Serial.println(tecla_presionada);
  }
  if(Serial.available()){   
      delay(1000);
    digitalWrite(7, HIGH);  
  }
}
             //codigo del arduino NANO:
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
pinMode(2, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    //char dato = Serial.read();
    // if(Serial.read() == '1') {
    digitalWrite(2, HIGH);
    delay(1000);
    Serial.println("listo");
  //}
 }
 
}

GRACIAS

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

No miré el código, pero ¿conectaste el GND también?
EDIT: nunca lees lo que se esta enviando ..

Hice el montaje en proteus, el pin gnd del arduino NANO no esta habilitado

El programa funciona pero la simulación en proteus no corre en tiempo real.

Si estás usando un terminal virtual conectado entonces la simulación no funciona.

Debes tener en cuenta que las señales TX/RX del UNO al NANO deben estar cruzadas: tx-uno a rx-nano, rx-uno a tx-nano.

Otro detalle es que si tienes que tener cuidado con la actualización del programa. Si tienes abiertos dos instancias del IDE, el archivo .hex estará en ubicaciones temporales y puede que te de dolores de cabeza.

He usado este esquema:

Y he modificado en el código la parte del keypad para que coincida con el mio. El resto es igual.

Lo que ocurre:

  • Al pulsar una tecla en el keypad el nano enciende el led y empieza a mandar listo continuamente (no se vacia el búfer por lo que available() siempre es cierto).
  • Si pongo un terminal virtual conectado al uno, usando los dos pines TX/RX no funciona la comunicación desde el nano. Poniendo solo la señal en RX en el pin que quiero ver funciona.
  • Al estar usando dos instancias de microcontrolador, el uso de CPU se va al 100% y dependiendo del computador la simulación se hace mas lenta, con lo que la respuesta tarda mucho en mostrarse en el UNO.

GND necesita estar conectado. esto no es obvio en el esquema si lo son.

En proteus el GND siempre esta disponible para todos los módulos Arduinos.
De igual modo no hace falta alimentar con 5V.
Los .hex quedan en carpetas diferentes, no es posible que generen dolor de cabeza.
Y en particular estos módulos que muestra @victorjam mantienen la ruta usada asi que si los IDE permanecen abiertos os archivos temporales no se pierden y uno estara en una carpeta UNO y el otro en una carpeta NANO

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.