Живая лента со счетчиком очков
Компоненты и расходные материалы
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| | × | 1 | |
| Регистр сдвига Texas Instruments - последовательный на параллельный | | × | 1 | |
| 7-сегментный светодиодный дисплей, красный | | × | 1 | |
| | × | 10 | |
| Батарея 9 В (стандартная) | | × | 1 | |
Об этом проекте
Поигравшись с Arduino, чтобы немного скоротать время, я решил сделать улучшенную версию старой доброй игры Buzz Wire, которая подсчитывает ваши неудачи и сходит с ума, если вы попадаете в провод 10 раз!
Вот видео, на котором я плохо себя чувствую в собственной игре:
Исходный код разделен на три файла.
В коде после каждого сбоя устанавливается «льготный период» в 500 мс. Вы можете изменить это, чтобы дать игроку больше перерывов после каждого жужжания.
Также в конце я заметил, что светодиоды слишком яркие! Не стесняйтесь заменять два использованных резистора на более сильные. У меня всего около 100 Ом.
Для кольца я использовал конец цепочки для ключей. Хорошая вещь в том, что вы можете просто открыть его, и вам не придется возвращаться обратно на провод.
Надеюсь, вам понравится мой проект!
Код
- нервный_метр_score.ino
- score_display.ino
- game.ino
нервный_метр_score.ino Arduino
int latchPin =3; // ST_CP [RCK] на 74HC595int clockPin =4; // SH_CP [SCK] на 74HC595int dataPin =2; // DS [S1] на 74HC595const int STOP_LED =6; const int GO_LED =7; const int BUZZ =8; const int TOUCH =10; const int fail_threshold =9; статус перечисления {STOP =0, GO =1}; void setup () {Serial.begin (9600); displayInitialSetup (); gameInitialSetup ();} Статус статуса =GO; int failCounter =0; void loop () {while (failCounter> fail_threshold) {gameover (); } переключатель (статус) {case GO:digitalWrite (GO_LED, HIGH); digitalWrite (STOP_LED, LOW); digitalWrite (BUZZ, LOW); если (digitalRead (TOUCH) ==ВЫСОКИЙ) {статус =СТОП; } ломать; case STOP:digitalWrite (GO_LED, LOW); failCounter ++; если (failCounter> fail_threshold) перерыв; displayDigit (failCounter); Serial.println (failCounter); failAlarm (); status =GO; ломать; }} byte seg_spin [6] ={B10000000, B01000000, B00100000, B00010000, B00001000, B00000100}; void gameover () {for (int i =0; i <6; i ++) {digitalWrite (BUZZ, HIGH); задержка (5); digitalWrite (BUZZ, LOW); задержка (50); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, LSBFIRST, seg_spin [i]); digitalWrite (latchPin, HIGH); задержка (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}; пусто displayDigit (int x) {digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, LSBFIRST, seg_digits [x]); digitalWrite (latchPin, HIGH);} void displayInitialSetup () {pinMode (latchPin, OUTPUT); pinMode (dataPin, ВЫХОД); pinMode (clockPin, ВЫХОД); displayDigit (0);}
game.ino Arduino
void gameInitialSetup () {pinMode (STOP_LED, OUTPUT); pinMode (GO_LED, ВЫХОД); pinMode (BUZZ, ВЫХОД); pinMode (СЕНСОРНЫЙ, ВЫСОКИЙ); digitalWrite (TOUCH, LOW);} void failAlarm () {digitalWrite (STOP_LED, HIGH); beep (); задержка (150); digitalWrite (STOP_LED, LOW); digitalWrite (BUZZ, LOW); задержка (500);} void beep () {for (int i =0; i <3; i ++) {digitalWrite (BUZZ, HIGH); задержка (50); digitalWrite (BUZZ, LOW); задержка (50); }}
Схема
Просто имейте в виду, что подключение D10 к 5 В приведет к отказу, из-за чего зуммер подаст звуковой сигнал, а счетчик начнет отсчет. На схеме не было возможности показать это.
Так что наращивайте свои провода и структуру соответственно :)