Помогите пожалуйста с кодом для Ардуино. Запутался..

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

На десятом так: assignment[10]= [a a a a a a a a a a 0]. Так? 

нет, массив 10, а значений 11 !

Я уже догнал) Мой косяк, не выспался наверное((( Спутал индексы и кол-во элементов массива)

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

guliyev34 пишет:

Если подключить ардуино и залить скетч, все будет работать?) 

у миня в сериал сыпет нормально, с миганием СД "задание" надо изменить, СД я не подключал - итого МОЖЕТ и заработать :)
....это и будет - отладка
и доделать логику проверки и отображения её результатов

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

хороший букварь, читать сверху до низу http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/main.htm#13

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

guliyev34 пишет:

Если подключить ардуино и залить скетч, все будет работать?) 

у миня в сериал сыпет нормально, с миганием СД "задание" надо изменить, СД я не подключал - итого МОЖЕТ и заработать :)
....это и будет - отладка
и доделать логику проверки и отображения её результатов

Вечером буду дома начну отладку) Отпишусь что да как) 

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

хороший букварь, читать сверху до низу http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/main.htm#13

Спасибо, буду изучать) 

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

крайняя версия

#define knopka1 2
#define knopka2 3
#define knopka3 4
  #define ledLive1 10
  #define ledLive2 9
  #define ledLive3 8
#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7
 #define ledBlockButtons 11
byte levelCurrent=1;
byte levelMax=10;
byte liveCurrent=3;
 enum SECTION{sectionOut,sectionIn,sectionResult};
 SECTION section=sectionOut;
unsigned long oldMillis;
 byte assignment[10];
 byte reply[10];
 byte countKnopka;   // колво нажатий на кнопки ввода ответа
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);
  digitalWrite(knopka1,HIGH);
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
    pinMode (ledAssignment1,OUTPUT);
    pinMode (ledAssignment2,OUTPUT);
    pinMode (ledAssignment3,OUTPUT);
    OutByteAssignment(0);
  pinMode (ledLive1,OUTPUT);
  pinMode (ledLive2,OUTPUT);
  pinMode (ledLive3,OUTPUT);
  OutByteLive(0);
    pinMode (ledBlockButtons,OUTPUT);
    digitalWrite(ledBlockButtons,LOW);
  randomSeed (analogRead(0));
   oldMillis=millis();
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    ClearAssignment();
    for(byte i=0;i<levelCurrent;i++)
    {
      if(i==0) assignment[0]=RandomByte();
      if(i>0)
      {
        byte tempByte=RandomByte();
        while(assignment[i-1]==tempByte)
        {
          tempByte=RandomByte();
        }
        assignment[i]=tempByte;
      }
    }
    for(int i=0;i<5;i++)
    {
      OutByteLive(7);
      delay(100);
      OutByteLive(0);
      delay(100);
    }
    OutByteLive(liveCurrent);
    delay(1000);
    OutByteLive(0);
    OutByteAssignment(7);
    delay(1000);
    OutByteAssignment(0);
    delay(1000);
    byte n=0;                            // начало миганий задания
    while((assignment[n]!=0)&&(n<10))
    {
      OutByteAssignment(assignment[n]);  // вкл случСД
      delay(500);                        // пауза
      OutByteAssignment(0);              // выкл случСД
      delay(500);                        // пауза
      n++;
    }                                    // окончание миганий задания
    delay(500);
    OutByteAssignment(7);
    delay(500);
    OutByteAssignment(0);
    digitalWrite(ledBlockButtons,HIGH);
// смотрим что навводили в массив задание
    Serial.print(" level = ");
    Serial.println(levelCurrent);
    for(byte i=0;i<10;i++)
    {
      Serial.print(assignment[i]);
      Serial.print(" ");
    }
    Serial.println("");
// окончание просмотра массива задание
    Serial.println(" GO ! Push button !!!");
    ClearReply();
    countKnopka=0;
    section=sectionIn;
    oldMillis=millis();
  }

// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(2000+levelCurrent*500))
    {
// считывание и запись нажатий кнопок в массив
      if(countKnopka<10)      // чтобы не вылезти за границы массива
      {
        if(!digitalRead(knopka1))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=1;
          countKnopka++;
        }
        if(!digitalRead(knopka2))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=2;
          countKnopka++;
        }
        if(!digitalRead(knopka3))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=4;
          countKnopka++;
        }
      }
// окончание считывания и записи нажатий кнопок в массив
    }
    else
    {
      // .........................
      digitalWrite(ledBlockButtons,LOW);
      Serial.println("...allotted time has expired !");
      section=sectionResult;
    }
  }

// sectionResult
  if(section==sectionResult)
  {
// смотрим что навводили в массив ответов
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
// окончание просмотра массива ответов
    // .........................
    section=sectionOut;
    // для прохода всех уровней на время отладки кода
    levelCurrent++;
    if(levelCurrent>10) levelCurrent=1;
    // окончание для прохода всех уровней на время отладки кода
  }
}
//=========================================================================



