|
#define BUZZER_PIN 12 // пин с пищалкой |
|
#define PLAYER_COUNT 2 // количество игроков-ковбоев |
|
// вместо перечисления всех пинов по-одному, мы объявляем пару |
|
// списков: один с номерами пинов с кнопками, другой — со |
|
// светодиодами. Списки также называют массивами (англ. array) |
|
int buttonPins[PLAYER_COUNT] = {3, 13}; |
|
int ledPins[PLAYER_COUNT] = {9, 11}; |
|
int ledPinsError[PLAYER_COUNT] = {7, 8}; |
|
int pressButState[PLAYER_COUNT] = {0, 0}; |
|
boolean startFlag = false; // |
|
boolean buttonPressed = false; // |
|
long pause = 0; // пауза между сигналами старт |
|
long startTime = 0; |
|
unsigned long newTime = 0; |
|
|
|
void setPause(){ |
|
pause = random(3000, 5000); |
|
startTime = millis(); |
|
startFlag = false; |
|
} |
|
|
|
void setup() |
|
{ |
|
pinMode(BUZZER_PIN, OUTPUT); |
|
for (int player = 0; player < PLAYER_COUNT; ++player) { |
|
// при помощи квадратных скобок получают значение в массиве |
|
// под указанным в них номером. Нумерация начинается с нуля |
|
pinMode(ledPins[player], OUTPUT); |
|
pinMode(buttonPins[player], INPUT_PULLUP); |
|
pinMode(ledPinsError[player], OUTPUT); |
|
setPause(); |
|
} |
|
} |
|
|
|
void loop() |
|
{ |
|
newTime = millis(); |
|
if ((startTime + pause) < newTime && startFlag == false && buttonPressed == false) { |
|
tone(BUZZER_PIN, 3500, 50); // 3 килогерца, 250 миллисекунд |
|
startFlag = true; |
|
} |
|
for (int player = 0; player < PLAYER_COUNT ; player++) { |
|
// если игрок номер «player» нажал кнопку... |
|
if (!digitalRead(buttonPins[player]) && buttonPressed == false) { |
|
pressButState[player] = 1; |
|
buttonPressed = true; |
|
delay(5); |
|
} |
|
} |
|
if (buttonPressed == true){ |
|
for (int player = 0; player < PLAYER_COUNT ; player++) { |
|
if (startFlag == false){ |
|
if (pressButState[player] == 1) { |
|
// ...включаем его светодиод и сигнал поражения на 1 сек |
|
digitalWrite(ledPinsError[player], HIGH); |
|
delay(5); |
|
} |
|
} else { |
|
if (pressButState[player] == 1) { |
|
// ...включаем его светодиод и сигнал поражения на 1 сек |
|
digitalWrite(ledPins[player], HIGH); |
|
delay(5); |
|
} |
|
} |
|
} |
|
if (startFlag == false){ |
|
tone(BUZZER_PIN, 500, 1500); |
|
delay(1500); |
|
} else { |
|
startFlag == false; |
|
tone(BUZZER_PIN, 3000, 1000); |
|
delay(1000); |
|
} |
|
buttonPressed = false; |
|
setPause(); |
|
for (int player = 0; player < PLAYER_COUNT ; player++) { |
|
digitalWrite(ledPinsError[player], LOW); |
|
digitalWrite(ledPins[player], LOW); |
|
pressButState[player] = 0; |
|
delay(5); |
|
} |
|
} |
|
} |
|
|
|
|