помогите разобраться с CASE и массивами
- Войдите на сайт для отправки комментариев
Чт, 30/01/2020 - 08:47
предъистория. имелись на руках старые четырехканальные бегущие огни. четыре года назад т.к. сидел дома со сломанной ногой решил переделать все управление на базе ардуино. с четырех выходов на полевые транзисторы и коммутация. мигает 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
не работает. ругается.
не могу найти ни одного примера с такой работой с массивами
подозрение , что где то надо переменную sms обьявить
Подозрение, что надо функцию sms() вынести из loop().
если подправишь скетч что б компилировался - поклон до земли
тут нет "работы с массивами, тут вообше нет массивов в коде
Поправить - две последние скобки переставь на строчку 60 и все
За поклон подскажу: строки #87 и #88 перенести под #59.
К сожалению, мы так и не увидели начальника транспортного..., извините, ошибок при компиляции, но с большой долей вероятности если перенести п/п sms() перед setup(), то все скомпилируется. Да и в 88 строке вроде скобка лишняя.
За поклон подскажу: строки #87 и #88 перенести под #59.
БИНГО!!!
+ поклон до земли.
БИНГО!!!
+ поклон до земли.
Пилять дрова! А нахрена в IDE сделано отслеживание парных скобок!? Для красоты??