//====== функции ==========================================================
//=========================================================================
// фунцция получения случайного байта - 001 , 010 , 100
//=========================================================================
byte RandomByte()
{
  byte tempByte=random(1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция очистки массива "задание"
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++) { assignment[i]=0; };
}
//=========================================================================
// фунцция очистки массива "ответ"
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++) { reply[i]=0; };
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
  }
}
//=========================================================================
// фунцция вывода байта на СД "жизнь"
//=========================================================================
void OutByteLive(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,HIGH);
      break;
    }
  }
}
//=========================================================================#define knopka1 2
#define knopka2 3
#define knopka3 4
  #define ledLive1 10
  #define ledLive2 9
  #define ledLive3 8
#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7
 #define ledBlockButtons 11
byte levelCurrent=1;
byte levelMax=10;
byte liveCurrent=3;
 enum SECTION{sectionOut,sectionIn,sectionResult};
 SECTION section=sectionOut;
unsigned long oldMillis;
 byte assignment[10];
 byte reply[10];
 byte countKnopka;   // колво нажатий на кнопки ввода ответа
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);
  digitalWrite(knopka1,HIGH);
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
    pinMode (ledAssignment1,OUTPUT);
    pinMode (ledAssignment2,OUTPUT);
    pinMode (ledAssignment3,OUTPUT);
    OutByteAssignment(0);
  pinMode (ledLive1,OUTPUT);
  pinMode (ledLive2,OUTPUT);
  pinMode (ledLive3,OUTPUT);
  OutByteLive(0);
    pinMode (ledBlockButtons,OUTPUT);
    digitalWrite(ledBlockButtons,LOW);
  randomSeed (analogRead(0));
   oldMillis=millis();
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    ClearAssignment();
    for(byte i=0;i<levelCurrent;i++)
    {
      if(i==0) assignment[0]=RandomByte();
      if(i>0)
      {
        byte tempByte=RandomByte();
        while(assignment[i-1]==tempByte)
        {
          tempByte=RandomByte();
        }
        assignment[i]=tempByte;
      }
    }
    for(int i=0;i<5;i++)
    {
      OutByteLive(7);
      delay(100);
      OutByteLive(0);
      delay(100);
    }
    OutByteLive(liveCurrent);
    delay(1000);
    OutByteLive(0);
    OutByteAssignment(7);
    delay(1000);
    OutByteAssignment(0);
    delay(1000);
    byte n=0;                            // начало миганий задания
    while((assignment[n]!=0)&&(n<10))
    {
      OutByteAssignment(assignment[n]);  // вкл случСД
      delay(500);                        // пауза
      OutByteAssignment(0);              // выкл случСД
      delay(500);                        // пауза
      n++;
    }                                    // окончание миганий задания
    delay(500);
    OutByteAssignment(7);
    delay(500);
    OutByteAssignment(0);
    digitalWrite(ledBlockButtons,HIGH);
// смотрим что навводили в массив задание
    Serial.print(" level = ");
    Serial.println(levelCurrent);
    for(byte i=0;i<10;i++)
    {
      Serial.print(assignment[i]);
      Serial.print(" ");
    }
    Serial.println("");
// окончание просмотра массива задание
    Serial.println(" GO ! Push button !!!");
    ClearReply();
    countKnopka=0;
    section=sectionIn;
    oldMillis=millis();
  }

// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(2000+levelCurrent*500))
    {
// считывание и запись нажатий кнопок в массив
      if(countKnopka<10)      // чтобы не вылезти за границы массива
      {
        if(!digitalRead(knopka1))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=1;
          countKnopka++;
        }
        if(!digitalRead(knopka2))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=2;
          countKnopka++;
        }
        if(!digitalRead(knopka3))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=4;
          countKnopka++;
        }
      }
// окончание считывания и записи нажатий кнопок в массив
    }
    else
    {
      // .........................
      digitalWrite(ledBlockButtons,LOW);
      Serial.println("...allotted time has expired !");
      section=sectionResult;
    }
  }

// sectionResult
  if(section==sectionResult)
  {
// смотрим что навводили в массив ответов
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
// окончание просмотра массива ответов
    // .........................
    section=sectionOut;
    // для прохода всех уровней на время отладки кода
    levelCurrent++;
    if(levelCurrent>10) levelCurrent=1;
    // окончание для прохода всех уровней на время отладки кода
  }
}
//=========================================================================



//====== функции ==========================================================
//=========================================================================
// фунцция получения случайного байта - 001 , 010 , 100
//=========================================================================
byte RandomByte()
{
  byte tempByte=random(1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция очистки массива "задание"
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++) { assignment[i]=0; };
}
//=========================================================================
// фунцция очистки массива "ответ"
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++) { reply[i]=0; };
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
  }
}
//=========================================================================
// фунцция вывода байта на СД "жизнь"
//=========================================================================
void OutByteLive(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,HIGH);
      break;
    }
  }
}
//=========================================================================

диспетчер enum SECTION{sectionOut,sectionIn,sectionResult}; можно убрать и прописать один флаг для секции 2, всё равно секции 1 и 3 должны выполняться линейно и безусловно... переделаю :)

guliyev34
Offline
Зарегистрирован: 17.03.2015

Serial в конце всех отладок надо обязательно убирать? Или же можно на всякий случай оставить?)  Я просто думаю, будет ли это влиять на быстродействие работы МК и память..

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

guliyev34 пишет:

Serial в конце всех отладок надо обязательно убирать? Или же можно на всякий случай оставить?)  Я просто думаю, будет ли это влиять на быстродействие работы МК и память..

для этого есть специальное решение в языке, описание в  #ifdef , #ifndef , #else , #endif
обсуждение - потом :)

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

guliyev34 пишет:

Serial в конце всех отладок надо обязательно убирать? Или же можно на всякий случай оставить?)  Я просто думаю, будет ли это влиять на быстродействие работы МК и память..

для этого есть специальное решение в языке, описание в  #ifdef , #ifndef , #else , #endif
обсуждение - потом :)

Хорошо) Тогда вечером начну отладку, и там уже буду отписываться) До вечера) 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#define DEBUG 1      // определили - ОТЛАДКА , закомментить - значит не определили

#define knopka1 2
#define knopka2 3
#define knopka3 4
  #define ledLive1 10
  #define ledLive2 9
  #define ledLive3 8
#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7
 #define ledBlockButtons 11
byte levelCurrent=1;
byte levelMax=10;
byte liveCurrent=3;
 enum SECTION{sectionOut,sectionIn,sectionResult};
 SECTION section=sectionOut;
unsigned long oldMillis;
 byte assignment[10];
 byte reply[10];
 byte countKnopka;   // колво нажатий на кнопки ввода ответа
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);
  digitalWrite(knopka1,HIGH);
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
    pinMode (ledAssignment1,OUTPUT);
    pinMode (ledAssignment2,OUTPUT);
    pinMode (ledAssignment3,OUTPUT);
    OutByteAssignment(0);
  pinMode (ledLive1,OUTPUT);
  pinMode (ledLive2,OUTPUT);
  pinMode (ledLive3,OUTPUT);
  OutByteLive(0);
    pinMode (ledBlockButtons,OUTPUT);
    digitalWrite(ledBlockButtons,LOW);
  randomSeed (analogRead(0));
   oldMillis=millis();
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    ClearAssignment();
    for(byte i=0;i<levelCurrent;i++)
    {
      if(i==0) assignment[0]=RandomByte();
      if(i>0)
      {
        byte tempByte=RandomByte();
        while(assignment[i-1]==tempByte)
        {
          tempByte=RandomByte();
        }
        assignment[i]=tempByte;
      }
    }
    for(int i=0;i<5;i++)
    {
      OutByteLive(7);
      delay(100);
      OutByteLive(0);
      delay(100);
    }
    OutByteLive(liveCurrent);
    delay(1000);
    OutByteLive(0);
    OutByteAssignment(7);
    delay(1000);
    OutByteAssignment(0);
    delay(1000);
    byte n=0;                            // начало миганий задания
    while((assignment[n]!=0)&&(n<10))
    {
      OutByteAssignment(assignment[n]);  // вкл случСД
      delay(500);                        // пауза
      OutByteAssignment(0);              // выкл случСД
      delay(500);                        // пауза
      n++;
    }                                    // окончание миганий задания
    delay(500);
    OutByteAssignment(7);
    delay(500);
    OutByteAssignment(0);
    digitalWrite(ledBlockButtons,HIGH);
#ifdef DEBUG // смотрим что навводили в массив задание В РЕЖИМЕ ОТЛАДКА
          Serial.print(" level = ");
          Serial.println(levelCurrent);
          for(byte i=0;i<10;i++)
          {
            Serial.print(assignment[i]);
            Serial.print(" ");
          }
          Serial.println("");
#endif // окончание просмотра массива задание
    Serial.println(" GO ! Push button !!!");
    ClearReply();
    countKnopka=0;
    section=sectionIn;
    oldMillis=millis();
  }

// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(2000+levelCurrent*500))
    {
// считывание и запись нажатий кнопок в массив
      if(countKnopka<10)      // чтобы не вылезти за границы массива
      {
        if(!digitalRead(knopka1))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=1;
          countKnopka++;
        }
        if(!digitalRead(knopka2))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=2;
          countKnopka++;
        }
        if(!digitalRead(knopka3))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=4;
          countKnopka++;
        }
      }
// окончание считывания и записи нажатий кнопок в массив
    }
    else
    {
      // .........................
      digitalWrite(ledBlockButtons,LOW);
      Serial.println("...allotted time has expired !");
      section=sectionResult;
    }
  }

// sectionResult
  if(section==sectionResult)
  {
#ifdef DEBUG // смотрим что навводили в массив ответов В РЕЖИМЕ ОТЛАДКА
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
#endif // окончание просмотра массива ответов В РЕЖИМЕ ОТЛАДКА
    // .........................
    section=sectionOut;
    // для прохода всех уровней на время отладки кода
    levelCurrent++;
    if(levelCurrent>10) levelCurrent=1;
    // окончание для прохода всех уровней на время отладки кода
  }
}
//=========================================================================



//====== функции ==========================================================
//=========================================================================
// фунцция получения случайного байта - 001 , 010 , 100
//=========================================================================
byte RandomByte()
{
  byte tempByte=random(1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция очистки массива "задание"
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++) { assignment[i]=0; };
}
//=========================================================================
// фунцция очистки массива "ответ"
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++) { reply[i]=0; };
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
  }
}
//=========================================================================
// фунцция вывода байта на СД "жизнь"
//=========================================================================
void OutByteLive(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,HIGH);
      break;
    }
  }
}
//=========================================================================

 

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

