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