Skip to content

Instantly share code, notes, and snippets.

@digitalab
Last active December 27, 2016 12:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save digitalab/f1ed0db90e1e124db2417595f9c74ac4 to your computer and use it in GitHub Desktop.
Save digitalab/f1ed0db90e1e124db2417595f9c74ac4 to your computer and use it in GitHub Desktop.
#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);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment