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

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

Тут вопросов нет. Это я понимаю. Т.е весь мой большой цикл про индикацию жизни вывести в функцию. Так же сделать и со всем остальным.

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

да ну нах ......
не более 125 ! ответим на все ( когда не на смену, не супружеский долг, или ВВ приехал/прилетел в СПб )

 

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

SU-27-16 пишет:

да ну нах ......
не более 125 ! ответим на все ( когда не на смену, не супружеский долг, или ВВ приехал/прилетел в СПб )

 


Хорошо) я завтра почитаю и попробую сделать) буду по ходу задавать вопросы что не понятно)

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

SU-27-16 пишет:

да ну нах ......
не более 125 ! ответим на все ( когда не на смену, не супружеский долг, или ВВ приехал/прилетел в СПб )

ФСО ! у миня друг ВВ.... спасибо, что разблокироали...... через 3 мин.....

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

ой, по #152 - проблема, кажися..... :(

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

guliyev34 пишет:
SU-27-16 пишет:

да ну нах ......
не более 125 ! ответим на все ( когда не на смену, не супружеский долг, или ВВ приехал/прилетел в СПб )

Хорошо) я завтра почитаю и попробую сделать) буду по ходу задавать вопросы что не понятно)

хорошо....
коды и картинки - не плохого бы

разблокировали :)

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

SU-27-16 пишет:

guliyev34 пишет:
SU-27-16 пишет:

да ну нах ......
не более 125 ! ответим на все ( когда не на смену, не супружеский долг, или ВВ приехал/прилетел в СПб )

Хорошо) я завтра почитаю и попробую сделать) буду по ходу задавать вопросы что не понятно)

хорошо....
коды и картинки - не плохого бы

разблокировали :)

Хорошо,  я попробую

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

Функция с работой индикации жизни. Передаем в функцию текущее значение жизней и в зависимости от этого значения меняется индикация на панели.

void dead (int a)
  {
      if (a == 0)
      {
        for (int i = 0 ; i < 3 ; i++) 
        {
        digitalWrite(ledDead1 , HIGH);
        digitalWrite(ledDead2 , HIGH);
        digitalWrite(ledDead3 , HIGH);
        delay(500);
        digitalWrite(ledDead1 , LOW);
        digitalWrite(ledDead2 , LOW);
        digitalWrite(ledDead3 , LOW);
        delay(500);  
        }  
      }
      else if (a == 1)
      {
        digitalWrite(ledDead1 , HIGH);
        digitalWrite(ledDead2 , LOW);
        digitalWrite(ledDead3 , LOW);        
      }
      else if (a == 2)
      {
        digitalWrite(ledDead1 , HIGH);
        digitalWrite(ledDead2 , HIGH);
        digitalWrite(ledDead3 , LOW);       
      }
      else if (a == 3)
      {
        digitalWrite(ledDead1 , HIGH);
        digitalWrite(ledDead2 , HIGH);
        digitalWrite(ledDead3 , HIGH);        
      }
  }

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#define knopka1 2
#define knopka2 3
#define knopka3 4

#define ledDead1 10
#define ledDead2 9
#define ledDead3 8

#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7

#define ledBlockButtons 11  // подсветка блока кнопок

byte levelCurrent=1;
byte levelMax=10;
byte deadStart=3;

enum SECTION{sectionOut,sectionIn,sectionResult};
SECTION section=sectionOut;

unsigned long oldMillis;

byte assignment[10];    // массив для "задание"
byte reply[10];         // массив для "ответ"

//=========================================================================
// фунцция очистки массива "задание" - без параметров и без возвращыемого значения
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++)
  {
    assignment[i]=0;
  }
}
//=========================================================================
// фунцция очистки массива "ответ" - без параметров и без возвращыемого значения
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++)
  {
    reply[i]=0;
  }
}
//=========================================================================
// фунцция получения случайного байта - без параметров, есть возвращаемое значение
// B001=1 , B010=2 , B011=3
// B011=3 переделаем в B100=4
// функция вернёт или 1 , или 2 , или 4  >>>  001 , 010 , 100
// что в двоичном позиционном коде будет соответствовать СД_1, СД_2, СД_3
//=========================================================================
byte randomByte()
{
  byte tempByte = random (1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для вsключения всех трёх СД_задание
    {
      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 3 :
    {
      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(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,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
  }
  if(_n>2)
  {
  digitalWrite(ledAssignment1,HIGH);
  digitalWrite(ledAssignment2,HIGH);
  digitalWrite(ledAssignment3,HIGH);
  }
}
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);    // кнопки переподключите по схеме 1
  digitalWrite(knopka1,HIGH); // включение подтяжки внутренним резистором на 20 kOm , внешние можно убрать
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
  
  pinMode (ledAssignment1,OUTPUT);
  pinMode (ledAssignment2,OUTPUT);
  pinMode (ledAssignment3,OUTPUT);
  OutByteAssignment(0);   // погасили СД "задание"
  
  pinMode (ledDead1,OUTPUT);
  pinMode (ledDead2,OUTPUT);
  pinMode (ledDead3,OUTPUT);
  OutByteLive(0);         // погасили СД "жизнь"
  
  pinMode (ledBlockButtons,OUTPUT);
  digitalWrite(ledBlockButtons,LOW);
  
  randomSeed (analogRead(0));
  
  oldMillis=millis();   // засечка времени в системе МК - "вкл. секундомера"
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    // подготовка массива "задание"
    // в массив "задание" пишем столько случайных байт - какой номер уровеня игры
    // для пятого уровня массив МОЖЕТ иметь вид
    // {1,1,2,4,2,0,0,0,0,0}
    ClearAssignment();        // очистили массив "задание"
    for(byte i=0;i<levelCurrent;i++) { assignment[i]=randomByte(); }
    // задание готово
    // включили СД_жизнь на секунду
    OutByteLive(deadStart);
    delay(1000);
    // выключили СД_жизнь
    OutByteLive(0);
    // помигали СД_жизнь на секунду и выключили
    // функция мигания СД_жизнь в течении секунды
    // включили ТРИ СД_задание на секунду
    OutByteAssignment(7);
    delay(1000);
    // выключили ТРИ СД_задание - СТАРТ вывода задания
    OutByteAssignment(0);
    // через секунду начинаем вывод задания
    delay(1000);
    // функция вывода задания
    delay(1000);
    // включаем подсветку блока кнопок - ввод ответа разрешён
    digitalWrite(ledBlockButtons,HIGH);
    ClearReply();             // очистили массив "задание"
    section=sectionIn;        // переход к выполнению sectionIn
    oldMillis=millis();       // засечка времени в системе МК - "вкл. секундомера"
  }
  
  
  
// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<1000)    // делаем что-то пока разница
                                     // текущего времени МК и секундомера не станет больше 1 секунды
                                     // т.е. - это время на принятие решения и нажатия кнопок
    {
      // нажатие кнопок, формирование результата ответа
      // .........................
      // .........................
      // .........................
    }
    else
    {
      // выключить подсветку блока кнопок - время на ввод истекло
      digitalWrite(ledBlockButtons,LOW);
      section=sectionResult;    // переход к выполнению sectionIn
      // .........................
      // .........................
      // .........................
    }
  }
  
  
  
