Помогите пожалуйста новичкуууу!!!

Dimkaaaaa
Offline
Зарегистрирован: 21.01.2015

Всем привет!

Задание: Игра «Проверка реакции». На индикаторе показывается число (от 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

 

Alexander
Offline
Зарегистрирован: 25.04.2010
Dimkaaaaa
Offline
Зарегистрирован: 21.01.2015
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);
}

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

per1 никогда не меняется, потому всегда только на одной цифре.
Нажмите ctrl-t, чтобы отформатировать текст, тогда, возможно, Вам помогут.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

нано и кнопка, смотреть в сериалМониторе - для 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( "" );
    }
}
//===============================================
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а ещё - вот эта локальная переменная    #53 int per2 = (randNumber); скрывает глобальную    #15 int per2;

строки ##13, 29 - тоже самое....

у вас получилось 4 переменных :

- глобальные int per1; и int per2; 

- локальная для сетапа int per1; 

локальная для лупа int per2;

http://arduino.ru/Reference/Scope

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Как подключена кнопка?

Почему не сконфигурировали пин?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

вы миня или ТС спрашиваете ?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

SU-27-16 пишет:

вы миня или ТС спрашиваете ?

Ну у вас-то все замечательно, конечно - у ТС.