строка 1 - определили, закомментили - не определили

блок 93....102 и блок 151....159 - в тексте кода будут присутствовать всегда, но на компиляцию пойдут эти блоки или нет, будут выполняться операторы в этих блоках или нет - будет зависить от определения/неОпределения макроса DEBUG - строки 93, 151
код прошивки МК так же будет различен

строка 1 незакомменчена - размер кода = 5010 байт
строка 1    закомменчена - размер кода  = 4498 байт

директивы условной компиляции - #ifdef , #ifndef , #else , #endif

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

строка 1 - определили, закомментили - не определили

блок 93....102 и блок 151....159 - в тексте кода будут присутствовать всегда, но на компиляцию пойдут эти блоки или нет, будут выполняться операторы в этих блоках или нет - будет зависить от определения/неОпределения макроса DEBUG - строки 93, 151
код прошивки МК так же будет различен

строка 1 незакомменчена - размер кода = 5010 байт
строка 1    закомменчена - размер кода  = 4498 байт

директивы условной компиляции - #ifdef , #ifndef , #else , #endif

Т.е если мы закомментируем 1 строку, блоки начинающие на 93 и 151 строках не будут срабатывать? Удобно

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

строка 1 незакомменчена - размер кода = 5010 байт
строка 1    закомменчена - размер кода  = 4498 байт

Как это определили?

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

внизу

guliyev34
Offline
Зарегистрирован: 17.03.2015

Собрал схему.. Запускаю.. Но она идет не в том режиме. Не зависимо от кнопок, происходит переход на другой уровень

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

в том как и написан код....  посмотрите строки 162...165
тестовый режим - 1 , 12 , 123 , 1234 , 123456 , ..................... 12345678910 ,  1 , 12 , 123 ......... по кругу - или как-то по другому работает ?

если эти строки убрать ( блока оценки-сравнения, блока уменьшения колва жизней,  блока увеличения уровня игры ещё не написаны ) код будет в каждом лупе работать как для уровня 1

надо сейчас проверить соответствие работы кода алгоритму - а не потом из всей кучи вылавливать тараканов не зная в каком углу они засели

guliyev34
Offline
Зарегистрирован: 17.03.2015

Закомментировал эти строки: 

levelCurrent++;
  if(levelCurrent>10) levelCurrent=1;

И запускаю скетч. Что происходит: 

1. Начинают мигать СД жизни. 

2. Загораются СД задания и гаснут

3. Потом загорается 1 СД задания

4. Загораются опять все СД задания и сразу гаснут

5. Сразу после этого загорается СД, означающий что надо нажимать кнопку

6. Горит секунду где-то и гаснет. 

7. Начинают снова мигать СД жизни

Если нажать на п5 кнопку, то происходит перезагрузка 

guliyev34
Offline
Зарегистрирован: 17.03.2015

Если изменить значение levelCurrent то СД горят как надо.  Т.е если levelCurrent = 4 то СД будут мигать 4 раза . И т.д

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

тестовый режим на то и тестовый...
изменить levelCurrent , залить скетч , проверить сколько раз мигнул.... и опять - изм, залить, проверить
код с levelCurrent++; это проверку автоматизирует....
что за кнопка ? Если нажать на п5 кнопку, то происходит перезагрузка 

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

так что лучше оставить код как есть и перейти к следущей задаче...
- сравнение массивов задание и ответ, от результата делать левел+1 или жизнь-1 ( заодно и проверить как работает ввод кнопок )

что  думаете ?

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

тестовый режим на то и тестовый...
изменить levelCurrent , залить скетч , проверить сколько раз мигнул.... и опять - изм, залить, проверить
код с levelCurrent++; это проверку автоматизирует....
что за кнопка ? Если нажать на п5 кнопку, то происходит перезагрузка 

Любая кнопка

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

так что лучше оставить код как есть и перейти к следущей задаче...
- сравнение массивов задание и ответ, от результата делать левел+1 или жизнь-1 ( заодно и проверить как работает ввод кнопок )

что  думаете ?

Думаю сделать функцию для сравнения массивов задания и ответа. И вызвать ее в секции результата. Сейчас попробую. 

guliyev34
Offline
Зарегистрирован: 17.03.2015

Что скажете? Вот сама секция:

if(section==sectionResult)
  {
#ifdef DEBUG // смотрим что наводили в массив ответов В РЕЖИМЕ ОТЛАДКА
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
#endif // окончание просмотра массива ответов В РЕЖИМЕ ОТЛАДКА
    // .........................
    
    OutResult( );
    
    section=sectionOut;
  }

Вот сама функция OutResult() :