// sectionResult
  if(section==sectionResult)
  {
    // .........................
    // .........................
    // .........................
    section=sectionOut;       // переход к выполнению sectionOut
  }
}
//=========================================================================

добавлено много "кирпичиков", которые помогают делать читабельным код

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

в вашем #158 строки 5....15 - это трёхкратное мигание о том что конец игры ?

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

аналог вашей функции в моём коде в строке 107 ( для аргумента в ней хватит и байта ) -  void OutByteLive(byte _n)

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

функцию вывода байта на отображение можно сделать универсальной для СД_задание и СД_жизнь, а неё будет два аргумента - на какие СД выводить и что выводить.... я пока не знаю как прописать аргумент_1 :(
....может быть kisoft заглянет подскажет ?

отобразить СД_з и СД_ж в два массива по три значения и 

void OutByte(имяМассива,byte _n) ?

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];         // массив для "ответ"
//=========================================================================
void setup()
{
  Serial.begin (9600);
  pinMode (knopka1,INPUT);    // кнопки переподключите по схеме 1
  digitalWrite(knopka1,HIGH); // включение подтяжки внутренним резистором на 20 kOm , внешние можно убрать
  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)
  {
// контроль
Serial.print(" level = ");
Serial.println(levelCurrent);
    ClearAssignment();
    for(byte i=0;i<levelCurrent;i++) { assignment[i]=randomByte(); }
    // помигали СД_жизнь на секунду и выключили
    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)
    {
      OutByteAssignment(assignment[n]);
// контроль
Serial.println(assignment[n]);
      delay(500);
      n++;
    }    
    delay(500);
    // вкл три СД_задание на полсекунды - вывод закончен
    OutByteAssignment(7);
    delay(500);
    OutByteAssignment(0);
    // включаем подсветку блока кнопок - ввод ответа разрешён
    digitalWrite(ledBlockButtons,HIGH);
    ClearReply();             // очистили массив "ответ"
    section=sectionIn;        // переход к выполнению sectionIn
    oldMillis=millis();       // засечка времени в системе МК - "вкл. секундомера"
  }

// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(1000+levelCurrent*200))
    {
// контроль
Serial.print("....waiting ");  Serial.print(millis()-oldMillis);  Serial.println(" mS");
      // делаем что-то пока разница
      // текущего времени МК и секундомера не станет больше
      // 1 сек - в уровне 1
      // 1,2 сек - в уровне 2
                                     
      // 2 сек - в уровне 5
                                     
      // 2,6 сек - в уровне 8
      // т.е. - это время на принятие решения и нажатия кнопок
      // нажатие кнопок, формирование результата ответа
      // .........................
      // .........................
      // .........................
    }
    else
    {
      // выключить подсветку блока кнопок - время на ввод истекло
      digitalWrite(ledBlockButtons,LOW);
      section=sectionResult;    // переход к выполнению sectionIn
      // .........................
      // .........................
      // .........................
    }
  }

// sectionResult
  if(section==sectionResult)
  {
    // .........................
    // .........................
    // .........................
    
// контроль
Serial.println("***********************");
levelCurrent++;
if(levelCurrent==10) levelCurrent=1;
delay(1000);
    
    section=sectionOut;       // переход к выполнению 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;
    }
  }
}
//=========================================================================
SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
 level = 1
1
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 20 mS
....waiting 40 mS
....waiting 60 mS
....waiting 79 mS
....waiting 99 mS
....waiting 119 mS
....waiting 140 mS
....waiting 160 mS
....waiting 182 mS
....waiting 202 mS
....waiting 223 mS
....waiting 244 mS
....waiting 265 mS
....waiting 285 mS
....waiting 307 mS
....waiting 327 mS
....waiting 348 mS
....waiting 369 mS
....waiting 390 mS
....waiting 410 mS
....waiting 431 mS
....waiting 452 mS
....waiting 472 mS
....waiting 493 mS
....waiting 514 mS
....waiting 535 mS
....waiting 555 mS
....waiting 577 mS
....waiting 597 mS
....waiting 618 mS
....waiting 639 mS
....waiting 660 mS
....waiting 680 mS
....waiting 702 mS
....waiting 722 mS
....waiting 743 mS
....waiting 763 mS
....waiting 785 mS
....waiting 805 mS
....waiting 826 mS
....waiting 847 mS
....waiting 868 mS
....waiting 888 mS
....waiting 910 mS
....waiting 930 mS
....waiting 951 mS
....waiting 972 mS
....waiting 993 mS
....waiting 1013 mS
....waiting 1036 mS
....waiting 1057 mS
....waiting 1079 mS
....waiting 1101 mS
....waiting 1123 mS
....waiting 1144 mS
....waiting 1167 mS
....waiting 1188 mS
....waiting 1210 mS
***********************
 level = 2
