ARDUINO34.RU Форум ARDUINO34.RU Форум
 Поиск    Участники
Сегодня: 20.01.2018 - 04:14:18
   ARDUINO34.RU Форум -> Скетчи -> Игра "Повторика!". Первый проект на Arduino. Нужна помощь.
Страницы:  1  
АвторСообщение

guliyev34



гость
bujanoff и участники форума, здравствуйте! недавно купил у вас Arduino Uno. Она была куплена для другого дела, но т.к блютуз модуль еще едет, решил заняться чем-нибудь другим. И так, это игра. Все это работает так. Имеется 3 жизни. И начальный уровень 1. В самом начале включается индикация жизни (3 жизни). И компьютер выбирает случайным образом светодиод (пока только один, т.к уровень 1). Заносится номер светодиода в массив и он загорается. Далее очередь игрока. Игрок нажимает кнопки, соответствующую светодиодам которые горели, и в каком порядке. Далее идет сравнение того что выдал компьютер (всмысле какой светодиод включил и последовательность) и то что нажал игрок. После проверки, выбираем, либо уменьшается жизнь, либо идем на следующий уровень. И так до 10 уровня. Смысл игры, кто не понят из текста выше, заключается в повторении комбинации горения светодиодов. Как то так. Но вот беда. Схема была собрана. Код был написал. Но происходит следующее. Вначале включается индикация жизней. Потом загорается светодиод (пока один, т.к уровень 1) . И сразу отнимается одна жизнь. Потом второй раз тоже самое, и третий. Потом жизни полностью тратятся, и начинается все заново. Т.е ошибка в том, что цикл, где прописано нажатие кнопок, не работает так как надо. Он как будто его пропускает. Думаю это может быть связано с кнопкой. Какое-нибудь маленькое напряжение есть на пине, а компьютер думает что кнопка зажата. Кнопка подключена по схеме:
+5 на кнопку, с неё на резистор, с него на землю, с общей точки резистора и кнопки - на пин
при отпущенной кнопке на пине LOW, при нажатой HIGH
Сейчас так:
+5 на резистор, с него на кнопку, с кнопки на землю, с общей точки резистора и кнопки - на пин
при отпущенной кнопке на пине HIGH, при нажатой LOW (резистор используется внутренний)
Особой разницы не ощутил.. Все равно работает не так как надо.. Вот код, надеюсь кто-нибудь поможет.
Сообщение # 1 18.03.2015 в 20:21:02

guliyev34



гость

PHP код:
[Code] int Dead1 = 10; //Если осталась 1 жизнь
int Dead2 = 9; // Если осталось 2 жизни
int Dead3 = 8; // Если осталось 3 жизни

int Knopka1 = 2;
int Knopka2 = 3;
int Knopka3 = 4;

int Led1= 5;
int Led2= 6;
int Led3= 7;


void setup() {
Serial.begin (9600);

pinMode (Knopka1 , INPUT);
digitalWrite(Knopka1, HIGH);
pinMode (Knopka2 , INPUT);
digitalWrite(Knopka2, HIGH);
pinMode (Knopka3 , INPUT);
digitalWrite(Knopka3, HIGH);

pinMode (Led1 , OUTPUT);
pinMode (Led2 , OUTPUT);
pinMode (Led3 , OUTPUT);

pinMode (Dead1 , OUTPUT);
pinMode (Dead2 , OUTPUT);
pinMode (Dead3 , OUTPUT);

randomSeed (analogRead(0)); //Чтобы случайные числа не повторялись

}

void loop() {

int n = 1; //Уровень
int N = 10; //Максимальное количество уровней
int Dead = 3; //Начальное количество жизней
int tempL;
int tempL1;
int tempK;
int MassivLed[N];
int MassivKnopok[N];

//Включение индикации жизней
digitalWrite(Dead3, HIGH);
digitalWrite(Dead2, HIGH);
digitalWrite(Dead1, HIGH);


while (Dead > 0 && n <= N) //Сама игра до того пока не закончатся жизни
{
delay (2000);
//Заполняем массив случайным образом для миганий разных светодиодов
for (int i=0 ; i < n ; i++)
{
tempL = random (1, 4);

//Чтобы небыло повторов
while (tempL == tempL1)
{
tempL = random (1, 4);
}
tempL1 = tempL;

if (tempL == 1)
{
MassivLed[i] = Led1;
}
else if (tempL == 2)
{
MassivLed[i] = Led2;
}
else
{
MassivLed[i] = Led3;
}
}

//Воспроизводим это мигание на плате
for (int i=0; i < n; i++)
{
digitalWrite(MassivLed[i], HIGH);
delay(500);
digitalWrite(MassivLed[i], LOW);
delay(500);
}

//Записываем нажатие кнопок в массив MassivKnopok

for (int i=0; i < n; i++)
{
if (digitalRead (Knopka1) == HIGH )
{
MassivKnopok[i] = Led1;
digitalWrite(Led1, HIGH);
digitalWrite(Led1, LOW);
}

else if (digitalRead (Knopka2) == HIGH )
{
MassivKnopok[i] = Led2;
digitalWrite(Led2, HIGH);
digitalWrite(Led2, LOW);
}
else if (digitalRead (Knopka3) == HIGH )
{
MassivKnopok[i] = Led3;
digitalWrite(Led3, HIGH);
digitalWrite(Led3, LOW);
}
}

for (int i=0; i < n; i++)
{
if (MassivLed[i] != MassivKnopok [i])
{
Dead--;
break;
}
else n++; //увеличиваем уровень
}

//Проверяем и изменяем индикацию жизни
if (Dead == 3)
{
digitalWrite(Dead3, HIGH);
digitalWrite(Dead2, HIGH);
digitalWrite(Dead1, HIGH);
}
else if (Dead == 2)
{
digitalWrite(Dead3, LOW);
digitalWrite(Dead2, HIGH);
digitalWrite(Dead1, HIGH);
}
else if (Dead == 1)
{
digitalWrite(Dead3, LOW);
digitalWrite(Dead2, LOW);
digitalWrite(Dead1, HIGH);
}
else if (Dead == 0)
{
for (int i = 0 ; i < 3 ; i++)
{
digitalWrite(Dead3, HIGH);
digitalWrite(Dead2, HIGH);
digitalWrite(Dead1, HIGH);
delay (500);
digitalWrite(Dead3, LOW);
digitalWrite(Dead2, LOW);
digitalWrite(Dead1, LOW);
delay (500);
}
}


}//while
} //loop
[/Code]
Сообщение # 2 18.03.2015 в 20:21:12
Страницы:  1  
Администратор запретил отвечать гостям на сообщения! Для регистрации пройдите по ссылке: зарегистрироваться


Powered by WR-Forum Professional © 1.9.9