//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
void OutResult( )
{
	boolean tempByte = false;
	
	for(byte i=0;i<10;i++) 
	{ 
		if(assignment[i] != reply[i])
		{
			tempByte = !tempByte;
			break;
		}
		else tempByte = tempByte;
	}
	
	if (tempByte)
	{
		levelCurrent = levelCurrent;
		liveCurrent--;
	}
	else 
	{
		levelCurrent++;
		liveCurrent = liveCurrent;
	}
}
//=========================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
//void OutResult( )                      // в моей версии CompareArray()   :)
void CompareArray()
{
//  boolean tempByte = false;     // писать 0 или 1 - быстрее , это одно и тоже
                                  // а обозвать лучше error
  boolean error=0;
  for(byte i=0;i<10;i++) 
  { 
    if(assignment[i] != reply[i])
    {
//      tempByte = !tempByte;      // лучше не инвертировать , а присвоить явно
      error=1;
      break;                       // очень правильно ! зачем дальше крутить FOR , если уже ошибка
    }
//    else tempByte = tempByte;     // это лишнее !
  }
	
  if (error)
  {
//    levelCurrent = levelCurrent;   // это лишнее !
    liveCurrent--;
  }
  else 
  {
    levelCurrent++;
//    liveCurrent = liveCurrent;    // это лишнее ! это как постоянно доказывать, что белое = белое 
  }
}           // табуляция в сдвиге кода - 4 знакоместа много - 2 нормально,
            // это просто моё мнение и практика
            // извини что правил твой код :)-
            // фрагменты кода так и обсуждают , но
            // крайнюю полную версию на сайт !
            
            // не проверял компилятором !!!!!!!!!!!!!!!!!!!!
//=========================================================================

 

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
//void OutResult( )                      // в моей версии CompareArray()   :)
void CompareArray()
{
//  boolean tempByte = false;     // писать 0 или 1 - быстрее , это одно и тоже
                                  // а обозвать лучше error
  boolean error=0;
  for(byte i=0;i<10;i++) 
  { 
    if(assignment[i] != reply[i])
    {
//      tempByte = !tempByte;      // лучше не инвертировать , а присвоить явно
      error=1;
      break;                       // очень правильно ! зачем дальше крутить FOR , если уже ошибка
    }
//    else tempByte = tempByte;     // это лишнее !
  }
	
  if (error)
  {
//    levelCurrent = levelCurrent;   // это лишнее !
    liveCurrent--;
  }
  else 
  {
    levelCurrent++;
//    liveCurrent = liveCurrent;    // это лишнее ! это как постоянно доказывать, что белое = белое 
  }
}           // табуляция в сдвиге кода - 4 знакоместа много - 2 нормально,
            // это просто моё мнение и практика
            // извини что правил твой код :)-
            // фрагменты кода так и обсуждают , но
            // крайнюю полную версию на сайт !
            
            // не проверял компилятором !!!!!!!!!!!!!!!!!!!!
//=========================================================================

 

Ого, обрадовали))) В принципе правильно написал) Кстати, тоже думал что "else" лишнее) И что лучше присваивать явно, а не инвертировать)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
void OutResult()
{
  boolean error=0;
  for(byte i=0;i<10;i++) 
  { 
    if(assignment[i] != reply[i])
    {
      error=1;
      break;
    }
  }
  if (error)
  {
    liveCurrent--;
  }
  else 
  {
    levelCurrent++;  // после победы ( пройдено 10 уровней )
                     // можно подарить +1 жизнь и перейти к генерации случайных 2-ух из 3-ёх СД :)
  }
}
//=========================================================================

 

guliyev34
Offline
Зарегистрирован: 17.03.2015
#define DEBUG 1      // определили - ОТЛАДКА , закомментить - значит не определили

#define knopka1 2
#define knopka2 3
#define knopka3 4
  #define ledLive1 10
  #define ledLive2 9
  #define ledLive3 8
#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7
 #define ledBlockButtons 11
byte levelCurrent=1;
byte levelMax=10;
byte liveCurrent=3;
 enum SECTION{sectionOut,sectionIn,sectionResult};
 SECTION section=sectionOut;
unsigned long oldMillis;
 byte assignment[10];
 byte reply[10];
 byte countKnopka;   // колво нажатий на кнопки ввода ответа
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);
  digitalWrite(knopka1,HIGH);
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
    pinMode (ledAssignment1,OUTPUT);
    pinMode (ledAssignment2,OUTPUT);
    pinMode (ledAssignment3,OUTPUT);
    OutByteAssignment(0);
  pinMode (ledLive1,OUTPUT);
  pinMode (ledLive2,OUTPUT);
  pinMode (ledLive3,OUTPUT);
  OutByteLive(0);
    pinMode (ledBlockButtons,OUTPUT);
    digitalWrite(ledBlockButtons,LOW);
  randomSeed (analogRead(0));
   oldMillis=millis();
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    ClearAssignment();
    for(byte i=0;i<levelCurrent;i++)
    {
      if(i==0) assignment[0]=RandomByte();
      if(i>0)
      {
        byte tempByte=RandomByte();
        while(assignment[i-1]==tempByte)
        {
          tempByte=RandomByte();
        }
        assignment[i]=tempByte;
      }
    }
    for(int i=0;i<5;i++)
    {
      OutByteLive(7);
      delay(100);
      OutByteLive(0);
      delay(100);
    }
    OutByteLive(liveCurrent);
    delay(1000);
    OutByteLive(0);
    OutByteAssignment(7);
    delay(1000);
    OutByteAssignment(0);
    delay(1000);
    byte n=0;                            // начало миганий задания
    while((assignment[n]!=0)&&(n<10))
    {
      OutByteAssignment(assignment[n]);  // вкл случСД
      delay(500);                        // пауза
      OutByteAssignment(0);              // выкл случСД
      delay(500);                        // пауза
      n++;
    }                                    // окончание миганий задания
    delay(500);
    OutByteAssignment(7);
    delay(500);
    OutByteAssignment(0);
    digitalWrite(ledBlockButtons,HIGH);