2
4
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 19 mS
....waiting 40 mS
....waiting 59 mS
....waiting 79 mS
....waiting 99 mS
....waiting 118 mS
....waiting 139 mS
....waiting 159 mS
....waiting 181 mS
....waiting 201 mS
....waiting 222 mS
....waiting 243 mS
....waiting 264 mS
....waiting 284 mS
....waiting 306 mS
....waiting 326 mS
....waiting 347 mS
....waiting 368 mS
....waiting 389 mS
....waiting 409 mS
....waiting 431 mS
....waiting 451 mS
....waiting 472 mS
....waiting 492 mS
....waiting 514 mS
....waiting 534 mS
....waiting 555 mS
....waiting 576 mS
....waiting 597 mS
....waiting 617 mS
....waiting 639 mS
....waiting 659 mS
....waiting 680 mS
....waiting 701 mS
....waiting 722 mS
....waiting 742 mS
....waiting 764 mS
....waiting 784 mS
....waiting 805 mS
....waiting 825 mS
....waiting 847 mS
....waiting 867 mS
....waiting 888 mS
....waiting 909 mS
....waiting 929 mS
....waiting 950 mS
....waiting 971 mS
....waiting 992 mS
....waiting 1012 mS
....waiting 1035 mS
....waiting 1056 mS
....waiting 1078 mS
....waiting 1101 mS
....waiting 1122 mS
....waiting 1144 mS
....waiting 1166 mS
....waiting 1188 mS
....waiting 1209 mS
....waiting 1232 mS
....waiting 1253 mS
....waiting 1275 mS
....waiting 1297 mS
....waiting 1319 mS
....waiting 1340 mS
....waiting 1363 mS
....waiting 1384 mS
....waiting 1406 mS
***********************
 level = 3
1
4
4
....waiting 0 mS
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 20 mS
....waiting 39 mS
....waiting 60 mS
....waiting 79 mS
....waiting 99 mS
....waiting 118 mS
....waiting 140 mS
....waiting 160 mS
....waiting 181 mS
....waiting 202 mS
....waiting 223 mS
....waiting 243 mS
....waiting 265 mS
....waiting 285 mS
....waiting 305 mS
....waiting 327 mS
....waiting 347 mS
....waiting 368 mS
....waiting 389 mS
....waiting 410 mS
....waiting 430 mS
....waiting 451 mS
....waiting 472 mS
....waiting 493 mS
....waiting 513 mS
....waiting 535 mS
....waiting 555 mS
....waiting 576 mS
....waiting 597 mS
....waiting 618 mS
....waiting 638 mS
....waiting 660 mS
....waiting 680 mS
....waiting 701 mS
....waiting 722 mS
....waiting 743 mS
....waiting 763 mS
....waiting 784 mS
....waiting 805 mS
....waiting 826 mS
....waiting 846 mS
....waiting 868 mS
....waiting 888 mS
....waiting 909 mS
....waiting 930 mS
....waiting 951 mS
....waiting 971 mS
....waiting 993 mS
....waiting 1013 mS
....waiting 1035 mS
....waiting 1057 mS
....waiting 1079 mS
....waiting 1100 mS
....waiting 1123 mS
....waiting 1144 mS
....waiting 1166 mS
....waiting 1188 mS
....waiting 1210 mS
....waiting 1231 mS
....waiting 1254 mS
....waiting 1275 mS
....waiting 1297 mS
....waiting 1318 mS
....waiting 1341 mS
....waiting 1362 mS
....waiting 1384 mS
....waiting 1406 mS
....waiting 1428 mS
....waiting 1449 mS
....waiting 1472 mS
....waiting 1493 mS
....waiting 1515 mS
....waiting 1537 mS
....waiting 1559 mS
....waiting 1580 mS
....waiting 1603 mS
***********************
 level = 4
2
2
2
1
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 20 mS
....waiting 39 mS
....waiting 60 mS
....waiting 79 mS
....waiting 99 mS
....waiting 119 mS
....waiting 140 mS
....waiting 160 mS
....waiting 182 mS
....waiting 202 mS
....waiting 222 mS
....waiting 244 mS
....waiting 264 mS
....waiting 285 mS
....waiting 305 mS
....waiting 327 mS
....waiting 347 mS
....waiting 368 mS
....waiting 389 mS
....waiting 410 mS
....waiting 430 mS
....waiting 452 mS
....waiting 472 mS
....waiting 493 mS
....waiting 514 mS
....waiting 535 mS
....waiting 555 mS
....waiting 577 mS
....waiting 597 mS
....waiting 618 mS
....waiting 638 mS
....waiting 660 mS
....waiting 680 mS
....waiting 701 mS
....waiting 722 mS
....waiting 743 mS
....waiting 763 mS
....waiting 785 mS
....waiting 805 mS
....waiting 826 mS
....waiting 847 mS
....waiting 868 mS
....waiting 888 mS
....waiting 910 mS
....waiting 930 mS
....waiting 951 mS
....waiting 971 mS
....waiting 993 mS
....waiting 1013 mS
....waiting 1034 mS
....waiting 1057 mS
....waiting 1079 mS
....waiting 1100 mS
....waiting 1123 mS
....waiting 1144 mS
....waiting 1166 mS
....waiting 1188 mS
....waiting 1210 mS
....waiting 1231 mS
....waiting 1254 mS
....waiting 1275 mS
....waiting 1297 mS
....waiting 1319 mS
....waiting 1341 mS
....waiting 1362 mS
....waiting 1385 mS
....waiting 1406 mS
....waiting 1428 mS
....waiting 1450 mS
....waiting 1472 mS
....waiting 1493 mS
....waiting 1516 mS
....waiting 1537 mS
....waiting 1559 mS
....waiting 1581 mS
....waiting 1603 mS
....waiting 1624 mS
....waiting 1647 mS
....waiting 1668 mS
....waiting 1690 mS
....waiting 1712 mS
....waiting 1734 mS
....waiting 1755 mS
....waiting 1778 mS
....waiting 1799 mS
***********************
 level = 5
