Предлагаем собрать схему и написать программу для игры «Кто быстрее». Это игра на реакцию для двух игроков. 

В игре используется две кнопки и три светодиода. Управляет игрой микроконтроллер 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() посвящена отдельная статья.