помогите разобраться с CASE и массивами

MichaelS
Offline
Зарегистрирован: 19.07.2016

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

в этом году решил подредактировать и ... все сломалось и по понятной причине не вернуть. где я в 2016 нашел этот синтаксис не могу понять.
думаю в коде все понятно. 
режим первый загорается первая, загорается вторая/первая гаснет и т.д.

не могу найти примеры 
связки
case
...sms(byte (1), byte (0), byte (0), byte (1)) ;

...void sms(byte A, byte B, byte C, byte D)

 

 

byte inByte = 0;
int pere = 1;               // номер режима мигания
int sec = 100;              //время горения ламп в 1 цикл   


void setup()
         {
      for (int thisPin = 1; thisPin < 9; thisPin++)
     { pinMode(thisPin, OUTPUT);   //обьявляем что цифровые контакты 2-8 выводы. использую. только 2 4 6 8 
       digitalWrite(thisPin, HIGH); //высокий уровень на контактах все лампочки засветились
     } 
     }
     
 

void loop() 
{
     pere=1; //для примера выбирается первый case
    
for (int powt = 0; powt < 40; powt++) // количество повторов однотипного мигания 
    {  
     switch (pere) // в зависимости от переменной pere выбирается контейнер который надо выполнить
     
     
     {     case 1:   // последовательно 1,2,3,4
           sms(byte (1), byte (0), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (0), byte (1)) ;
           sms(byte (1), byte (0), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (0), byte (1)) ;
           sms(byte (1), byte (0), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (0), byte (1)) ;
           
           break;
 
     case 2:   // последовательно 1-2,2-3,3-4,4-1
    
           sec = 200;
           sec = sec*k;
           sms(byte (1), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (1)) ;
           sms(byte (1), byte (0), byte (0), byte (1)) ;
           sms(byte (1), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (1)) ;
           sms(byte (1), byte (0), byte (0), byte (1)) ;
           sms(byte (1), byte (1), byte (0), byte (0)) ;
           sms(byte (0), byte (1), byte (1), byte (0)) ;
           sms(byte (0), byte (0), byte (1), byte (1)) ;
           sms(byte (1), byte (0), byte (0), byte (1)) ;
           break;

      } // закончились перечисление контейнеров
      
       void sms(byte A, byte B, byte C, byte D)  // описываем процедуру включения люстры
 
    {            
   if (A == 1)
   {digitalWrite(2, HIGH); //если byte 1  то на выходе высокое напряжение
   }
   else
   {digitalWrite(2, LOW);} // иначе ноль

    if (B == 1)
   {digitalWrite(4, HIGH);}
   else
   {digitalWrite(4, LOW);}

    if (C == 1)
   {digitalWrite(6, HIGH);}
   else
   {digitalWrite(6, LOW);}

    if (D == 1)
   {digitalWrite(8, HIGH);}
   else
   {digitalWrite(8, LOW);}

    delay(sec);
    }
    }
    }

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В коде-то всё понятно, а вопрос какой?

MichaelS
Offline
Зарегистрирован: 19.07.2016

sadman41

не работает. ругается.

не могу найти ни одного примера с такой работой с массивами 

подозрение , что где то надо переменную sms обьявить

sadman41
Offline
Зарегистрирован: 19.10.2016

Подозрение, что надо функцию sms() вынести из loop().

MichaelS
Offline
Зарегистрирован: 19.07.2016

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

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Цитата:
не могу найти ни одного примера с такой работой с массивами

тут нет "работы с массивами, тут вообше нет массивов в коде

Поправить - две последние скобки переставь на строчку 60 и все

sadman41
Offline
Зарегистрирован: 19.10.2016

За поклон подскажу:  строки #87 и #88 перенести под #59.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

К сожалению, мы так и не увидели начальника транспортного..., извините, ошибок при компиляции, но с большой долей вероятности если перенести п/п sms() перед setup(), то все скомпилируется. Да и в 88 строке вроде скобка лишняя.

MichaelS
Offline
Зарегистрирован: 19.07.2016

sadman41 пишет:

За поклон подскажу:  строки #87 и #88 перенести под #59.

 

БИНГО!!!
+ поклон до земли.

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

MichaelS пишет:

БИНГО!!!

+ поклон до земли.

Пилять дрова! А нахрена в IDE сделано отслеживание парных скобок!? Для красоты??