From b6e91b934dfb220828c619470ed1bc2ee5060e5f Mon Sep 17 00:00:00 2001 From: joseba Date: Fri, 25 Oct 2024 21:07:12 +0200 Subject: [PATCH] first commit --- README.md | 0 hw/bolak/bolak.ino | 119 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 README.md create mode 100644 hw/bolak/bolak.ino diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/hw/bolak/bolak.ino b/hw/bolak/bolak.ino new file mode 100644 index 0000000..c8b8f4e --- /dev/null +++ b/hw/bolak/bolak.ino @@ -0,0 +1,119 @@ +#include + + +#include + + +ezButton fcP1B(8); +ezButton fcP1T(9); +ezButton resetBtn(6); +ezButton P1S1(7); +ezButton P1S2(30); +ezButton P1S3(31); + + +// Configuración del motor paso a paso +const int pasosPorRevolucion = 200; // Depende de tu motor +Stepper motor(pasosPorRevolucion, 4, 5); // Pines del Arduino al driver del motor + +//Pins Gameover +int pinGameOverLight = 11; +int pinGameOverSiren = 10; + +// Variables de estado +bool estadoPulsadorAvance = false; +bool estadoPulsadorReset = false; +bool estadoAnteriorAvance = false; + +//Variables de motor +int remainingSteps = 0; +const int MOTOR_INCREMENT = 50; +const int MOTOR_ONE_LAP = 6400; +int estadoFcP1B = 0; +int estadoFcP1T = 0; + +// Variables de modo +enum modes {PLAYING, RESET, GAMEOVER}; +modes currentMode = PLAYING; // playing, reset + +void setup() { + pinMode(pinGameOverLight, OUTPUT); + pinMode(pinGameOverSiren, OUTPUT); + disableGameOver(); + + motor.setSpeed(2000); // Velocidad del motor en RPM + fcP1B.setDebounceTime(50); // set debounce time to 50 milliseconds + fcP1T.setDebounceTime(50); // set debounce time to 50 milliseconds + resetBtn.setDebounceTime(50); // set debounce time to 50 milliseconds + Serial.begin(9600); + Serial.println("hasiera"); +} + +void loop() { + fcP1B.loop(); + fcP1T.loop(); + resetBtn.loop(); + P1S1.loop(); + P1S2.loop(); + P1S3.loop(); + + + estadoFcP1B = fcP1B.getState(); + estadoFcP1T = fcP1T.getState(); + switch(currentMode){ + case RESET: + modeReset(); + break; + case GAMEOVER: + modeGameOver(); + break; + default: + modePlaying(); + break; + } + + handleMotor(); + + if(resetBtn.isReleased()){ + currentMode = RESET; + } + +} +void handleMotor(){ + if(estadoFcP1T){ + currentMode = GAMEOVER; + return; + } + if(remainingSteps > 0) { + motor.step(MOTOR_INCREMENT); + remainingSteps -= MOTOR_INCREMENT; + + } +} + +void modeReset(){ + disableGameOver(); + if(!estadoFcP1B){ + motor.step(-MOTOR_INCREMENT); + } else { + currentMode = PLAYING; + } +} +void modePlaying(){ + if(P1S1.isReleased() || P1S2.isReleased() || P1S3.isReleased()){ + remainingSteps += MOTOR_ONE_LAP; + } +} + +void modeGameOver(){ + remainingSteps = 0; + enableGameOver(); +} +void enableGameOver(){ + digitalWrite(pinGameOverSiren, LOW); + digitalWrite(pinGameOverLight, LOW); +} +void disableGameOver(){ + digitalWrite(pinGameOverSiren, HIGH); + digitalWrite(pinGameOverLight, HIGH); +}