4
1
2
2
2
....waiting 0 mS
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 19 mS
....waiting 38 mS
....waiting 59 mS
....waiting 78 mS
....waiting 98 mS
....waiting 117 mS
....waiting 139 mS
....waiting 159 mS
....waiting 180 mS
....waiting 201 mS
....waiting 222 mS
....waiting 242 mS
....waiting 264 mS
....waiting 284 mS
....waiting 305 mS
....waiting 326 mS
....waiting 347 mS
....waiting 367 mS
....waiting 388 mS
....waiting 409 mS
....waiting 430 mS
....waiting 450 mS
....waiting 472 mS
....waiting 492 mS
....waiting 513 mS
....waiting 534 mS
....waiting 555 mS
....waiting 575 mS
....waiting 597 mS
....waiting 617 mS
....waiting 637 mS
....waiting 659 mS
....waiting 679 mS
....waiting 700 mS
....waiting 720 mS
....waiting 742 mS
....waiting 762 mS
....waiting 783 mS
....waiting 804 mS
....waiting 825 mS
....waiting 845 mS
....waiting 867 mS
....waiting 887 mS
....waiting 908 mS
....waiting 929 mS
....waiting 950 mS
....waiting 970 mS
....waiting 992 mS
....waiting 1012 mS
....waiting 1034 mS
....waiting 1055 mS
....waiting 1078 mS
....waiting 1099 mS
....waiting 1121 mS
....waiting 1143 mS
....waiting 1165 mS
....waiting 1186 mS
....waiting 1209 mS
....waiting 1230 mS
....waiting 1252 mS
....waiting 1274 mS
....waiting 1296 mS
....waiting 1317 mS
....waiting 1340 mS
....waiting 1361 mS
....waiting 1383 mS
....waiting 1405 mS
....waiting 1427 mS
....waiting 1448 mS
....waiting 1471 mS
....waiting 1493 mS
....waiting 1514 mS
....waiting 1537 mS
....waiting 1558 mS
....waiting 1580 mS
....waiting 1602 mS
....waiting 1624 mS
....waiting 1645 mS
....waiting 1668 mS
....waiting 1689 mS
....waiting 1711 mS
....waiting 1733 mS
....waiting 1755 mS
....waiting 1776 mS
....waiting 1799 mS
....waiting 1820 mS
....waiting 1842 mS
....waiting 1864 mS
....waiting 1886 mS
....waiting 1907 mS
....waiting 1930 mS
....waiting 1951 mS
....waiting 1973 mS
....waiting 1995 mS
***********************
 level = 6
2
4
1
4
1
1
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 20 mS
....waiting 40 mS
....waiting 60 mS
....waiting 79 mS
....waiting 98 mS
....waiting 119 mS
....waiting 139 mS
....waiting 160 mS
....waiting 181 mS
....waiting 202 mS
....waiting 222 mS
....waiting 244 mS
....waiting 264 mS
....waiting 285 mS
....waiting 306 mS
....waiting 327 mS
....waiting 347 mS
....waiting 368 mS
....waiting 389 mS
....waiting 410 mS
....waiting 430 mS
....waiting 452 mS
....waiting 472 mS
....waiting 493 mS
....waiting 514 mS
....waiting 535 mS
....waiting 555 mS
....waiting 577 mS
....waiting 597 mS
....waiting 618 mS
....waiting 639 mS
....waiting 660 mS
....waiting 680 mS
....waiting 701 mS
....waiting 722 mS
....waiting 743 mS
....waiting 763 mS
....waiting 785 mS
....waiting 805 mS
....waiting 825 mS
....waiting 847 mS
....waiting 867 mS
....waiting 888 mS
....waiting 909 mS
....waiting 930 mS
....waiting 950 mS
....waiting 972 mS
....waiting 992 mS
....waiting 1013 mS
....waiting 1035 mS
....waiting 1057 mS
....waiting 1078 mS
....waiting 1100 mS
....waiting 1122 mS
....waiting 1144 mS
....waiting 1165 mS
....waiting 1188 mS
....waiting 1209 mS
....waiting 1231 mS
....waiting 1254 mS
....waiting 1275 mS
....waiting 1297 mS
....waiting 1319 mS
....waiting 1341 mS
....waiting 1362 mS
....waiting 1385 mS
....waiting 1406 mS
....waiting 1428 mS
....waiting 1450 mS
....waiting 1472 mS
....waiting 1493 mS
....waiting 1516 mS
....waiting 1537 mS
....waiting 1559 mS
....waiting 1581 mS
....waiting 1603 mS
....waiting 1624 mS
....waiting 1647 mS
....waiting 1668 mS
....waiting 1690 mS
....waiting 1712 mS
....waiting 1734 mS
....waiting 1755 mS
....waiting 1778 mS
....waiting 1799 mS
....waiting 1821 mS
....waiting 1843 mS
....waiting 1865 mS
....waiting 1886 mS
....waiting 1909 mS
....waiting 1930 mS
....waiting 1952 mS
....waiting 1974 mS
....waiting 1996 mS
....waiting 2017 mS
....waiting 2040 mS
....waiting 2061 mS
....waiting 2083 mS
....waiting 2105 mS
....waiting 2127 mS
....waiting 2148 mS
....waiting 2171 mS
....waiting 2193 mS
***********************
 level = 7
