Оглавление:
Видео: Игра по угадыванию цвета с ИК-пультом: 3 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
В этом руководстве я покажу вам, как управлять светодиодом RGB с помощью ИК-пульта, и сделаю из этого забавную игру!
Шаг 1: Необходимые детали
Детали, которые вам понадобятся для этого проекта:
- Arduino One - RGB Led - ИК-датчик
(количество светодиодов зависит от игры, количества жизней или) - 2 зеленых светодиода - 1 желтый светодиод - 1 оранжевый светодиод - 3 красных светодиода
Шаг 2: Код
#включают
int redPin = 10;
int greenPin = 6; int bluePin = 5;
int levensPin1 = 8;
int levensPin2 = 9; int levensPin3 = 12;
int levelPin1 = 2;
int levelPin2 = 3; int levelPin3 = 4; int levelPin4 = 7;
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN); decode_results результаты;
// ввод цветов
int input = {-1, -1, -1}; int color = {-1, -1, -1};
int indexNumber = 0;
int indexColor = 0;
int waarde = 0;
int rood = 0;
int groen = 0; int blauw = 0;
// генерируем цвета
int roodRandom = 0; int groenRandom = 0; int blauwRandom = 0;
// игровые переменные
int diff = 200;
int levelNumber = 1;
int level = {-1, -1, -1, -1};
int t = 0;
int level1 = 255;
int level2 = 0; int level3 = 0; int level4 = 0;
int живет = 3;
int levens1 = 255; int levens2 = 255; int levens3 = 255;
int roodGok = 0;
int groenGok = 0; int blauwGok = 0;
void setup () {
Serial.begin (9600); irrecv.enableIRIn (); // запускаем приемник pinMode (redPin, OUTPUT); pinMode (greenPin, ВЫХОД); pinMode (bluePin, ВЫХОД);
pinMode (levensPin1, ВЫХОД);
pinMode (levensPin2, ВЫХОД); pinMode (levensPin3, ВЫХОД);
}
void loop () {
if (irrecv.decode (& results)) // получение сигналов от удаленного {Serial.println (results.value, DEC); // отображаем сигналы, полученные от каждой нажатой кнопки irrecv.resume (); // получение следующего сигнала switch (results.value) {// превращаем сигналы в числа на кнопках и назначаем действия кнопкам
case 109562864:
addWaarde (1); перерыв;
case 109562824:
addWaarde (2); перерыв;
case 109562856:
addWaarde (3); перерыв;
case 109562872:
addWaarde (4); перерыв;
case 109562820:
addWaarde (5); перерыв;
case 109562852:
addWaarde (6); перерыв;
case 109562868:
addWaarde (7); перерыв;
case 109562828:
addWaarde (8); перерыв;
case 109562860:
addWaarde (9); перерыв;
case 109562876:
addWaarde (0); перерыв;
case 109562818: // oud ding enter / R CLK
handleInput (); перерыв;
case 109562816: // мощность уд-динга
handleColor (); перерыв; case 109562878: // удаляем отмена / L CLK resetColor (); перерыв;
case 109562866: // lege knop midden
Случайный цвет(); перерыв;
case 109562830: // pijltje naar rechts
displayEverything (); перерыв; case 109562838: // esc case 109562822: // AV-источник resetEverything (); перерыв; }
// назначаем кнопки на пульте дистанционного управления для управления цветом: таким образом игроки могут видеть, как выглядят цвета и как их комбинировать, // перед началом игры. переключатель (results.value) {case 109562840: rood = 255; перерыв;
case 109562844:
groen = 255; перерыв;
case 109562850:
blauw = 255; перерыв;
case 109562836:
rood = 0; groen = 0; blauw = 0; перерыв; }
}
analogWrite (redPin, abs (255 - rood)); // управление светодиодом RGB: в обратном направлении, потому что у меня наоборот.
analogWrite (greenPin, abs (255 - groen)); analogWrite (bluePin, abs (255 - blauw));
// управление живыми светодиодами
если (живет == 2) {levens1 = 0; } если (живет == 1) {levens2 = 0; } если (живет == 0) {levens3 = 0; } analogWrite (levensPin1, levens1); analogWrite (levensPin2, levens2); analogWrite (levensPin3, levens3);
// управление светодиодами уровня
если (levelNumber == 1) {level1 = 255; } если (levelNumber == 2) {level1 = 255; level2 = 255; } если (levelNumber == 3) {level1 = 255; level2 = 255; level3 = 255; } если (levelNumber == 4) {level1 = 255; level2 = 255; level3 = 255; level4 = 255; } analogWrite (levelPin1, level1); analogWrite (levelPin2, level2); analogWrite (levelPin3, level3); analogWrite (levelPin4, level4);
}
void addWaarde (int value) {// добавить нажатое значение в список
if (indexNumber == 3) {
возвращение; }
if (input [indexNumber] == -1) {
input [indexNumber] = значение; indexNumber ++; }}
void handleInput () {// делаем 'waarde' (значение) из списка
waarde = abs (ввод [0] * 100 + ввод [1] * 10 + ввод [2]); вход [0] = -1; // сбросить сигнал input [1] = -1; вход [2] = -1;
indexNumber = 0;
Serial.print ("waarde opgeslagen:"); Serial.println (ваард); addColor (waarde); }
void addColor (int waarde) {// добавляем 3-значный 'waarde' в список
if (indexColor == 3) {
возвращение; }
if (color [indexColor] == -1) {
цвет [indexColor] = waarde; если (цвет [indexColor]> 255) {цвет [indexColor] = 255; } indexColor ++; }
}
void randomColor () {// делаем свет случайным цветом и сохраняем его в переменных
roodRandom = random (0, 255);
groenRandom = random (0, 255);
blauwRandom = случайный (0, 255);
rood = roodRandom;
groen = groenRandom; blauw = blauwRandom; Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
}
void handleColor () {// превращаем 'waarde' из списка в 'Gok' (угадываем) переменные
roodGok = цвет [0]; groenGok = цвет [1]; blauwGok = цвет [2]; // проверяем, не слишком ли различаются переменные Gok с реальным случайным цветом: если да, отобразить предположение в течение трех секунд, мигать зеленым и снова изменить цвет, добавить уровень и уменьшить допустимую разницу // если нет, отобразить угадать в течение трех секунд, моргнуть красным и вычесть жизнь // если у вас закончились жизни, игра начнется заново if (abs ((rood + groen + blauw) - (roodGok + groenGok + blauwGok)) <= diff) { analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); задержка (3000); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 255); analogWrite (greenPin, 0); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300);
Serial.print ("roodGok =");
Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); resetColor (); Случайный цвет(); levelNumber ++; разн - = 50; } else {analogWrite (redPin, abs (255 - roodGok)); analogWrite (greenPin, abs (255 - groenGok)); analogWrite (bluePin, abs (255 - blauwGok)); задержка (3000); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (300); Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok);
resetColor ();
жизни--; } если (живет == 0) {analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); analogWrite (redPin, 0); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); analogWrite (redPin, 255); analogWrite (greenPin, 255); analogWrite (bluePin, 255); задержка (100); resetEverything (); }
}
void resetColor () {// использовать для сброса значений, неправильного нажатия или каждого нового предположения (только для уверенности)
цвет [0] = -1; цвет [1] = -1; цвет [2] = -1;
indexNumber = 0;
indexColor = 0; }
void resetEverything () {// перезапускаем игру
цвет [0] = -1; цвет [1] = -1; цвет [2] = -1;
indexNumber = 0;
indexColor = 0;
жизней = 3;
rood = 0; groen = 0; blauw = 0;
roodRandom = 0;
groenRandom = 0; blauwRandom = 0;
levens1 = 255;
levens2 = 255; levens3 = 255;
level1 = 255;
level2 = 0; level3 = 0; level4 = 0;
levelNumber = 1;
t = 0;
}
void displayEverything () {// используйте это для отображения важной информации на последовательном мониторе
Serial.print ("roodGok ="); Serial.println (roodGok); Serial.print ("groenGok ="); Serial.println (groenGok); Serial.print ("blauwGok ="); Serial.println (blauwGok); Serial.print ("roodRandom ="); Serial.println (roodRandom); Serial.print ("groenRandom ="); Serial.println (groenRandom); Serial.print ("blauwRandom ="); Serial.println (blauwRandom);
Serial.print ("rood =");
Serial.println (rood); Serial.print ("groen ="); Serial.println (Groen); Serial.print ("blauw ="); Serial.println (blauw);
Serial.print ("waarde opgeslagen:");
Serial.println (ваард); }
Шаг 3. Сборка
Очевидно, вам нужна хорошая сборка для этого проекта. эта часть довольно открыта для интерпретации, но есть некоторые вещи, о которых следует помнить об этом: - делайте переднюю панель тонкой, чтобы вы все еще могли просунуть светодиоды через нее, а ИК-приемник по-прежнему работает
- оставьте достаточно места в сборке для Arduino и паяльной платы
- убедитесь, что сзади есть отверстие для питания Arduino
Я добавил примерную схему разводки.
Удачи и приятного времяпровождения!
Рекомендуемые:
Как использовать фотоэлемент для изменения цвета светодиода RGB: 3 шага
Как использовать фотоэлемент для изменения цвета светодиода RGB: для моего проекта Arduino, часть 01, моя первоначальная идея заключалась в том, чтобы использовать датчик температуры для включения и выключения светодиода, но, увы, мой датчик температуры еще не появился, что оставило меня в покое. выбрал из датчиков, имеющихся в стартовом наборе Elegoo, и интересно, если
Обработка изображений с помощью Raspberry Pi: установка OpenCV и разделение цвета изображения: 4 шага
Обработка изображений с помощью Raspberry Pi: установка OpenCV и разделение цвета изображения: этот пост является первым из нескольких руководств по обработке изображений, которым необходимо следовать. Мы внимательно рассмотрим пиксели, из которых состоит изображение, узнаем, как установить OpenCV на Raspberry Pi, а также написали тестовые сценарии для захвата изображения, а также c
Машина для определения цвета: 4 шага
Машина для определения цвета: машина для определения цвета копирует цвета вокруг вас и позволяет вам рисовать с их помощью. Если у вас есть краска основных цветов, вы можете использовать датчик цвета RGB, чтобы определить нужный цвет и смешать его. Но помните, используйте объект яркого цвета
Игра Саймона - Веселая игра !: 5 шагов
Simon Game - Fun Game !: Справка: После долгих выходных вы должны очень постараться, чтобы выполнить все задания и работу, за которые вы отвечаете. Пора нам тренировать мозг, не так ли? Помимо этих скучных и бессмысленных игр, есть игра под названием Simon Game
Простая игра по угадыванию чисел Python: 11 шагов
Простая игра по угадыванию чисел на Python: в этом уроке мы научимся создавать простую игру по угадыванию чисел на Python в приложении Pycharm. Python - это язык сценариев, который отлично подходит как для новичков, так и для экспертов. Стиль кодирования в Python легко читается, и следуйте