[SOLUCIONADO] Duda con libreria Wire.h

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
}

Segun que arduinos uses 5 o 3.3V deberías considerar el uso de level Shifter o sea desplazadores de nivel de 3.3 a 5V y vice verza. Existe un aditamento muy simple basado en un 2n7000.
Confirma si los arduinos son 5 o 3.3V?

El arduino es de 5v. Pero creo que eso no era el problema, erala funcion del arduino, modifique el codigo para que fuera el loop() la que comprobara los botones que se pulsan, y la funcion espWifiRequestEvent() solo manda tiene el codigo del Wire.write(x).
La cosa es que si desde el master haces un request y no recibes respuesta en unos segundos se cancela.
Pero muchas gracias por la ayuda.

Si el tema esta terminado por favór indícalo para darle un cierre, al mismo.

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