Después de jugar con Arduino solo para pasar el tiempo por un tiempo, decidí hacer una versión mejorada del viejo juego de buzz wire que cuenta tus fallas y se vuelve loco si golpeas el cable 10 veces.
El código fuente está dividido en tres archivos.
En el código, se establece un "período de gracia" de 500 ms después de cada falla. Puedes modificar eso para darle al jugador un descanso más grande después de cada zumbido.
¡También algo que noté al final fue que los LED son demasiado brillantes! Siéntase libre de intercambiar las dos resistencias utilizadas en ellos por otras más fuertes. Los míos son solo de unos 100 ohmios.
Para el anillo, he usado el final de un llavero. Lo bueno de esto es que puede abrirlo y no tendrá que navegar hasta el final del cable.
Código
- nervioso_meter_score.ino
- score_display.ino
- game.ino
nervioso_meter_score.ino Arduino
int latchPin =3; // ST_CP [RCK] en 74HC595int clockPin =4; // SH_CP [SCK] en 74HC595int dataPin =2; // DS [S1] en 74HC595const int STOP_LED =6; const int GO_LED =7; const int BUZZ =8; const int TOUCH =10; const int fail_threshold =9; enum Estado {STOP =0, GO =1}; void setup () {Serial.begin (9600); displayInitialSetup (); gameInitialSetup ();} Status status =GO; int failCounter =0; void loop () {while (failCounter> fail_threshold) {gameover (); } interruptor (estado) {caso GO:digitalWrite (GO_LED, HIGH); digitalWrite (STOP_LED, LOW); escritura digital (ZUMBIDO, BAJO); if (digitalRead (TOUCH) ==HIGH) {status =STOP; } descanso; caso STOP:digitalWrite (GO_LED, LOW); failCounter ++; if (failCounter> fail_threshold) break; displayDigit (failCounter); Serial.println (failCounter); failAlarm (); status =GO; descanso; }} byte seg_spin [6] ={B10000000, B01000000, B00100000, B00010000, B00001000, B00000100}; void gameover () {for (int i =0; i <6; i ++) {digitalWrite (BUZZ, HIGH); retraso (5); escritura digital (ZUMBIDO, BAJO); retraso (50); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, LSBFIRST, seg_spin [i]); digitalWrite (latchPin, HIGH); retraso (10); }}
score_display.ino Arduino
byte seg_digits [10] ={B11111100, // =0 B01100000, // =1 B11011010, // =2 B11110010, // =3 B01100110, // =4 B10110110, // =5 B10111110, // =6 B11100000, // =7 B11111110, // =8 B11100110 // =9}; nulo displayDigit (int x) {digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, LSBFIRST, seg_digits [x]); digitalWrite (latchPin, HIGH);} vacío displayInitialSetup () {pinMode (latchPin, SALIDA); pinMode (dataPin, SALIDA); pinMode (clockPin, SALIDA); displayDigit (0);}
game.ino Arduino
void gameInitialSetup () {pinMode (STOP_LED, OUTPUT); pinMode (GO_LED, SALIDA); pinMode (BUZZ, SALIDA); pinMode (TOQUE, ALTO); digitalWrite (TOUCH, LOW);} void failAlarm () {digitalWrite (STOP_LED, HIGH); bip(); retraso (150); digitalWrite (STOP_LED, LOW); escritura digital (ZUMBIDO, BAJO); delay (500);} bip void () {for (int i =0; i <3; i ++) {digitalWrite (BUZZ, HIGH); retraso (50); escritura digital (ZUMBIDO, BAJO); retraso (50); }}
Esquemas
Solo tenga en cuenta que si el D10 se conecta a los 5V, constituirá una falla que hará que el zumbador emita un pitido y el contador cuente. En el esquema no había forma de mostrarlo.
Así que construye tus cables y estructura en consecuencia :)