Buzz Wire mit Punktezähler
Komponenten und Verbrauchsmaterialien
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| Texas Instruments Schieberegister - seriell zu parallel | | × | 1 | |
| 7-Segment-LED-Anzeige, rot | | × | 1 | |
| | × | 10 | |
| | × | 1 | |
Über dieses Projekt
Nachdem ich mit Arduino herumgespielt hatte, nur um eine Weile Zeit zu vertreiben, beschloss ich, eine verbesserte Version des guten alten Buzz-Wire-Spiels zu machen, das Ihre Fehler zählt und verrückt wird, wenn Sie 10 Mal auf den Draht treffen!
Hier ist ein Video von mir, wie ich an meinem eigenen Spiel lutsche:
Der Quellcode ist in drei Dateien unterteilt.
Im Code ist nach jedem Ausfall eine „Grace Period“ von 500ms eingestellt. Sie können dies ändern, um dem Spieler nach jedem Buzz eine größere Pause zu geben.
Am Ende ist mir auch aufgefallen, dass die LEDs etwas zu hell sind! Fühlen Sie sich frei, die beiden verwendeten Widerstände durch stärkere zu ersetzen. Meine sind nur etwa 100 Ohm.
Für den Ring habe ich das Ende eines Schlüsselanhängers verwendet. Das Gute daran ist, dass Sie es einfach öffnen können und nicht den ganzen Weg zurück auf dem Kabel navigieren müssen.
Ich hoffe dir gefällt mein Projekt!
Code
- nervous_meter_score.ino
- score_display.ino
- game.ino
nervous_meter_score.inoArduino
int LatchPin =3; // ST_CP [RCK] auf 74HC595int clockPin =4; // SH_CP [SCK] auf 74HC595int dataPin =2; // DS [S1] on 74HC595const int STOP_LED =6;const int GO_LED =7;const int BUZZ =8;const int TOUCH =10;const int fail_threshold =9;enum Status{ STOP =0, GO =1};void setup () { Serial.begin (9600); displayInitialSetup(); gameInitialSetup();}Status status =GO;int failCounter =0;void loop() { while (failCounter> fail_threshold) { gameover(); } Schalter (Status) { Fall GO:digitalWrite (GO_LED, HIGH); digitalWrite (STOP_LED, LOW); digitalWrite (BUZZ, NIEDRIG); if (digitalRead (TOUCH) ==HIGH) { Status =STOP; } brechen; Fall STOPP:digitalWrite(GO_LED, LOW); FailCounter++; if (failCounter> fail_threshold) break; displayDigit(FailCounter); Serial.println (FailCounter); FailAlarm(); Status =GO; brechen; }}Byte seg_spin[6] ={ B10000000, B01000000, B00100000, B00010000, B00001000, B00000100};void gameover(){ for (int i=0; i<6; i++) { digitalWrite (BUZZ, HIGH); Verzögerung(5); digitalWrite (BUZZ, NIEDRIG); Verzögerung (50); digitalWrite (LatchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, seg_spin[i]); digitalWrite (LatchPin, HIGH); Verzögerung(10); }}
score_display.inoArduino
byte seg_digits[10] ={ B11111100, // =0 B01100000, // =1 B11011010, // =2 B11110010, // =3 B01100110, // =4 B10110110, // =5 B10111110, // =6 B11100000, // =7 B11111110, // =8 B11100110 // =9}; Void displayDigit (int x) {digitalWrite (latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, seg_digits[x]); digitalWrite (latchPin, HIGH);}void displayInitialSetup () { pinMode (latchPin, OUTPUT); pinMode (dataPin, AUSGANG); pinMode (clockPin, AUSGANG); displayDigit(0);}
game.inoArduino
void gameInitialSetup(){ pinMode(STOP_LED, OUTPUT); pinMode (GO_LED, AUSGANG); pinMode (BUZZ, AUSGANG); PinMode (TOUCH, HIGH); digitalWrite (TOUCH, LOW);}void failAlarm () { digitalWrite (STOP_LED, HIGH); Signalton(); Verzögerung (150); digitalWrite (STOP_LED, LOW); digitalWrite (BUZZ, NIEDRIG); delay(500);}void beep(){ for(int i=0; i<3; i++) { digitalWrite (BUZZ, HIGH); Verzögerung (50); digitalWrite (BUZZ, NIEDRIG); Verzögerung (50); }}
Schaltpläne
Denken Sie nur daran, dass der D10, wenn er an die 5V angeschlossen wird, einen Fehler darstellt, der dazu führt, dass der Summer piept und der Zähler zählt. Im Schaltplan gab es keine Möglichkeit, es zu zeigen.
Bauen Sie also Ihre Drähte auf und strukturieren Sie sie entsprechend :)