1
2
4
4
4
1
4
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 20 mS
....waiting 39 mS
....waiting 59 mS
....waiting 79 mS
....waiting 98 mS
....waiting 119 mS
....waiting 139 mS
....waiting 160 mS
....waiting 181 mS
....waiting 202 mS
....waiting 222 mS
....waiting 244 mS
....waiting 264 mS
....waiting 285 mS
....waiting 305 mS
....waiting 327 mS
....waiting 347 mS
....waiting 368 mS
....waiting 389 mS
....waiting 410 mS
....waiting 430 mS
....waiting 452 mS
....waiting 472 mS
....waiting 493 mS
....waiting 514 mS
....waiting 535 mS
....waiting 555 mS
....waiting 577 mS
....waiting 597 mS
....waiting 618 mS
....waiting 638 mS
....waiting 660 mS
....waiting 680 mS
....waiting 700 mS
....waiting 722 mS
....waiting 742 mS
....waiting 763 mS
....waiting 784 mS
....waiting 805 mS
....waiting 825 mS
....waiting 847 mS
....waiting 867 mS
....waiting 888 mS
....waiting 909 mS
....waiting 930 mS
....waiting 950 mS
....waiting 971 mS
....waiting 992 mS
....waiting 1013 mS
....waiting 1034 mS
....waiting 1057 mS
....waiting 1078 mS
....waiting 1100 mS
....waiting 1122 mS
....waiting 1144 mS
....waiting 1165 mS
....waiting 1188 mS
....waiting 1209 mS
....waiting 1231 mS
....waiting 1253 mS
....waiting 1275 mS
....waiting 1296 mS
....waiting 1319 mS
....waiting 1340 mS
....waiting 1362 mS
....waiting 1385 mS
....waiting 1406 mS
....waiting 1428 mS
....waiting 1450 mS
....waiting 1472 mS
....waiting 1493 mS
....waiting 1516 mS
....waiting 1537 mS
....waiting 1559 mS
....waiting 1581 mS
....waiting 1603 mS
....waiting 1624 mS
....waiting 1647 mS
....waiting 1668 mS
....waiting 1690 mS
....waiting 1712 mS
....waiting 1734 mS
....waiting 1755 mS
....waiting 1778 mS
....waiting 1799 mS
....waiting 1821 mS
....waiting 1843 mS
....waiting 1865 mS
....waiting 1886 mS
....waiting 1909 mS
....waiting 1930 mS
....waiting 1952 mS
....waiting 1974 mS
....waiting 1996 mS
....waiting 2017 mS
....waiting 2039 mS
....waiting 2061 mS
....waiting 2083 mS
....waiting 2104 mS
....waiting 2127 mS
....waiting 2148 mS
....waiting 2170 mS
....waiting 2192 mS
....waiting 2214 mS
....waiting 2235 mS
....waiting 2258 mS
....waiting 2280 mS
....waiting 2301 mS
....waiting 2324 mS
....waiting 2345 mS
....waiting 2367 mS
....waiting 2389 mS
....waiting 2411 mS
***********************
 level = 8
1
4
1
4
4
2
1
4
....waiting 0 mS
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 19 mS
....waiting 39 mS
....waiting 59 mS
....waiting 79 mS
....waiting 98 mS
....waiting 118 mS
....waiting 139 mS
....waiting 160 mS
....waiting 180 mS
....waiting 202 mS
....waiting 222 mS
....waiting 243 mS
....waiting 264 mS
....waiting 285 mS
....waiting 305 mS
....waiting 327 mS
....waiting 347 mS
....waiting 367 mS
....waiting 388 mS
....waiting 409 mS
....waiting 430 mS
....waiting 450 mS
....waiting 472 mS
....waiting 492 mS
....waiting 513 mS
....waiting 534 mS
....waiting 555 mS
....waiting 575 mS
....waiting 597 mS
....waiting 617 mS
....waiting 638 mS
....waiting 659 mS
....waiting 680 mS
....waiting 700 mS
....waiting 721 mS
....waiting 742 mS
....waiting 763 mS
....waiting 783 mS
....waiting 805 mS
....waiting 825 mS
....waiting 846 mS
....waiting 867 mS
....waiting 888 mS
....waiting 908 mS
....waiting 930 mS
....waiting 950 mS
....waiting 971 mS
....waiting 992 mS
....waiting 1013 mS
....waiting 1034 mS
....waiting 1057 mS
....waiting 1078 mS
....waiting 1100 mS
....waiting 1121 mS
....waiting 1144 mS
....waiting 1165 mS
....waiting 1187 mS
....waiting 1209 mS
....waiting 1231 mS
....waiting 1252 mS
....waiting 1275 mS
....waiting 1296 mS
....waiting 1318 mS
....waiting 1340 mS
....waiting 1362 mS
....waiting 1383 mS
....waiting 1406 mS
....waiting 1427 mS
....waiting 1449 mS
....waiting 1471 mS
....waiting 1493 mS
....waiting 1514 mS
....waiting 1537 mS
....waiting 1558 mS
....waiting 1580 mS
....waiting 1602 mS
....waiting 1624 mS
....waiting 1645 mS
....waiting 1668 mS
....waiting 1689 mS
....waiting 1711 mS
....waiting 1734 mS
....waiting 1755 mS
....waiting 1777 mS
....waiting 1799 mS
....waiting 1821 mS
....waiting 1842 mS
....waiting 1865 mS
....waiting 1886 mS
....waiting 1908 mS
....waiting 1930 mS
....waiting 1952 mS
....waiting 1973 mS
....waiting 1996 mS
....waiting 2017 mS
....waiting 2039 mS
....waiting 2061 mS
....waiting 2083 mS
....waiting 2104 mS
....waiting 2127 mS
....waiting 2148 mS
....waiting 2170 mS
....waiting 2192 mS
....waiting 2214 mS
....waiting 2235 mS
....waiting 2258 mS
....waiting 2279 mS
....waiting 2301 mS
....waiting 2323 mS
....waiting 2345 mS
....waiting 2366 mS
....waiting 2389 mS
....waiting 2410 mS
....waiting 2432 mS
....waiting 2454 mS
....waiting 2476 mS
....waiting 2497 mS
....waiting 2519 mS
....waiting 2541 mS
....waiting 2563 mS
....waiting 2584 mS
....waiting 2607 mS
***********************
 level = 9
