Создайте игру памяти для Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
|
Об этом проекте
Вы помните игру «Симон»? Многим людям моего возраста (родившимся в 70-х) приходилось терять много времени, играя в нее. Игра была простой, в ней было 4 кнопки разных цветов, которые загорались последовательно, и вам приходилось повторять последовательность. Каждый раз, когда вы все делали правильно, игра снова выдавала последовательность с дополнительным цветом в конце.
Я получил один на Рождество давным-давно, но потом я переехал и переехал, и переместил еще несколько, так что игра потерялась в одной из многих коробок, которые никогда не распаковываются от хода к другому ...
Став «взрослым», я открыл для себя радости Arduino и с этим получил возможность возродить моего давно потерянного друга, тратящего время впустую.
Из этого туториала Вы узнаете, как создать похожую игру, используя Arduino Uno, несколько светодиодов и резисторов и относительно простую схему.
Сама программа может быть немного сложной для новичка, поэтому я попытался объяснить в коде, что она делает и как.
Самый простой способ запустить эту игру - это.
1) Подключите схему точно так, как показано на схеме. Цвет проводов не имеет значения, так что если у вас закончатся черные провода, ничего страшного. :)
2) Вставьте исходный код в ваш любимый редактор Arduino и загрузите его на доску
3) Играйте в игру
Игра начнется примерно через 3 секунды, все светодиоды будут медленно мигать 5 раз.
Если один или несколько светодиодов не мигают, проверьте проводку. На моей плате очень маленькие кнопки не всегда сидят должным образом и имеют тенденцию выскакивать.
Если проводка выглядит правильно, попробуйте поменять исправный светодиод на неработающий, чтобы проверить, подключен ли он к проводке или сам светодиод.
После 5 миганий загорится один светодиод. Не могу сказать, какой именно, это сюрприз :) Нажмите кнопку этого светодиода. Этот светодиод снова загорится, а затем снова загорится новый. Последовательно нажимайте правильные кнопки ... Вы видите, к чему я клоню ...
Затем, довольно скоро, вы увидите, что все они быстро мигают. Значит, вы проиграли. :D
Будет воспроизведена последняя заданная вам последовательность, чтобы вы могли подсчитать свои очки, после чего последуют 5 медленных миганий, которые были ранее, что означает, что игра начинается снова.
У вас есть 2 секунды на нажатие каждой кнопки.
Вот так! Удачи!
Хотите усложнить задачу? Почему бы не изменить верхнюю строку кода на другое значение?
#define PLAYER_WAIT_TIME 2000
Или вы можете добавить еще один светодиод, если он у вас есть ... Для этого вам сначала нужно воспроизвести эту часть схемы:
Оранжевый провод здесь подойдет к любому неиспользуемому контакту на вашем Arduino (однако избегайте 0 и 1)
Затем измените следующие строки кода:
byte noPins =4byte pins [] ={2, 13, 10, 8};
если вы добавите один светодиод на контакт 6, код станет
byte noPins =5byte pins [] ={2, 13, 10, 8, 6};
Небольшой совет по написанию кода Arduino:
void setup () {задержка (3000); Serial.begin (9600); Перезагрузить(); }
Установите короткую задержку в качестве первого оператора вашей функции setup (). Очень легко заставить Arduino зайти в бесконечный цикл или каким-то образом заблокировать его. Если это произойдет, эта короткая задержка позволит вам сбросить настройки Arduino и загрузить пустой скетч, прежде чем он снова заблокируется. .
В конце концов я взял эту маленькую идею и сделал ее портативной ...
Если вы хотите увидеть действительно классную идею для подобной (но намного более продвинутой) игры. Проверьте это https://www.instructables.com/id/Lego-Mini-Memory-Game Питера Кента. Он сделал игру для мобильных устройств с интерфейсом к автомобилю Lego. Это действительно здорово!
Код
- Код игры на память
Код игры с памятью Arduino
Это весь код игры. Просто скопируйте и вставьте его в свою любимую среду IDE и загрузите в Arduino.#define PLAYER_WAIT_TIME 2000 // Время между нажатиями кнопок - последовательность байтов 2 секунды [100]; // Хранение байта световой последовательности curLen =0; // Текущая длина байта последовательности inputCount =0; // Количество раз, когда игрок нажимал (правильную) кнопку за данный ход байт lastInput =0; // Последний ввод от playerbyte expRd =0; // Светодиод, который должен гореть от playerbool btnDwn =false; // Используется для проверки, нажата ли кнопка bool wait =false; // Ожидает ли программа нажатия пользователем кнопки resetFlag =false; // Используется для указания программе, что однажды проигрыватель потерял байт soundPin =5; // Выходной байт динамика noPins =4; // Количество кнопок / светодиодов (пока я работал над этим, я использовал только 2 светодиода) // Вы можете усложнить игру, добавив дополнительную комбинацию светодиодов / кнопок / резисторов. Byte pins [] ={2, 13, 10 , 8}; // Входные контакты кнопок и выходные контакты светодиодов - измените эти значения, если вы хотите подключить свои кнопки к другим контактам // Количество элементов должно соответствовать noPins ниже long inputTime =0; // Переменная таймера для задержки между пользовательскими вводамиvoid setup () {delay (3000); // Это дает мне время передохнуть после подключения arduino - может быть удален, если вы хотите Serial.begin (9600); // Запуск последовательного монитора. Это также можно удалить, если вы удалите все ссылки на Serial ниже Reset ();} ////// Устанавливает все контакты как INPUT или OUTPUT на основе значения 'dir' /// void setPinDirection (byte dir) {для (байт i =0; iбыстро | большое число -> медленно /// пустая вспышка (короткая частота) {setPinDirection (OUTPUT); /// Сейчас мы активируем светодиоды для (int i =0; i <5; i ++) {writeAllPins (HIGH); beep (50); задержка (частота); writeAllPins (НИЗКИЙ); задержка (частота); }} ////// Эта функция сбрасывает все игровые переменные до значений по умолчанию /// void Reset () {flash (500); curLen =0; inputCount =0; lastInput =0; expRd =0; btnDwn =ложь; ждать =ложь; resetFlag =false;} ////// Пользователь потерян /// void Lose () {flash (50); } ////// Arduino показывает пользователю, что нужно запомнить. Светодиоды по очереди для (int i =0; i PLAYER_WAIT_TIME) {// Если игрок берет больше, чем разрешено, DoLoseProcess (); // Все потеряно :( return;} if (! BtnDwn) {// expRd =sequence [inputCount]; // Находим значение, которое мы ожидаем от плеера Serial.print ("Expected:"); // Вывод последовательного монитора - Следует удалить, если вы удалили Serial.begin выше Serial.println (expRd); // Выход последовательного монитора - Следует удалить, если вы удалили Serial.begin выше для (int i =0; i
Схема
simonsays_siKds3Jmk2.fzzПроизводственный процесс
- Создание монитора Ambilight с помощью Arduino
- Игра с гироскопом Arduino с MPU-6050
- Удовольствие от гироскопа с кольцом NeoPixel
- Игра Arduino Pong - OLED-дисплей
- Игровой контроллер Arduino
- Игра Arduino Touch Breakout
- Pixie:наручные часы NeoPixel на базе Arduino
- Игра Pixel Chaser
- Автоматизированная игра Дино с использованием arduino
- Мобильная камера удаленного наблюдения