Управление группой реле кнопками без фиксации.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Green пишет:

Граф. При всём уважении. Ну что здесь не Сишного?

Федя! Не валяй дурака. Я же написал, как надо? Вот и смотри. Не нужно комментировать.

Смотри как пишет ДетСимен. На Ркита смотри, когда он что-то выкладывает. На ЕвгенияП. Не настаивай на своем варианте кода. Не нужно.

man9913
Offline
Зарегистрирован: 19.03.2016

Тоже не смог пройти мимо:

1void setup() { DDRB=PORTC=31; /* keys A0...A4, relays 8...12 */ }
2 
3void loop() {
4  static uint8_t l; 
5  uint8_t c = PINC|~PORTC;   
6  if ((l=c|~(l^c))!=0xFF) PORTB=PORTB&~PORTC|(l&1)?(l&2)?(l&4)?(l&8)?16:8:4:2:1; 
7  l = c; delay(20);
8}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

man9913 пишет:

Тоже не смог пройти мимо:

Лучше бы прошел. Про регистры уже написано: НЕТ ДАННЫХ О ТИПЕ КОНТРОЛЛЕРА в ТЗ! То есть только библиотечные функции от wiring.

man9913
Offline
Зарегистрирован: 19.03.2016

wdrakula пишет:

man9913 пишет:

Тоже не смог пройти мимо:

Лучше бы прошел. Про регистры уже написано: НЕТ ДАННЫХ О ТИПЕ КОНТРОЛЛЕРА в ТЗ! То есть только библиотечные функции от wiring.

такие элементарные проекты делаются обычно на avr, поэтому твоё возражение не принимается.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

man9913 пишет:

такие элементарные проекты делаются обычно на avr, поэтому твоё возражение не принимается.

Сам же понял, что нагазировал лужу? Вот и радуйся волшебным пузырькам. А что и когда и куда ты "принимаешь" - дело твоего гинеколога, уж прости. ;)) Не расстраивайся. Теперь это модно!

man9913
Offline
Зарегистрирован: 19.03.2016

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

1volatile uint8_t &l=GPIOR0, &c=GPIOR1, &m=GPIOR2, &b=PORTB;
2void setup() { m=~(DDRB=PORTC=31); /* keys A0...A4, relays 8...12 */ }
3void loop() { if (c=PINC|m,uint8_t(~(l=c|~(l^c)))) b=b&m|(l&1)?(l&2)?(l&4)?(l&8)?16:8:4:2:1; l=c; delay(20); }
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ой!  Да ты освоил тернарный оператор!

---------------

Если честно, то вполне изящно. Выбор единственного реле тернарником - реально мило! Респект!

Но это не отменяет того, что по определению: это говнокод. То есть не читаемое, не возможное к сопровождению и не масштабируемое решение. Так можно прикалываться. У ЕвгенияП тут были примеры, и у меня были примеры говнокода для  блинка и т.п. Но нужно отличать прикол и программирование. Не уверен. что ты это понимаешь. Хотел бы ошибиться!

Green
Offline
Зарегистрирован: 01.10.2015

wdrakula пишет:

Ой!  Да ты освоил тернарный оператор!

Без тернального оператора и оператора запятая тут ловить нечего.)
И у "говнокода" у каждого это своё определение. Кто к чему привык, не так ли?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Green пишет:

И у говнокода у каждого это своё определение. Кто к чему привык, не так ли?

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

Green
Offline
Зарегистрирован: 01.10.2015

Ну да, оригинально. Говнокод - это то что ТЕБЕ не пришлось прочитать сходу... Так может это в ТЕБЕ проблемы, не думаешь?)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Для нас со с котом лакмусовая бумашка авнокода - одно/двухбуквенные глобалные переменные, а потом вся остальная спагетти

Green
Offline
Зарегистрирован: 01.10.2015

Kakmyc пишет:
Мало того, что исключена возможность нажатия нескольких кнопок, так еще и неизвестно , какая кнопка была нажата последней. А стало быть код не отвечает условию задачи

Почему исключена? Ровно наоборот. Ты просто не разобрался. Другое дело, что из за дребезга одновременное нажатие нескольких кнопок нормально не зафиксировать. Но для этого случая достаточно delay(50)(например) в лупе.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Для нас со с котом лакмусовая бумашка авнокода - одно/двухбуквенные глобалные переменные, а потом вся остальная спагетти

ну так у нас у русских количество букв в названии должно быть три, солидарен )))

Green
Offline
Зарегистрирован: 01.10.2015

Это только для глобальных.) Локальные же могут быть и однобуквенными.