1
4
4
4
1
1
2
1
1
....waiting 0 mS
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 19 mS
....waiting 40 mS
....waiting 59 mS
....waiting 79 mS
....waiting 98 mS
....waiting 119 mS
....waiting 139 mS
....waiting 160 mS
....waiting 181 mS
....waiting 202 mS
....waiting 222 mS
....waiting 244 mS
....waiting 264 mS
....waiting 285 mS
....waiting 306 mS
....waiting 327 mS
....waiting 347 mS
....waiting 369 mS
....waiting 389 mS
....waiting 410 mS
....waiting 430 mS
....waiting 452 mS
....waiting 472 mS
....waiting 493 mS
....waiting 514 mS
....waiting 535 mS
....waiting 555 mS
....waiting 576 mS
....waiting 597 mS
....waiting 617 mS
....waiting 639 mS
....waiting 659 mS
....waiting 680 mS
....waiting 701 mS
....waiting 722 mS
....waiting 742 mS
....waiting 763 mS
....waiting 784 mS
....waiting 805 mS
....waiting 825 mS
....waiting 847 mS
....waiting 867 mS
....waiting 888 mS
....waiting 909 mS
....waiting 930 mS
....waiting 950 mS
....waiting 972 mS
....waiting 992 mS
....waiting 1013 mS
....waiting 1035 mS
....waiting 1057 mS
....waiting 1078 mS
....waiting 1101 mS
....waiting 1122 mS
....waiting 1144 mS
....waiting 1166 mS
....waiting 1188 mS
....waiting 1209 mS
....waiting 1231 mS
....waiting 1253 mS
....waiting 1275 mS
....waiting 1296 mS
....waiting 1319 mS
....waiting 1340 mS
....waiting 1362 mS
....waiting 1384 mS
....waiting 1406 mS
....waiting 1427 mS
....waiting 1450 mS
....waiting 1471 mS
....waiting 1493 mS
....waiting 1516 mS
....waiting 1537 mS
....waiting 1559 mS
....waiting 1581 mS
....waiting 1603 mS
....waiting 1624 mS
....waiting 1647 mS
....waiting 1668 mS
....waiting 1690 mS
....waiting 1712 mS
....waiting 1734 mS
....waiting 1755 mS
....waiting 1778 mS
....waiting 1799 mS
....waiting 1821 mS
....waiting 1843 mS
....waiting 1865 mS
....waiting 1886 mS
....waiting 1909 mS
....waiting 1930 mS
....waiting 1952 mS
....waiting 1974 mS
....waiting 1996 mS
....waiting 2017 mS
....waiting 2040 mS
....waiting 2061 mS
....waiting 2083 mS
....waiting 2105 mS
....waiting 2127 mS
....waiting 2148 mS
....waiting 2171 mS
....waiting 2192 mS
....waiting 2214 mS
....waiting 2236 mS
....waiting 2258 mS
....waiting 2279 mS
....waiting 2302 mS
....waiting 2323 mS
....waiting 2345 mS
....waiting 2367 mS
....waiting 2389 mS
....waiting 2410 mS
....waiting 2433 mS
....waiting 2455 mS
....waiting 2476 mS
....waiting 2499 mS
....waiting 2520 mS
....waiting 2542 mS
....waiting 2564 mS
....waiting 2586 mS
....waiting 2607 mS
....waiting 2629 mS
....waiting 2651 mS
....waiting 2673 mS
....waiting 2694 mS
....waiting 2717 mS
....waiting 2738 mS
....waiting 2760 mS
....waiting 2782 mS
....waiting 2804 mS
***********************
 level = 1
1
....waiting 1 mS
....waiting 1 mS
....waiting 2 mS
....waiting 2 mS
....waiting 20 mS
....waiting 40 mS
....waiting 59 mS

контроль работы в Serial, СД_задание - не подключал :(

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

В контроеле работы. Там светодиоды повторяются. Надо сделать проверку, если предыдущий светодиод имел номер 1, то текущий светодиод не должен быть с таким же номером

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

guliyev34 пишет:

В контроеле работы. Там светодиоды повторяются. Надо сделать проверку, если предыдущий светодиод имел номер 1, то текущий светодиод не должен быть с таким же номером

как на уровне ТРИ не повторить ? или через раз, или через два - можно повторять ?
если так - то доделайте функцию случайного байта с учётом ранее сгенерированного случБайта :)

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

нет, лучше здесь это прописать for(byte i=0;i<levelCurrent;i++) { assignment[i]=randomByte(); }

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

Я домой приду, попробую разобраться в коде) А то некоторые моменты вообще не понятно, да и с телефона не удобно) Спасибо за помощь)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
    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();
// контроль
Serial.println("...repetition !");
// контроль
        }
        assignment[i]=tempByte;
      }
    }

на контроле

 level = 1
4
***********************
 level = 2
1
2
***********************
 level = 3
...repetition !
2
1
4
***********************
 level = 4
...repetition !
...repetition !
...repetition !
...repetition !
2
4
1
4
***********************
 level = 5
...repetition !
...repetition !
...repetition !
1
4
2
4
2
***********************
 level = 6
...repetition !
4
2
1
4
1
2
***********************
 level = 7
...repetition !
...repetition !
...repetition !
2
1
2
1
4
1
4
***********************
 level = 8
...repetition !
...repetition !
1
4
1
2
4
1
2
1
***********************
 level = 9
...repetition !
...repetition !
...repetition !
...repetition !
...repetition !
...repetition !
...repetition !
...repetition !
4
2
1
4
2
4
2
1
2
***********************
 level = 1
1
***********************
 level = 2
4
2
***********************
 level = 3
1
2
1
***********************
 level = 4
...repetition !
...repetition !
...repetition !
4
1
2
1
***********************
 level = 5
4
1
4
2
4
***********************
 level = 6