#ifdef DEBUG // смотрим что навводили в массив задание В РЕЖИМЕ ОТЛАДКА
          Serial.print(" level = ");
          Serial.println(levelCurrent);
          for(byte i=0;i<10;i++)
          {
            Serial.print(assignment[i]);
            Serial.print(" ");
          }
          Serial.println("");
#endif // окончание просмотра массива задание
    Serial.println(" GO ! Push button !!!");
    ClearReply();
    countKnopka=0;
    section=sectionIn;
    oldMillis=millis();
  }

// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(2000+levelCurrent*500))
    {
// считывание и запись нажатий кнопок в массив
      if(countKnopka<10)      // чтобы не вылезти за границы массива
      {
        if(!digitalRead(knopka1))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=1;
          countKnopka++;
        }
        if(!digitalRead(knopka2))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=2;
          countKnopka++;
        }
        if(!digitalRead(knopka3))
        {
          delay(50);            // для антидребезга контактов кнопки
          reply[countKnopka]=4;
          countKnopka++;
        }
      }
// окончание считывания и записи нажатий кнопок в массив
    }
    else
    {
      // .........................
      digitalWrite(ledBlockButtons,LOW);
      Serial.println("...allotted time has expired !");
      section=sectionResult;
    }
  }

// sectionResult
  if(section==sectionResult)
  {
#ifdef DEBUG // смотрим что навводили в массив ответов В РЕЖИМЕ ОТЛАДКА
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
#endif // окончание просмотра массива ответов В РЕЖИМЕ ОТЛАДКА
    // .........................
    CompareArray();
    section=sectionOut;

  }
}
//=========================================================================



//====== функции ==========================================================
//=========================================================================
// фунцция получения случайного байта - 001 , 010 , 100
//=========================================================================
byte RandomByte()
{
  byte tempByte=random(1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция очистки массива "задание"
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++) { assignment[i]=0; };
}
//=========================================================================
// фунцция очистки массива "ответ"
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++) { reply[i]=0; };
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
  }
}
//=========================================================================
// фунцция вывода байта на СД "жизнь"
//=========================================================================
void OutByteLive(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,HIGH);
      break;
    }
  }
}
//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
void CompareArray()

{
	boolean error=0;
	
	for(byte i=0;i<10;i++) 
	{ 
		if(assignment[i] != reply[i])
		{
		error=1;
		break;
		}
	}
		if (error)
		{
		liveCurrent--;
		}
		else 
		{
		levelCurrent++;
		}
}
//=========================================================================

 

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
void OutResult()
{
  boolean error=0;
  for(byte i=0;i<10;i++) 
  { 
    if(assignment[i] != reply[i])
    {
      error=1;
      break;
    }
  }
  if (error)
  {
    liveCurrent--;
  }
  else 
  {
    levelCurrent++;  // после победы ( пройдено 10 уровней )
                     // можно подарить +1 жизнь и перейти к генерации случайных 2-ух из 3-ёх СД :)
  }
}
//=========================================================================

 

Интересная идея) 

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

я не радовал - это ВЫ сибя порадовали :)

теперь надо игроку как-то сообщить , каков результат его нажатий... щас предложу...

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

я не радовал - это ВЫ сибя порадовали :)

теперь надо игроку как-то сообщить , каков результат его нажатий... щас предложу...

Вы мне в этом помогли)) 

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

по законам мнемоники и зрительной ассоциации примерно так...

решение неправильное - СД_зад мигают часто 200 ( далее всё в миллисекундах ), тухнут, СД_реш мигают часто 200, тухнут....
                                       таких перемаргиваний достаточно понять что зад и реш разные

решение правильное - СД_зад и СД_реш вместе, синхронно, медленно мигают три...пять раз

такой подход надо применить для описания всех событий, зафункцить их и убрать из лупа слабопонятные куски кода...
выше я уже предложил вариант для вывода колва жизней - частое мигание СД_жизнь, затем вывод колва...

надо обозначить сигналами такими события :

- вывод колва жизней ( выше )
- начало вывода задания
- начало ввода ответа
окончание ввода ответа
- ответ правильный
- ответ ошибочный
- и т.д.

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

давай крайний код и результат работы - соответствует задуманному или нет
надо убрать все косяки щас ( если есть ) , а не иттить дальше в погоне за результатом... потом хрен эти косяки найдёшь в общей куче...

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

SU-27-16 пишет:

надо обозначить сигналами такими события :

- вывод колва жизней ( выше )
- начало вывода задания
- начало ввода ответа
окончание ввода ответа
- ответ правильный
- ответ ошибочный
- и т.д.

под "и т.д" что еще? Вы вроде все события описали) 

Ну давайте начнем по порядку:

1. Вывод кол-ва жизней у нас есть. Кстати, можно ли сделать чтобы индикатор уровня горел постоянно? Или это не рационально? Т.е на всем протяжении игры показывает наш текущий уровень. И не придется что-то придумывать, если мы не угодали с ответом. Просто уровень жизни уменьшится на 1, это будет видно) 

