Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игра «Whack-a-Mole» на Arduino Uno — интерактивный проект с LED и джойстиком

Компоненты и материалы

Arduino UNO × 1
Светодиоды (LED) × 7
Резистор 221 Ом × 7
Аналоговый джойстик (универсальный) × 1
Провода-перемычки (универсальные) × 8
Провода Male/Female × 4

О проекте

Это был мой первый проект на Arduino, я создал его, опираясь на знания из первых уроков по светодиодам и базовому управлению.

Эта игра «Whack-a-Mole» (Ударь крота) использует 7 светодиодов и джойстик. Имеется 4 «крота», представленных 2-м, 3-м, 4-м и 5-м светодиодами слева на моей плате. Один из четырех светодиодов случайным образом загорается и дает определенное время на нажатие соответствующего направления на джойстике. Я расположил светодиоды так, что слева направо направления джойстика соответствуют: влево, вверх, вниз, вправо. Это просто моя условность, проявите фантазию и попробуйте другие варианты!

Два крайних слева светодиода — красный и зеленый — указывают на неправильный или правильный выбор. Желтый светодиод справа мигает, показывая текущий рекорд, и отображает счет каждый раз при завершении попытки (когда сделан неверный выбор). Естественно, новый рекорд заменяет старый.

Пожалуй, самая сложная часть проекта — аналоговый джойстик. Для обоих направлений джойстика максимальные значения составляют 0 и 1024 (у меня было 1023, так что если выборы не срабатывают правильно, попробуйте это значение). Эти значения можно измерить через монитор последовательного порта. Я упростил эти входные значения с помощью операторов switch для осей X и Y. Не уверен, что это лучший способ, но так как мне нужны были только максимальные значения каждого направления (всего 4 варианта, 4 светодиода-крота), я присвоил целые числа каждой возможности: 1, 2, 3, 4, соответствующие Влево, Вправо, Вверх, Вниз.

Игра «Whack-a-Mole» на Arduino Uno — интерактивный проект с LED и джойстиком

Уровни сложности, заданные в коде как константы, — это время в миллисекундах, которое у игрока есть на выбор. Вы можете изменить эти времена для настройки сложности под себя. Думал о выборе сложности с помощью кнопок или джойстика в начале игры, но это не стоило бы усилий, так как показалось довольно сложным и не очень удобным для пользователя.

Буду рад любым предложениям по модификациям и улучшениям! :)

Код

WhackALED

// Whack a LED (Ударь светодиод)
// Переменные джойстика
int sX = A0; // ось X джойстика, аналоговый вход
int sY = A1; // ось Y джойстика, аналоговый вход
int sSX; // состояние X, чтение с sX
int sSY; // состояние Y, чтение с sY
int sS; // преобразованное состояние (возможно, не самое эффективное)

// Игровые переменные
int rNum; // случайное число, выбирающее светодиод
int wins=0; // счетчик последовательных побед
int highScore=0; // сохранение максимального счета последовательных побед

// Константы сложности, время реакции
const int easy=1000;
const int medium=500;
const int hard=325;
const int stupid=250;

int ledPins[]={5,2,4,3,6,7,8}; // пины светодиодов
int pinCount=7; // количество пинов светодиодов

void setup() {
 Serial.begin(9600);
 pinMode(sX, INPUT);
 pinMode(sY, INPUT);
 for (int thisPin = 0; thisPin < pinCount; thisPin++) {
 // назначение всех пинов как выходы в цикле
 pinMode(ledPins[thisPin], OUTPUT);
 }
}

void loop() {
 rNum=random(4); // генерация случайного выбора
 delay(1000);
 digitalWrite(ledPins[rNum], HIGH); // зажигание случайно выбранного светодиода
 delay(stupid); // сложность

 // работа с джойстиком
 sSX = analogRead(sX); // чтение входа оси X
 delay(100);
 sSY = analogRead(sY); // чтение входа оси Y

 // преобразование входов X и Y в 4 возможности. 0 и 1023 — максимальные значения на каждой оси джойстика, по измерениям.
 sS=0;
 switch (sSX) {
 case 0: sS=1; // Влево
 break;
 case 1023: sS=2; // Вправо
 break;
 }
 switch (sSY) {
 case 0: sS=3; // Вверх
 break;
 case 1023: sS=4; // Вниз
 break;
 }

 digitalWrite(ledPins[rNum], LOW); // гашение случайно выбранного светодиода после выбора джойстика

 if (sS-1==rNum) // проверка, ввел ли игрок правильное направление загоревшегося светодиода
 {
 wins++;
 for (int k=0; k<=3; k++) {
 // мигание зеленым светодиодом, указывая на правильный выбор
 digitalWrite(ledPins[4], HIGH);
 delay(50);
 digitalWrite(ledPins[4], LOW);
 delay(50);
 }
 }
 else {
 if (wins>highScore) {
 // если последовательные победы больше предыдущего рекорда, устанавливается новый рекорд
 highScore=wins;
 wins=0;
 }
 for (int i=0; i<=3; i++) {
 // мигание красным светодиодом, указывая на неверный выбор
 digitalWrite(ledPins[5], HIGH);
 delay(50);
 digitalWrite(ledPins[5], LOW);
 delay(50);
 }
 for (int w=0; w<highScore; w++) {
 // отображение рекорда через подсчет и мигание желтым светодиодом
 digitalWrite(ledPins[6], HIGH);
 delay(200);
 digitalWrite(ledPins[6], LOW);
 delay(200);
 }
 }
}

Схемы

Всё должно соответствовать реальной фотографии проекта, за исключением джойстика. У моего джойстика 5 пинов, 4 из которых я использовал: сверху вниз «GND», «+5V», «VRx» и «VRy». «GND» и «+5V» подключены к GND и 5V на Arduino, «VRx» и «VRy» — к A0 и A1.

Игра «Whack-a-Mole» на Arduino Uno — интерактивный проект с LED и джойстиком
Игра «Whack-a-Mole» на Arduino Uno — интерактивный проект с LED и джойстиком

Производственный процесс

  1. Газовые фонари: эволюция, дизайн и современное производство
  2. Лазерный указатель: дизайн, производство и обзор безопасности
  3. Фонарик: от изобретения к современным инновациям
  4. Калейдоскоп: от науки Брюстера к современному дизайну
  5. Полупроводниковые лазеры: точное генерирование света для современных технологий
  6. Искусство и наука фотографических процессов: от dageерротипов к современной пленке
  7. Светофоры: инженерия, история и будущие инновации
  8. Светодиоды (LED): от зарождения к 100-летнему ресурсу
  9. Освоение аксессуаров для LED лент: подключение, управление и кастомизация
  10. Расшифровка приборной панели: лампы, индикаторы и их значение