Игра на скорость.

lydoedgena
Offline
Зарегистрирован: 11.12.2015

Игра кто быстрее!!. В серийный порт выводится отсчет начиная с 10, вместо 0 выводится - начали, в этот момент два игрока должны успеть нажать кнопку раньше при этом  включается звук на пьезоэлементе рядом с кнопкой, у первого загорается стоящий рядом светодиод , и выводится игрок №1 или игрок №2 победил. При фальстарте - загорается стоящий у игрока красный светодиод, и он проигрывает, выводится такое же сообщение. Новая игра через 10 секунд и диоды тухнут

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

прекрасно. ну, и?..

lydoedgena
Offline
Зарегистрирован: 11.12.2015

Нужна помощь в реализаций

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

lydoedgena пишет:

Нужна помощь в реализаций

Если нужна помощь - выкладывайте что уже сделано и объясняйте что не нравится.

Если нужно сделать за Вас, топайте в "Ищу исполнителя", там помогут.

lydoedgena
Offline
Зарегистрирован: 11.12.2015
#define PLAYER_W 2 \\количество игроков
int buttonPins[PLAYER_W]= {3,13};
int ledpins[PLAYER_W] ={9,11};
int PZ_1 = 12;
int PZ_2 = 13;
 
 
void setup() {
 pinMode(PZ_1,OUTPUT);
 pinMode(PZ_,OUTPUT);
for(int player = 0;player < PLAYER_W;++player){
pinMode(ledpins[player],OUTPUT);
pinMode(buttonPins[player],INPUT);
 
Serial.begin(9600);
Serial.println("Ready");
  }
}
 
void loop() {
  Serial.println("Приготовились");
  for (int i=0;i<11;i--){
    Serial.println(i=0,"Начали!!");
 for(int player = 0;player = (player+1)% PLAYER_W){
      if(!digitalRead(buttonPins[PLAYER])){
        digitalWrite(ledPins[PLAYER],HIGH);
        tone(PZ_1,4000, 1000);
        delay(1000);
        digitalWrite(ledPins[player],LOW);
        break;
      }
    }
    
  }
 
 
}
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А теперь читаем вот это и выкладываем еще раз.

И обязательно объясняем что не так, или нам самим надо догадываться какие там проблемы?

lydoedgena
Offline
Зарегистрирован: 11.12.2015

1.Как организовать проверку на фальстарт?

2.Как организовать проверку, что после нажатия кнопки другая работать не должна?

lydoedgena
Offline
Зарегистрирован: 11.12.2015
#define PLAYER_W 2 \\количество игроков
int buttonPins[PLAYER_W]= {3,13};
int ledpins[PLAYER_W] ={9,11};
int PZ_1 = 12;
int PZ_2 = 13;


void setup() {
 pinMode(PZ_1,OUTPUT);
 pinMode(PZ_,OUTPUT);
for(int player = 0;player < PLAYER_W;++player){
pinMode(ledpins[player],OUTPUT);
pinMode(buttonPins[player],INPUT);
 
Serial.begin(9600);
Serial.println("Ready");
  }
}

void loop() {
  Serial.println("Приготовились");
  for (int i=10;i<11;i--){
    Serial.println(i=0,"Начали!!");
  }
 for(int player = 0;player = (player+1)% PLAYER_W){
   // если игрок номер «player» нажал кнопку...
      if(!digitalRead(buttonPins[player])){
        digitalWrite(ledPins[player],HIGH);
        tone(PZ_1,4000, 1000);
        delay(10000);
        noTone(PZ_1);
        digitalWrite(ledPins[player],LOW);
        else
        digitalRead(buttonPins[player])){
          digitalWrite(ledPins[player],HIGH];
          tone(PZ_2,4000,1000);
          delay(10000);
          digitalWrite(ledPins[player],LOW);
        }
        break;
      }
    }
    
  
 
 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так-то лучше. И что не устраивает в этом коде?

lydoedgena
Offline
Зарегистрирован: 11.12.2015

1.Как организовать проверку на фальстарт?

2.Как организовать проверку, что после нажатия кнопки другая работать не должна?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Окей, сам вижу что не так :) 

Тяжёлый случай.

Что по-вашему должен делать глубокомысленный кусок кода в строка 22-24?

Какого чёрта Вы проверяеете кнопки по очереди?

Почему не притянули их к питанию?

Каким образом фильтруется дребезг? 

И главный вопрос, Вы это вообще запускали в работу?

lydoedgena
Offline
Зарегистрирован: 11.12.2015

А что тут запускать? Если условия задачи не выполнены

lydoedgena
Offline
Зарегистрирован: 11.12.2015

пока это черновик 

lydoedgena
Offline
Зарегистрирован: 11.12.2015

строка 22-24 В серийный порт выводится отсчет начиная с 10, вместо 0 выводится - начали

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

lydoedgena пишет:

А что тут запускать?

...

строка 22-24 В серийный порт выводится отсчет начиная с 10, вместо 0 выводится - начали

Запускать надо для отладкм, чтобы убедится, что хотя бы, что написано уже работает.

Например, в указанных строках (если они вообще компилируются) выводится совсем не то, что Вы думаете, причём выводится не 10 раз, как Вам кажется а гораздо больше - десятки тысяч раз!

Запускайте и добивайтесь, чтоб хотя бы это заработало.

lydoedgena
Offline
Зарегистрирован: 11.12.2015

Я переделал вывод отсчета от 10 до 0, но как заменить '0' (символьный) на"начали" (строковый)?

Stephan
Offline
Зарегистрирован: 01.10.2015

lydoedgena пишет:

...выводится отсчет начиная с 10, вместо 0 выводится - начали...

Не интересно, нужно, чтобы время до старта быро произвольным...

lydoedgena
Offline
Зарегистрирован: 11.12.2015

Задача поставлена 

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

lydoedgena пишет:

Задача поставлена 

прекрасно - исполняй

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lydoedgena пишет:

1.Как организовать проверку на фальстарт?

2.Как организовать проверку, что после нажатия кнопки другая работать не должна?

0. Запоминаем время загорания светодиода и нажатия каждой из кнопок.

1. Сравниваем время каждой из кнопок с временем загорания светодиода, если хоть одно раньше - фальстарт.

2. ПРовекряем на фальстарт. Дальше сравниваем время нажатия кнопок между собой.