...repetition !

 

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)
    {
      OutByteAssignment(assignment[n]);
      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;    // переход к выполнению sectionIn
    }
  }

// 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;
    }
  }
}
//=========================================================================

плавно добрались до борьбы с дребезгом контактов кнопок, реле :)

http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...

Misha.119
Offline
Зарегистрирован: 14.02.2015

здравствуйте, не могу понять как работает функция tone

http://arduino.ru/Reference/Tone прочитав тут, сделал вот такой код:

tone(13, 1);

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

а у меня выходит что светодиодик горит постоянно

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
 level = 1
2 0 0 0 0 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
1 1 1 1 1 1 1 1 1 1 
************************
 level = 2
1 2 0 0 0 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
1 1 1 1 1 1 1 1 1 1 
************************
 level = 3
1 2 1 0 0 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
1 1 1 1 1 1 1 1 1 1 
************************
 level = 4
2 1 4 1 0 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
2 2 2 2 2 2 2 2 2 2 
************************
 level = 5
2 1 2 1 4 0 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
2 2 2 2 2 2 2 2 2 2 
************************
 level = 6
1 2 1 2 1 2 0 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
4 4 4 4 4 4 4 4 4 4 
************************
 level = 7
1 4 2 1 4 2 1 0 0 0 
 GO ! Push button !!!
...allotted time has expired !
4 4 4 4 4 4 4 4 4 4 
************************

нет под руками кнопок, от уровня к уровню сажал на землю пины кнопок

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

Misha.119 пишет:

здравствуйте, не могу понять как работает функция tone

http://arduino.ru/Reference/Tone прочитав тут, сделал вот такой код:

tone(13, 1);

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

а у меня выходит что светодиодик горит постоянно

 

это другая тема.... создайте свою - и вам удобнее, и топикстартеру этой темы - приятнее

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

:)

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

это функция управления пищалкой.... для СД нужно вам смотреть digitalWrite()....

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

на время отладки if((millis()-oldMillis)<(2000+levelCurrent*500)) 
это лучше заменить на if((millis()-oldMillis)<(5000+levelCurrent*1000))

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

SU-27-16 пишет:

на время отладки if((millis()-oldMillis)<(2000+levelCurrent*500)) 
это лучше заменить на if((millis()-oldMillis)<(5000+levelCurrent*1000))

Подскажите пожалуйста, как делать отладку? Например я хочу не подключая плату, увидеть что и как будет работать. Это же возможно? Или обязательно подсоединять ардуино ?

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

отладка - запуск кода и контроль-сравнение по фактическим действиям МК ( СД, сервы, ..... ) или вывод в Serial проверяемых значений в конкретных местах кода

не подключая плату - эмуляторы... например, Proteus, или другие...
моя этим не занимается, мне ближе железо :)

guliyev34
Offline
Зарегистрирован: 17.03.2015
Не понял эти строки:
 
1. #175 строка из п#169. Почему так? Если случайным образом выбирается число 3, то мы записываем 4? Зачем? 
 
  if(tempByte==3) tempByte=4;
 
2. #78-83 строка из п#169. А именно строка 78. Т.е  пока у нас assignment[] не равно 0, будет выполняться цикл. Но в какой момент он будет равен 0? Мое мнение, т.е у нас массив assigment заполнен числами до текущего уровня, а потом все 0 идут? Например 4 уровень. Первые 4 элемента из 10 заполнены числами отличных от 0, а потом с 5 элемента идут 0. Я прав? А если уровень  = 10. И массив из 10 элементов. Если мы напишем assignment[10]. Он выдаст 0?
 
078     while(assignment[n]!=0)
079     {
080       OutByteAssignment(assignment[n]);
081       delay(500);
082       n++;
083     }

 

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

SU-27-16 пишет:

отладка - запуск кода и контроль-сравнение по фактическим действиям МК ( СД, сервы, ..... ) или вывод в Serial проверяемых значений в конкретных местах кода

не подключая плату - эмуляторы... например, Proteus, или другие...
моя этим не занимается, мне ближе железо :)

Эмуляторы мне тоже не интересны, понял все) 

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

И почему у нас нет case3?

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

ledBlockButtons для чего эта переменная? 

guliyev34
Offline
Зарегистрирован: 17.03.2015
Можете объяснить вот эти строки? 

107
  if(section==sectionIn)
108
  {
109
    if((millis()-oldMillis)<(2000+levelCurrent*500))
110
    {
111
// считывание и запись нажатий кнопок в массив
112
      if(countKnopka<10)      // чтобы не вылезти за границы массива
113
      {
114
        if(!digitalRead(knopka1))
115
        {
116
          delay(50);            // для антидребезга контактов кнопки
117
          reply[countKnopka]=1;
118
          countKnopka++;
119
        }
120
        if(!digitalRead(knopka2))
121
        {
122
          delay(50);            // для антидребезга контактов кнопки
123
          reply[countKnopka]=2;
124
          countKnopka++;
125
        }
126
        if(!digitalRead(knopka3))
127
        {
128
          delay(50);            // для антидребезга контактов кнопки
129
          reply[countKnopka]=4;
130
          countKnopka++;
131
        }
132
      }
133
// окончание считывания и записи нажатий кнопок в массив
134
    }
135
    else
136
    {
137
      // .........................
138
      digitalWrite(ledBlockButtons,LOW);
139
      Serial.println("...allotted time has expired !");
140
      section=sectionResult;    // переход к выполнению sectionIn
141
    }
142
  }

 

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

guliyev34 пишет:

ledBlockButtons для чего эта переменная? 

пин для СД-ов подсветки блока кнопок - "сигнализация" что можно жать кнопки для ввода ответа

....чуть попозже вернусь ( 0,5 .... 1 час )

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

SU-27-16 пишет:

guliyev34 пишет:

ledBlockButtons для чего эта переменная? 

пин для СД-ов подсветки блока кнопок - "сигнализация" что можно жать кнопки для ввода ответа

....чуть попозже вернусь ( 0,5 .... 1 час )

