Buenos días, estoy haciendo un juego arcade simple, de los que suena una alarma si tocas el alambre, pero me están dando errores que no logro encontrar. A ver si alguien me puede ayudar. Os cuento.
El juego es muy básico. Tiene un borne START, un alambre central, y un borne FINAL. Los dos bornes están totalmente aislados del alambre central, y comprobados con un multímetro para que no hagan contacto. Todo está totalmente aislado.
La idea es que tanto si se toca el alambre (ERROR), como si se llega al final, el juego lo reconoce como un ERROR, porque la única opción en los dos casos es reiniciar el juego.
START está en el pin 9.
ERROR (alambre central) en el pin 10.
FINAL en el pin 11.
Y la maneta que recorre el alambre en el GND, para que así cuando haga contacto con alguna de las tres zonas dé un mensaje, de "inicio de juego", de "error" si toca el alambre, y de "felicidades" si llega al final. Sencillo hasta aquí.
El problema es que cuando pongo la maneta haciendo contacto en START va bien, cuando toca el alambre me devuelve "falllo", pero si sigo dando toques al alambre me devuelve "nueva partida", "fallo", "nueva partida",... y así sucesivamente. Creo que el codigo es correcto. Alguien ve el error? Muchas gracias.
Si el código queda esperando la señal Start (me refiero a los while() ) entonces ya no es necesario que en el case Felicidades se verifique que esté la señal Start, es cuando menos redundante.
¿ Seguro ?, porque para mi ese código se queda en estado "ERROR" sin hacer nada. Además no encadenes los "if", no leerá el pin del error hasta llegar al final.
Fijate bien los while esperan un HIGH y "FELICIDADES "un LOW.
Si, segurísimo y funciona como seda.
Agrego el link a wokwi si quieres verlo.
(Los pulsadores simulan los contactos)
Yo no encadené nada, al código del PO solo le modifiqué las asignaciones de la variable gameState.
Si, claro, los while() se mantienen loopeando mientras lean HIGH y salen cuando se lee LOW, que justamente es lo que se espera en Felicidades, actuar por LOW.
O sea, sale del while(), inmediatamente sale del switch y sin pestanear vuelve a entrar al switch()/case Felicidad.
A menos que alguien suelte la mueva la barra en cuestión de useg lo que se va a leer es LOW.
De todos modos los while() solo enmascaran el problema ya que el problema es (o era) otro.
El PO hizo correctamente la lógica del código pero le erró en las asignaciones, nada más.
Humm.. Pues por mas combinaciones de pulsaciones que hago en el wokwi no aparece "FELICIDADES" por ningún lado.
Prueba el mío en tu enlace wokwi, funciona como espera el PO.
Primero obviamente pulsas el verde para iniciar
Pulsas rojo, error (tocaste la barra con la anilla)
Pulsas amarillo, felicidadessssss!!! (Llegaste al final sin tocar la barra)
Y para reiniciar pulsas verde, obviamente (devolviste la anilla al otro extremo de la barra).
Muchas gracias a los dos. Al final entre los dos habéis encontrado la solución. El código de gonpezzi funciona, pero me seguía dando el mismo problema que mi código. Luego puse el delay(50) para los rebotes y problema solucionado. Incluso mi código con el delay funciona. Así que el problema era ese, los rebotes.
Probé el código de maximoesfuerzo también, y funciona, pero cuando se llega al final, marca "felicidades" (que a su vez activará luces, sonido...) pero al volver la maneta al inicio devuelve "error" al tocar la barra, en cambio el de gonpezzi, no devuelve error una vez devuelve "felicidades".
Así que muchas gracias a los dos.
Prometo subir un vídeo cuando esté el monedero, luces, devolución de moneda... todo implementado.
Un placer.
Saludos.