2. Начало вывода задания: все 3 СД загорятся на 1000 мс, потухнут на 1000 мс). Далее пойдет само задание

3. Начало ввода ответа уже сделали "подсветкой кнопок" переменной ledBlockButtons 

4. Окончание ввода ответа. Вообще думаю можно сделать так. Но это лишь идея, хотя думаю реализовать возможно. Как только начался ввод ответа, загорается светодиод подсветки. Далее начинает моргать с определенной частотой. Чем меньше времени остается на ввод, тем больше частота миганий. И игрок понимает что у него заканчивается время на ввод. Но это так, идея) А так, об окончании ввода ответа сигнализирует подсветка, как только потухла ввод завершен. 

5. Ответ правильный -  горят СД задания. Ответ неправильный (если будет выполнен п1 чтобы СД жизни горели постоянно, то просто жизнь уменьшить) . 

6. Конец игры обозначить Миганием СД жизни и Сд задания синхронно. 

Думаю как то так) 

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

надо обозначить сигналами такими события :

- вывод колва жизней ( выше )
- начало вывода задания
- начало ввода ответа
окончание ввода ответа
- ответ правильный
- ответ ошибочный
- и т.д.

под "и т.д" что еще? Вы вроде все события описали) 

Ну давайте начнем по порядку:

1. Вывод кол-ва жизней у нас есть. Кстати, можно ли сделать чтобы индикатор уровня горел постоянно? Или это не рационально? Т.е на всем протяжении игры показывает наш текущий уровень. И не придется что-то придумывать, если мы не угодали с ответом. Просто уровень жизни уменьшится на 1, это будет видно) 

2. Начало вывода задания: все 3 СД загорятся на 1000 мс, потухнут на 1000 мс). Далее пойдет само задание

3. Начало ввода ответа уже сделали "подсветкой кнопок" переменной ledBlockButtons 

4. Окончание ввода ответа. Вообще думаю можно сделать так. Но это лишь идея, хотя думаю реализовать возможно. Как только начался ввод ответа, загорается светодиод подсветки. Далее начинает моргать с определенной частотой. Чем меньше времени остается на ввод, тем больше частота миганий. И игрок понимает что у него заканчивается время на ввод. Но это так, идея) А так, об окончании ввода ответа сигнализирует подсветка, как только потухла ввод завершен. 

5. Ответ правильный -  горят СД задания. Ответ неправильный (если будет выполнен п1 чтобы СД жизни горели постоянно, то просто жизнь уменьшить) . 

6. Конец игры обозначить Миганием СД жизни и Сд задания синхронно. 

Думаю как то так) 

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

Ахтубинск, Кап-Яр - прикольные полигоны :)

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

задача программиста - предусмотреть все варианты-исходы-события... для этого рисуется ГРАФ состояний КОНЕЧНОГО АППАРАТА ( ваша игралка - это он и есть )
моя перечислил не все состояния события - я только показал куда смотреть, что продумать

ваш проект, ваши решения ! - результатом конечной игрушки должно быть отсутствие восклицаний любого игрока "я правильно сделал, чё эта херня мигала я не понял - поэтому и ошибся"

вы, как составитель программы, всё поймёте ( ибо сами всё написали ) , а игрок интуитивно-мнемонически имеет право понимать что происходит и на каком этапе игры он находится...

....обсуждать как подмигнуть "события" моя не желает :(
как решить какие-то проблемки - да :)

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

Ахтубинск, Кап-Яр - прикольные полигоны :)

Это точно)

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

задача программиста - предусмотреть все варианты-исходы-события... для этого рисуется ГРАФ состояний КОНЕЧНОГО АППАРАТА ( ваша игралка - это он и есть )
моя перечислил не все состояния события - я только показал куда смотреть, что продумать

ваш проект, ваши решения ! - результатом конечной игрушки должно быть отсутствие восклицаний любого игрока "я правильно сделал, чё эта херня мигала я не понял - поэтому и ошибся"

вы, как составитель программы, всё поймёте ( ибо сами всё написали ) , а игрок интуитивно-мнемонически имеет право понимать что происходит и на каком этапе игры он находится...

....обсуждать как подмигнуть "события" моя не желает :(
как решить какие-то проблемки - да :)

Ну тогда давайте думать) Можно ли реализовать постоянную индикацию жизни?) 

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

да, в начале лупа высветили начальное значение и забыли....
в секции_3 оно или не изменится, или уменьшится - что оператор ( функция ) в начале лупа успешно и отобразит...

мысли....
жизней 3 - диодов 3 , заданий 1 из 3 - диодов 3 , уровней 10 - куда выводить хз ?
надо добить этот проект или переходить сразу выше... ( там пригодятся все познания познанные ранее ) :)

семисегментные индикаторы на - жизнь, уровень игры , СД на режимы - готовность, вывод, ввод, правильно, ошибка....

задумали - 3хСД_зад , 3хСД_реш , СД_блокКнопок , 3 х кнопки....
...доведите проект до конца , улучшаться нуно потОм :)

Ну тогда давайте думать) Можно ли реализовать постоянную индикацию жизни?) 
фигВам ! думать вам - ответить на вопросы могу :)

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

