HHola, estoy realizando una especie de Simón dice, en el cual, en lugar de sacar la máquina de manera aleatoria el ultimo color, es el usuario el que lo añade.
Tengo una ESP8266 para ejecutar el programa y un arduino (en un futuro dos) como mando, es el que tiene los botones y los leds. Estoy utilizando la librería de Wire.h para la comunicación de las placas con el protocolo I2C.
El problema es que no consigo hacerlo funcionar correctamente y no se donde esta el error. Consigo que la esp mande la petición al arduino pero no que este mande la respuesta a tiempo. He probado a poner un while en la esp después de la llamada para asegurarme que el valor que me llega sea distinto de nulo, es decir, que el arduino manda algo, pero me salta una excepción.
La parte del codigo de la esp es:
bool newGame () {
char c = 'N';
Wire.requestFrom(I2CAddressESPWifi, 1);
delay(1);
while ( Wire.available()) {
Serial.println("dentro request");
c = Wire.read();
Serial.print(c);
}
colores = c;
tam = 1;
return true;
}
El del arduino:
void espWifiRequestEvent() {
//while (Wire.available() and buttonState == false) {
bool pulsado = false;
bool rojo = false, amarillo = false, verde = false, azul = false;
while (pulsado == false) {
if (buttonState = digitalRead(buttonRojo) == true) {
pulsado = true;
rojo = true;
}
// El resto de colores son iguales
}
if (rojo == true) { // Si se presiona
Wire.write('R'); // 1 es el rojo
digitalWrite(ledRojo, HIGH); // Encendemos el led rojo
delay(70000);
digitalWrite(ledRojo, LOW);
Serial.print("rojo");
}
// El resto de colores son iguales
}