Оглавление:

Игра по угадыванию цвета с ИК-пультом: 3 шага
Игра по угадыванию цвета с ИК-пультом: 3 шага

Видео: Игра по угадыванию цвета с ИК-пультом: 3 шага

Видео: Игра по угадыванию цвета с ИК-пультом: 3 шага
Видео: Летающий шар 3035, имеет 3 режима игры, подсветка, в коробке. 2024, Июль
Anonim
Игра по угадыванию цвета с ИК-пультом
Игра по угадыванию цвета с ИК-пультом

В этом руководстве я покажу вам, как управлять светодиодом 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

Я добавил примерную схему разводки.

Удачи и приятного времяпровождения!

Рекомендуемые: