No soy hablante nativo de inglés, así que perdona mis males.
Ok. Aquí está el trato.
En mi Arduino UNO necesito más salidas y entradas. Compré 3 MCP23017s. Uno de ellos para recibir estados desde 8 microinterruptores y otro para controlar 32 LEDs. Los estados de los LED dependen de qué microinterruptor se presiona realmente (solo uno de ellos se pudo empujar a tiempo). Por ejemplo: Cuando presiono el botón B (0x20 mcp23017s) en 0 pin, todo lo que quiero hacer es enviar 10101010 a 0x21s bloque A. Y funciona solo para un botón. Cuando conecto el segundo botón, quiero enviar 10101010 a 0x21s bloque B. Y hay problema. No funciona Para un botón todo está bien, pero para más de uno no lo está. No importa si presiono el primer o segundo botón, siempre envía 10101010 a 0x21s A block. Solo envía el bloque 10101010 a 0x21s B, cuando presiono 2 botones al mismo tiempo, pero también envía bytes al bloque A ...
El hardware está bien, porque lo revisé en busca de un botón y todo funcionaba bien, por lo que el problema debe estar oculto en el software.
Sé que no puedes obtener lo que quiero decir, así que aquí está el código:
#include "Wire.h"
byte buttons = B00000000;
void setup()
{
Wire.begin();
Wire.beginTransmission(0x21);
Wire.write(0x00);
Wire.write(0x00);
Wire.endTransmission();
Wire.beginTransmission(0x21);
Wire.write(0x01);
Wire.write(0x00);
Wire.endTransmission();
// To set all of 0x21 pins as outputs
Wire.beginTransmission(0x20);
Wire.write(0x00);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(0x20);
Wire.write(0x01);
Wire.write(0x00);
Wire.endTransmission();
// To set all of 0x20 pins as button inputs
}
void loop()
{
buttons = B00000000;
Wire.beginTransmission(0x20);
Wire.write(0x13);
Wire.endTransmission();
Wire.requestFrom(0x20, 1);
buttons = Wire.read();
switch(buttons)
{
case B00000001:
// A block
Wire.beginTransmission(0x21);
Wire.write(0x12);
Wire.write(B01010101);
Wire.endTransmission();
break;
case B00000010:
// B block
Wire.beginTransmission(0x21);
Wire.write(0x13);
Wire.write(B01010101);
Wire.endTransmission();
break;
default:
// A block
Wire.beginTransmission(0x21);
Wire.write(0x12);
Wire.write(B10101010);
Wire.endTransmission();
// B block
Wire.beginTransmission(0x21);
Wire.write(0x13);
Wire.write(B10101010);
Wire.endTransmission();
break;
}
delay(20);
}
Necesito esto en mi proyecto, que es muy importante para mí, así que ayúdame. ¡Gracias!