Игра на Arduino с кнопками и светодиодами «Повтори последовательность» — еще один мини-проект с минимальным набором необходимых компонентов. Для сборки схемы потребуется только макетная плата, кнопки и светодиоды с резисторами. С помощью нажатия кнопок, необходимо повторить последовательность включения светодиодов. С каждым новым уровнем скорость игры будет постепенно увеличиваться.
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega
- светодиоды
- резисторы 220 Ом
- тактовые кнопки
- пьезодинамик
- макетная плата
- провода «папа-мама», «папа-папа»
Игра на Arduino «Повтори последовательность»

Светодиоды подключаются к Ардуино последовательно со 2 до 6 цифрового порта, кнопки подключаются к аналоговым входам с A0 до A4. Порты подключения кнопок и светодиодов можно изменить, указав их в скетче. В программе использовано только 10 комбинаций в массиве char* kod[]. Можно добавить в массив новые комбинации при желании, при этом каждый светодиод должен включаться только один раз.
Скетч для игры «Повтори последовательность»
// пин для подключения динамика #define buzzer 11 // пины подключения светодиодов int led[] = { 2, 3, 4, 5, 6 }; // пины для подключения кнопок int but[] = { A0, A1, A2, A3, A4 }; // варианты комбинаций (можно добавить свои) char* kod[] = { "01324", "40231", "02413", "03241", "40312", "14320", "13402", "12304", "41203", "10423" }; int del = 1000; int w = -1; byte level = 1; byte b1, b2, b3, b4, b5; String KOD, OTV, A; byte num_led = sizeof(led) / sizeof(int*); byte num_but = sizeof(but) / sizeof(int*); byte num_cod = sizeof(kod) / sizeof(char*); byte len = strlen(kod[0]); boolean button1WasUp = true; boolean button2WasUp = true; boolean button3WasUp = true; boolean button4WasUp = true; boolean button5WasUp = true; void setup() { pinMode(buzzer, OUTPUT); // настраиваем пины для светодиодов for (byte i = 0; i <= num_led; i++) { pinMode(led[i], OUTPUT); } // настраиваем пины для кнопок for (byte i = 0; i <= num_but; i++) { pinMode(but[i], INPUT_PULLUP); } Serial.begin(9600); Serial.println("LEVEL - " + String(level)); Serial.println(""); } void loop() { // рандомно выбираем одну из комбинаций while (w == -1) { int x = random(0, num_cod - 1); KOD = {kod[x]}; b1 = 0; b2 = 0; b3 = 0; b4 = 0; b5 = 0; w = 0; } // поочередно включаем светодиоды согласно комбинации while (w <= len - 1) { A = KOD[w]; int a = A.toInt(); digitalWrite(led[a], HIGH); tone(buzzer, 5 * led[a]); delay(10); noTone(buzzer); delay(del); digitalWrite(led[a], LOW); w++; } // ждем нажатия всех кнопок while (w >= len - 1 and w <= len + len) { boolean button1IsUp = digitalRead(but[0]); boolean button2IsUp = digitalRead(but[1]); boolean button3IsUp = digitalRead(but[2]); boolean button4IsUp = digitalRead(but[3]); boolean button5IsUp = digitalRead(but[4]); if (b1 == 0 and button1WasUp and !button1IsUp) { delay(10); button1IsUp = digitalRead(but[0]); if (!button1IsUp) { tone(buzzer, 5 * led[0]); delay(10); noTone(buzzer); OTV = OTV + "0"; digitalWrite(led[0], HIGH); b1 = 1; w++; } } button1WasUp = button1IsUp; if (b2 == 0 and button2WasUp and !button2IsUp) { delay(10); button2IsUp = digitalRead(but[1]); if (!button2IsUp) { tone(buzzer, 5 * led[1]); delay(10); noTone(buzzer); OTV = OTV + "1"; digitalWrite(led[1], HIGH); b2 = 1; w++; } } button2WasUp = button2IsUp; if (b3 == 0 and button3WasUp and !button3IsUp) { delay(10); button3IsUp = digitalRead(but[2]); if (!button3IsUp) { tone(buzzer, 5 * led[2]); delay(10); noTone(buzzer); OTV = OTV + "2"; digitalWrite(led[2], HIGH); b3 = 1; w++; } } button3WasUp = button3IsUp; if (b4 == 0 and button4WasUp and !button4IsUp) { delay(10); button4IsUp = digitalRead(but[3]); tone(buzzer, 5 * led[3]); delay(10); noTone(buzzer); if (!button4IsUp) { OTV = OTV + "3"; digitalWrite(led[3], HIGH); b4 = 1; w++; } } button4WasUp = button4IsUp; if (b5 == 0 and button5WasUp and !button5IsUp) { delay(10); button5IsUp = digitalRead(but[4]); tone(buzzer, 5 * led[4]); delay(10); noTone(buzzer); if (!button5IsUp) { OTV = OTV + "4"; digitalWrite(led[4], HIGH); b5 = 1; w++; } } button5WasUp = button5IsUp; // если комбинация совпадает начинаем новый уровень if (w == len + len and OTV == KOD) { Serial.println(""); Serial.println("DA!"); Serial.println(""); level++; Serial.println("LEVEL - " + String(level)); del = del - 100; if (del < 10) { del = 100; } delay(1000); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } // если комбинация неправильная задаем новую if (w == len + len and OTV != KOD) { Serial.println(""); Serial.println("HET!"); Serial.println(""); tone(buzzer, 100); delay(1000); noTone(buzzer); Serial.println("LEVEL - " + String(level)); for (byte i = 0; i <= num_led; i++) { digitalWrite(led[i], LOW); } delay(2000); KOD = ""; OTV = ""; w = -1; } } }
Пояснения к коду:
- после 10 уровня скорость включения светодиодов уже не увеличивается;
- порты для подключения кнопок и светодиодов можно поменять в программе, при этом команды digitalRead и digitalWrite в скетче изменять не надо.
Заключение. Текущий уровень в игре выводится на монитор порта Arduino IDE. В случае если последовательность введена неверно, будет включаться звуковой сигнал на пьезодинамике. Еще один проект игры на Aduino с кнопками и светодиодами размещен здесь — Игра Угадай код. Если у вас есть вопросы по программе или по сборке схемы для игры «Повтори последовательность» — оставляйте их в комментариях.










где у светодиодов на картинке(схеме) плюс и минус?????
А вы не знаете, где у Ардуино плюс и минус?
+ это 5v или 3.3v а — это gnd
У светодиодов длинная ножка — +,короткая — -.
Это называется АНОД И КАТОД! Ваш Атош.
справа плюс слева минус
На картинке подпись аналоговых пинов и действительное подключение (если верить подключению проводов) противоположное, что правильно?
Неправильно были подписаны пины. Спасибо — исправили схему подключения кнопок в игре «Саймон говорит»
Здраствуйте подскажите пожалуйста почему светодиод который подключен к пину d2 светит ну прям очень бледно как исправить?
Здравствуйте. Не было такой проблемы. Проверьте номинал резисторов
30 строчка, i— поставь
В какую строчку нужно поставить i чтобы светодиод который подключен к пину d2 горел ярче. Если смотреть библиотеку у меня в этой строке написан комментарий // настраиваем пины для светодиодов.Помоги пожалуйста.
А что если после первого уровня игра перестает работать? То есть горят и не погасают светодиоды?
Если в скетче ничего не меняли, то проверьте подключение. Такого ни у кого еще не было