#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); }