да, в начале лупа высветили начальное значение и забыли....
в секции_3 оно или не изменится, или уменьшится - что оператор ( функция ) в начале лупа успешно и отобразит...

мысли....
жизней 3 - диодов 3 , заданий 1 из 3 - диодов 3 , уровней 10 - куда выводить хз ?
надо добить этот проект или переходить сразу выше... ( там пригодятся все познания познанные ранее ) :)

семисегментные индикаторы на - жизнь, уровень игры , СД на режимы - готовность, вывод, ввод, правильно, ошибка....

задумали - 3хСД_зад , 3хСД_реш , СД_блокКнопок , 3 х кнопки....
...доведите проект до конца , улучшаться нуно потОм :)

Ну тогда давайте думать) Можно ли реализовать постоянную индикацию жизни?) 
фигВам ! думать вам - ответить на вопросы могу :)

Понял) Тогда ответьте, Можно ли реализовать постоянную индикацию жизни?) Чтобы на всех этапах игры она горела) 

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

не путай миня, Алиса ! ( это Кролик так говорил Алисе ) :)- моя уже ответил
...см. выше #240
да, в начале лупа высветили начальное значение и забыли....
в секции_3 оно или не изменится, или уменьшится - что оператор ( функция ) в начале лупа успешно и отобразит... 

...этим решением вы исключаете секцию из 3-ёх СД_жизнь из возможности сигнализации о состоянии системы :(
...продумай систему сигнализации игроку - где он щас ( этап игры ) , сколько всего у него..... , начало этапов игры

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

давай на ТЫ ? писать "ответьте" дольше чем "ответь" - как и в коде для МК - оптимизация кода :)

dennnissska
Offline
Зарегистрирован: 22.02.2015

Здравствуйте, ребята извените что втыкаюсь в эту тему со своими проблемами, просто не хочу создовать лишнию тему, я тоже запутался со скетчем, мне нужно чтоб после 12 мигания светодиода процесс прекращался даже при нажатой кнопке. Если нажать и отпустить кнопку, по скетч работает как надо, а при удержании повторяется с начала, я понимаю что не хватает чего то в скетче ( но не хватает по той причине что у меня мозгов не хватает понять что же не хватает в скетче))))) 

Кто знает как решить вопрос подскажите ( вопрос про скетч, не про мозги)))

 

http://arduino.ru/forum/programmirovanie/problemy-so-sketchem-ili-sam-se...

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

просто не хочу создовать лишнию тему

а придётся :)
...поймите сами - разговаривать с более чем 1 - гораздо труднее... а если вклинившихся будет челов 7 ? ...ужас !
это - как влезть в диалог ( где вас никто не ждёт )

http://arduino.ru/forum/obshchii/sozdanie-temy

а здесь оставьте ссылку на новую тему, т.е. - куда вы ушли.... так принято ЗДЕСя :)

здесь знают и про как код рихтануть и как мозги :)-

dennnissska
Offline
Зарегистрирован: 22.02.2015

Спасибо за ответ.

Новую так новую) про мозги тоже согласен, вправить тут их могут))))

guliyev34
Offline
Зарегистрирован: 17.03.2015

SU-27-16 пишет:

давай на ТЫ ? писать "ответьте" дольше чем "ответь" - как и в коде для МК - оптимизация кода :)

Давай) 

guliyev34
Offline
Зарегистрирован: 17.03.2015

Так.. Что-то не то.. Я запускаю скетч. Проверка СД проходит нормально. Далее показывается задание. Потом загорается светодиод подсветки. Я нажимаю кнопку и тут бах индикация жизни моргает и начинается сначала (как буд-то нажали кнопку ресет)

guliyev34
Offline
Зарегистрирован: 17.03.2015

Вот что выдает сериал:

 level = 1
2 0 0 0 0 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
0 0 0 0 0 0 0 0 0 0 
************************
 level = 1
2 0 0 0 0 0 0 0 0 0 
 GO ! Push button !!!

Первый уровень. Он делает случайное число. Запускает светодиод. Потом дает игроку возможность ввода строкой :  GO ! Push button !!! Если не нажимает игрок выдает ...allotted time has expired ! Если нажимаю, то ничего больше не происходит... Хотя должны срабатывать вот эти строки:

// sectionResult
  if(section==sectionResult)
  {
#ifdef DEBUG // смотрим что навводили в массив ответов В РЕЖИМЕ ОТЛАДКА
    for(byte i=0;i<10;i++)
    {
      Serial.print(reply[i]);
      Serial.print(" ");
    }
    Serial.println("");
    Serial.println("************************");
#endif // окончание просмотра массива ответов В РЕЖИМЕ ОТЛАДКА
    // .........................
    CompareArray();
    section=sectionOut;

  }
}

Serial тут не запускается... Такое ощущение что не проходит в эту секцию

 

 

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

guliyev34 пишет:

Так.. Что-то не то.. Я запускаю скетч. Проверка СД проходит нормально. Далее показывается задание. Потом загорается светодиод подсветки. Я нажимаю кнопку и тут бах индикация жизни моргает и начинается сначала (как буд-то нажали кнопку ресет)

придётся собрать схемку, а не виртуально обсуждать :)    отпишусь