Помогите пожалуйста новичкуууу!!!
- Войдите на сайт для отправки комментариев
Ср, 21/01/2015 - 22:39
Всем привет!
Задание: Игра «Проверка реакции». На индикаторе показывается число (от 0 до 9) в течении 3 секунд, затем начинают выводиться числа в случайном порядке (одна секунда на число). Пользователь должен нажать кнопку при появлении показанного ранее числа. При совпадении выводится сообщение1, иначе сообщение2.
Помогите пожалуйста. Не понимаю что написал не так. Помогите отладить скетч.Показывает первую цифру 4 затем принажатии кнопки показывает сообщение только на цифре 0.
Скетч:
long randNumber;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int LedPin = 13; // Подключаем светодиод к порту 13
int ButPin = 8; // Подключаем кнопку к выходу 8
int ResPin = 6;
int per1;
int per2;
void setup() {
pinMode(LedPin, OUTPUT); // Инициализируем порт "ledPin" как выходной
lcd.begin(16, 2); // устанавливаем размер (количество столбцов и строк) экрана
randomSeed(analogRead(0));
randNumber = random(9);
lcd.println(randNumber);
int per1 = (randNumber);
delay(3000);
}
void loop() {
// устанавливаем курсор в колонку 0, строку 1. То есть на
// самом деле это вторая строка, т.к. нумерация начинается с нуля
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
randNumber = random(9);
lcd.println(randNumber);
int per2 = (randNumber);
delay(500);
lcd.setCursor(0, 0);
{
if(digitalRead(ButPin) == HIGH) // если кнопка нажата
{
if (per2==per1)
{
lcd.print("YES!");
}
else
{
lcd.print("NO!");
}
}
}
delay(500);
}
http://pixs.ru/showimage/1jpg_6889169_15694337.jpg
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
long randNumber; #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); int LedPin = 13; // 13 int ButPin = 8; // 8 int ResPin = 6; int per1; int per2; void setup() { pinMode(LedPin, OUTPUT); // "ledPin" lcd.begin(16, 2); // ( ) randomSeed(analogRead(0)); randNumber = random(9); lcd.println(randNumber); int per1 = (randNumber); delay(3000); } void loop() { // 0, 1. // , .. lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 1); randNumber = random(7); lcd.println(randNumber); int per2 = (randNumber); delay(500); lcd.setCursor(0, 0); { if(digitalRead(ButPin) == HIGH) // { if (per2==per1) { lcd.print("YES!"); } else { lcd.print("NO!"); } } } delay(500); }per1 никогда не меняется, потому всегда только на одной цифре.
Нажмите ctrl-t, чтобы отформатировать текст, тогда, возможно, Вам помогут.
нано и кнопка, смотреть в сериалМониторе - для LCD сами переделаете :)
#include <LiquidCrystal.h> //const byte maxRandNumber = 100; // так - долго ждать //const int solutionTime = 1000; // так - легко const byte maxRandNumber = 10; // норм const int solutionTime = 750; // норм byte randNumber; byte randNumberTemp; LiquidCrystal lcd( 12 , 11 , 5 , 4 , 3 , 2 ); #define ButPin 3 // кнопку на пин и землю volatile byte mode; // 0 - показать число , 1 - запутать голову , 2 - стоп/анализ int OK; int NO; int MISSED; //=============================================== void stop() { mode = 2; } //=============================================== void setup() { Serial.begin( 9600 ); pinMode( ButPin , INPUT ); digitalWrite( ButPin , HIGH ); lcd.begin( 16 , 2 ); randomSeed( analogRead( 0 ) ); mode = 0; MISSED = 0; OK = 0; NO = 0; } //=============================================== void loop() { if ( mode == 0 ) { Serial.print( "*****************************************" ); Serial.println( "" ); Serial.print( " OK = " ); Serial.print( OK ); Serial.print( " NO = " ); Serial.print( NO ); Serial.print( " MISSED = " ); Serial.println( MISSED ); Serial.println( "" ); delay( 2000 ); randNumber = random( maxRandNumber ); randNumberTemp = randNumber; Serial.print( " Remember = " ); Serial.print( randNumber ); Serial.println( " !!!" ); Serial.println( "" ); delay( 3000 ); attachInterrupt( 1 , stop , FALLING ); mode = 1; } if ( mode == 1 ) { randNumber = random( maxRandNumber ); Serial.println( randNumber ); Serial.println( "" ); delay( solutionTime ); if ( randNumber == randNumberTemp ) { MISSED++; Serial.print( " ha-ha-ha !!!!!!! missed !!!!!!! = " ); Serial.println( MISSED ); Serial.println( "" ); } } if ( mode == 2 ) { detachInterrupt( 1 ); Serial.println( " stop !!!!! " ); Serial.println( "" ); if ( randNumber == randNumberTemp ) { Serial.print( " pardon... OK ! :) " ); MISSED--; OK++; mode = 0; } else { Serial.print( " nooooo :( " ); NO++; mode = 0; } Serial.print( " " ); Serial.print( randNumberTemp ); Serial.print( " and " ); Serial.println( randNumber ); delay( 3000 ); Serial.println( "" ); } } //===============================================#include <LiquidCrystal.h> //const byte maxRandNumber = 100; // так - долго ждать //const int solutionTime = 1000; // так - легко const byte maxRandNumber = 10; // норм const int solutionTime = 750; // норм byte randNumber; byte randNumberTemp; LiquidCrystal lcd( 12 , 11 , 5 , 4 , 3 , 2 ); #define ButPin 3 // кнопку на пин и землю volatile byte mode; // 0 - показать число , 1 - запутать голову , 2 - стоп/анализ int OK; int NO; int MISSED; //=============================================== void stop() { mode = 2; } //=============================================== void setup() { Serial.begin( 9600 ); pinMode( ButPin , INPUT ); digitalWrite( ButPin , HIGH ); lcd.begin( 16 , 2 ); randomSeed( analogRead( 0 ) ); mode = 0; MISSED = 0; OK = 0; NO = 0; } //=============================================== void loop() { if ( mode == 0 ) { Serial.print( "*****************************************" ); Serial.println( "" ); Serial.print( " OK = " ); Serial.print( OK ); Serial.print( " NO = " ); Serial.print( NO ); Serial.print( " MISSED = " ); Serial.println( MISSED ); Serial.println( "" ); delay( 2000 ); randNumber = random( maxRandNumber ); randNumberTemp = randNumber; Serial.print( " Remember = " ); Serial.print( randNumber ); Serial.println( " !!!" ); Serial.println( "" ); delay( 3000 ); attachInterrupt( 1 , stop , FALLING ); mode = 1; } if ( mode == 1 ) { randNumber = random( maxRandNumber ); Serial.println( randNumber ); Serial.println( "" ); delay( solutionTime ); if ( randNumber == randNumberTemp ) { MISSED++; Serial.print( " ha-ha-ha !!!!!!! missed !!!!!!! = " ); Serial.println( MISSED ); Serial.println( "" ); } } if ( mode == 2 ) { detachInterrupt( 1 ); Serial.println( " stop !!!!! " ); Serial.println( "" ); if ( randNumber == randNumberTemp ) { Serial.print( " pardon... OK ! :) " ); MISSED--; OK++; mode = 0; } else { Serial.print( " nooooo :( " ); NO++; mode = 0; } Serial.print( " " ); Serial.print( randNumberTemp ); Serial.print( " and " ); Serial.println( randNumber ); delay( 3000 ); Serial.println( "" ); } } //===============================================а ещё - вот эта локальная переменная #53 i
ntper2 = (randNumber);скрывает глобальную #15intper2;строки ##13, 29 - тоже самое....
у вас получилось 4 переменных :
- глобальные
intper1; иintper2;- локальная для сетапаintper1;-локальная для лупаintper2;http://arduino.ru/Reference/Scope
Как подключена кнопка?
Почему не сконфигурировали пин?
вы миня или ТС спрашиваете ?
вы миня или ТС спрашиваете ?
Ну у вас-то все замечательно, конечно - у ТС.