martes, 7 de enero de 2020

Control de 8 salidas mediante comunicación serie. Parte 1-directamente-

El objetivo va a ser comunicar dos Arduinos para que se conecten entre ellos mediante comunicación serie. De momento la comunicación directa USB va perfecta y tengo problemas en la comunicación entre los dos Arduinos.
Como voy a utilizar indistintamente unos y leonardos voy a utilizar para la RX la E/S 11 Y para la TX la E/S 2.
Para las salidas utilizaré las E/S desde la 3 hasta la 10.

Diseño en tinkercad que funciona utilizando la conexión serie: https://www.tinkercad.com/things/goZkgRKK088

Código:

/*
   Comandos:
    s: estado ->devuelve un byte con el estado de cada led
    e:  encender  -> enciende el bit correspondiente al número
    a:  apagar  ->apaga el bit correspondiente...
   en la próxima version haré un
    aa: apagar todos
*/
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  while (!Serial);
  for (byte i = 0; i < 8; i++)
    pinMode(i + 3, OUTPUT);
  apagatodo();//lo voy a hacer ya para apagar todo al comienzo
}
void apagatodo() {
  byte i;
  for (i = 0; i < 8; i++)
    digitalWrite(i + 3, LOW);
}
void enviaestado() {
  byte estado, i;
  for (i = 0; i < 8; i++)
    bitWrite(estado, i, digitalRead(i + 3));
  Serial.print("S");
  Serial.println(estado, HEX);
  Serial.flush();
}
void loop() {
  char comando, numero;
  // put your main code here, to run repeatedly:
  while (!Serial.available());
  comando = Serial.read();
  if (comando == 's' || comando == 'S')
    enviaestado();
  else if (comando == 'a' || comando == 'A') {
    while (!Serial.available());
    numero = Serial.read();
    if (numero == 'a' || numero == 'A')
      apagatodo();
    else if (numero >= '0' && numero <= '9')
      digitalWrite(3 + numero - '0', LOW);
    enviaestado();
  }
  else if (comando == 'e' || comando == 'E') {
    while (!Serial.available());
    numero = Serial.read();
    if (numero >= '0' && numero <= '9')
      digitalWrite(3 + numero - '0', HIGH);
    enviaestado();
  }
}

No hay comentarios:

Publicar un comentario