Предлагаем собрать схему и написать программу для игры «Кто быстрее». Это игра на реакцию для двух игроков.
В игре используется две кнопки и три светодиода. Управляет игрой микроконтроллер ATMega328 установленный на плате ARDUINO.
Рис. 1. Принципиальная электрическая схема игры.
Питание на схему изображённую на рис. 1 может быть подано через USB разъём платы Arduino. Так же, запитать схему можно от батареи на 4,5 Вольт, подав питание на ножку VIN или +5V на плате Arduino. Если у Вас плата Arduino UNO, то можно подать напряжение питания от 7 до 12 Вольт от блока питания через разъём питания платы.
Рис. 2. Макет схемы.
Цикл while - это цикл с условием. Пока условие истинно тело цикла выполняется.
Цикл do while - это цикл с пост условием. Выполняется тело цикла, а затем, если условие истинно тело цикла выполняется опять.
int knLeft = 2, knRight = 3; // Правая и левая кнопки
int ledLeft = 4, ledStart = 5, ledRight = 6; // Правый и левый светодиоды, светодиод Start
bool leftPlayer = false, rightPlaer = false; // false - кнопка отпущена, true - нажата.
void setup() {
pinMode(ledLeft, OUTPUT);
pinMode(ledStart, OUTPUT);
pinMode(ledRight, OUTPUT);
pinMode(knLeft, INPUT_PULLUP);
pinMode(knRight, INPUT_PULLUP);
}
void loop() {
digitalWrite(ledLeft, LOW);
digitalWrite(ledStart, LOW);
digitalWrite(ledRight, LOW);
delay(3000);
do { // Цикл do while
delay(1000); // Задержка если фальстарт
}
while (leftPlayer or rightPlaer);
digitalWrite(ledStart, HIGH); // Старт
while (!leftPlayer and !rightPlaer){ // Цикл while
delay(1); // Задержка если никто не нажал
}
if (leftPlayer) // Определение победителя
digitalWrite(ledLeft, HIGH);
else
digitalWrite(ledRight, HIGH);
digitalWrite(ledStart, LOW);
while (leftPlayer or rightPlaer) // Цикл while без {}
delay(2000); // Задержка пока оба отпустят
}
void yield(){
leftPlayer = ! digitalRead(knLeft);
rightPlaer = ! digitalRead(knRight);
}
Прог. 1.
Функции yield() посвящена отдельная статья.