Ааа.. Точно. Спасибо

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

#175 строка из п#169. Почему так? Если случайным образом выбирается число 3, то мы записываем 4? Зачем? 
И почему у нас нет case3?

всё это взаимосвязано !
в байте храним состояние светодиодов чтобы затем в зависимости от значения байта управлять свечением СД, связь такая - 0бит управляет СД1, 1
бит управляет СД2, 2бит управляет СД3. состояние бита - 0 СД не горит, 1 СД горит.
по задаче гореть может только один из трёх, т.е. нам нужны состояния байта - 001 СД1, 010 СД2, 100 СД3
И ЕЩЁ два состояния 000 все три СД не горят, 111 
все три СД горят - для сервисных целей ( в коде смотрите для чего )

функции вывода байта на СД работают по принципу вышесказанного - выводят
( или ) 000   001   010   100   111
вывод  ( или )   011   101   110   - нам не нужен ( горит НЕ один СД )

генерируем случайное зажигание ОДНОГО из трёх СД - для этого нам нужно получить случайные байты ( почему - см. выше )
001   010   100   -   в двоичном представлении
1         2       4    -   в десятиричном
но рандом не может генерить диапазон с разрывом, если генерить от 1 до 4 и при получении 3 перегенеривать - то получится НЕ нормальное распределение
проще генерить от 1 до 3, при получении 3 считать что код "кагрхтавит" и принудительно заменять 3 на 4

итого : получаем случайные числа 1   2   4  с нормальным распределением

:)

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

Все, я понял)) Спасибо, очень доступно объяснили) 

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

#78-83 строка из п#169. А именно строка 78.#78-83 строка из п#169. А именно строка 78.

строка 77 имеет отношение к строкам 78-83 - т.е. логически этот блок выглядит слитно 77-83

вы нашли совершенно другую ошибку :) , которую я не заметил, вернее написал код с ошибкой ( грубейшей ) :(

массив из 10-ти значений "задание" располагается в памяти МК , например с адреса 1056 ( номер в памяти МК ) , линейно и непрерывно, до адреса 1065 ( нулевое в 1056 , девятое в 1065 ) - привыкайте считать от нуля - индекс ячейки массива из 10-ти элементов может быть от 0 до 9 , а не от 1 до 10 !!!!!!

пириф-перекур !

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

SU-27-16 пишет:

 привыкайте считать от нуля - индекс ячейки массива из 10-ти элементов может быть от 0 до 9 , а не от 1 до 10 !!!!!!

Это я знаю, что массив из 10 значений идет от 0 и до 9. Т.к индексация в этой среде идет с 0. Но все же. У нас 10 уровней. Пока n!=0, у нас будет идти цикл. Как только n=0, так цикл прерывается. Я понимаю это например для 5 уровня, т.е пока n [0,1..4] у нас будет идти цикл, т.к значения assignment не будет равно 0. потом мы n++ и получаем assignment[5] = 0, у нас цикл прерывается. А вот на последнем уровне? n=9. assignment[9]!=0. потом n++. получаем n=10 assignment[10] у нас уже нет этого значения, т.к массив всего из 10 элементов.. И получается что происходит зацикливание? Или как? 

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

номер элемента массива - это индекс, он же "указатель" , указатель на массив - более сложная штука

работа куска кода :
                       индекс  n сделали ноль
      label          взяли n-ный элемент массива и если он не равен нулю выполняем ниже, равен нулю - выход из блока while
                       высветили СД
                       на полсекунды
                       погасили СД                        //   про это забыл, добавлю в код
                       на полсекунды                    //   про это забыл, добавлю в код
                       увеличиваем 
индекс  n на единицу
                       переходим на 
label

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

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

Я понял свою ошибку. Массив assignment имеет 11 значений. Не досмотрел)

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

получаем n=10 assignment[10] у нас уже нет этого значения, т.к массив всего из 10 элементов.. И получается что происходит зацикливание? Или как? 

вот именно - или как :(

за массивом в памяти в 1066 располагаются другие данные, какие нам не известно :(
пусть там сидят последовательно байты   00110011   11111111   00000110  00000000
после 10-ти миганий увидим ещё ТРИ мигания -   СД2СД1    СД3СД2СД1    СД3СД2 -  и только потом выйдем из  while

это называется выход за пределы массива :(

за индексом нужен контроль, решаем это так

while( (assignment[n]!=0)) && (n<10) )   - или ноль , или конец массива

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

ЭТО БРЕД, Можно не читать)))) 

Если я не прав поправьте пожалуйста.
У нас имеется массив светодиодов assignment[10] Т.е он имеет 11 значений. Если я правильно понимаю, то изначально он заполнен 0 значениями.  assignment[10]= [0 0 0 0 0 0 0 0 0 0 0]
На первом уровне будет так :  assignment[10]= [a 0 0 0 0 0 0 0 0 0 0], где a - случайное число. 
На пятом так: assignment[10]= [a a a a a 0 0 0 0 0 0].
На десятом так: assignment[10]= [a a a a a a a a a a 0]. Так? 

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

SU-27-16 пишет:

while( (assignment[n]!=0)) && (n<10) )   - или ноль , или конец массива

Вот это я и ждал))) 

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

guliyev34 пишет:

Я понял свою ошибку. Массив assignment имеет 11 значений. Не досмотрел)

нет !!!!!!!!!!!!!

byte assignment[10];    // массив для "задание"  - объявление массива из 10 элементов, тип элементов байт, индексы элементов массива от 0 до 9

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

SU-27-16 пишет:

guliyev34 пишет:

Я понял свою ошибку. Массив assignment имеет 11 значений. Не досмотрел)

нет !!!!!!!!!!!!!

byte assignment[10];    // массив для "задание"  - объявление массива из 10 элементов, тип элементов байт, индексы элементов массива от 0 до 9

Я теперь понял все) 

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 аватар
Offline
Зарегистрирован: 13.08.2012

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

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