Контроллер освещения в квартиру

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Крик души.
Всё начиналось с покупки квартиры без электрики от застройщика. Квартира не маленькая и освещению я решил выделить отдельное внимание. До каждого выключателя от электрощита кинул витую пару (4х жилку), а до каждой точки освещения соответственно бросил кабель нужного сечения. Год назад я решил что смогу всё это как нить накодить на ардуино (правда тогда я ещё и не знал, что такое ардуино иде) и сделать управление всем этим барахлом с помощью китайской меги и 16-ти канального релейного модуля. Потом оказалось, что 16 - мало, пришлось брать ещё один, далее хуже, кнопок оказалось слишком много, мне пришлось думать как связать 81 кнопку и 32 реле, ну и как дурак ещё зарегился на ардуино.ру.... Со своей "тупой реализацией тупой идеи" познал прелесть русских форумов по программированию, и зарёкся там больше ничего не спрашивать. Время шло к переезду, вечером ремонт хаты, днём кодинг дуины в рабочее время... Каким то макаром всё это заработало, было найдено кучу багов, на себе испытал различные физические явления (когда провода по 50 метров такие прелести творятся), сейчас всё это работает, и у этой системы есть свои плюсы и минусы:
1. На любую кнопку можно посадить включение-отключение любого осветителя, в том числе отключение всего света
2. Экономия на проводах и выключателях (именно так, тобишь я одним осветителем могу управлять с 10-ти точек при этом не надо использовать кучу проходных выключателей и километры пяти-жильного провода сечением в полтора квадрата)
3. Есть возможность использовать один блок питания и 3 несколько светодиодных лент от него, щелк на клавишу, включился БП, и одна лента, ещё раз щёлк, вторая лента, ну и т.д.
4. Ну и главный плюс, это то, что для изменения логики действий на нажатие клавиш не надо вскрывать потолки и перепаивать коробки, достаточно просто изменить пару строчек в коде
5. Самопал дешевле чего либо, но это не точно, ткните меня носом, если найдётся подобный контролер с подобным функционалом пусть даже за 500 баксов (и да, пока я потратил всего 150). Я честно хотел купить что нить подобное, но не нашёл...
Из минусов:
1. Быть первым - всегда трудно, возникала куча проблем
2. Скажем так, мегу я почти полностью загрузил по вводам-выводам, тобишь 32 пина на управления реле, далее 18 выводов я бросил на 81 кнопку (подключил по матрице 9*9)
3. Одновременное нажатие нескольких кнопок. Благодаря своей лени (времени не хватало) кнопки я подрубал без использования диодов.
4. САМЫЙ ЖИРНЫЙ МИНУС, ЗАЛИПАНИЕ РЕЛЕ, есть 2 точки освещения, и они залипают.... Светодиодные светильники, в сумме по 40-50 ВАТТ могут слепить реле на 10 ампер (пробовал разные реле). Просто видать толи термосопротивление надо ставить, либо светильники менять, но я так скажу, светодиоды на старте могут иметь бешеный ток, который приклеивает контакты реле.

Время идёт, залипания бесят.... Купил пачку симисторов, ощутил все прелести управления нагрузкой с бесконечным сопротивлением, нашёл кучу схем самопальных твёрдотельных реле, но самая рабочая схема оказалась в даташите на moc3083... Насмотрелся Алекса (и да, мне даже интересно, почему его не любят на ардуино.ру), заказал платы на jlpcdpcpdpcpd... хер вышепчишь, планирую переписать программу под i2c шину и засадить все свои к7нопки на 81 диод... и вот как полный дебил смотрю и не понимаю какие мне диоды покупать. Мне надо самые доступные диоды, на 5 вольт и не smd, ткните пальцем, чем дешевле, тем лучше, а то мой проект начинает приближаться уже к 20 килорублям.
Кнопки включены по схеме https://github.com/Klapautsiy/titanium-bicycle-for-button/wiki/synopsis (но без диодов), именно кнопки меня и завели на ардуино.ру, правда код данного класса не рассчитан на длинные провода (его наверное никто не использовал так как я...) Код пришлось писать самому, а вот схема подключения такая же....
Подскажите за марку диодов (я как понял они бывают разные, и по частоте и по прямому напряжению), я смотрел в сторону 2д503б, но они вроде на 1 вольт, а 1n4007 уж как то слишком...
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Я правильно понял, что кнопки коммутируют длинные линии по витой паре?
Да, именно так, и это всё работает, просто сейчас я хочу всё привести в порядок, и сделать возможность отслеживать события одновременных нажатий кнопок, а для этого мне надо на каждую кнопку подрубить диод. Вот и мучаюсь с выбором диода.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,415
977
58
Марий-Эл
Не мучайтесь, это неправильное решение.
(Любители всё упрощать можете кидать в меня тапками.)
Каждое исполнительное устройство должно быть на отдельном контроллере.
И контроллер не нужно делать на ардуине, а на рассыпухе, на простых и дешёвых микроконтроллерах.
А связь между ними по RS485 или RS422.
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Не мучайтесь, это неправильное решение.
(Любители всё упрощать можете кидать в меня тапками.)
Каждое исполнительное устройство должно быть на отдельном контроллере.
И контроллер не нужно делать на ардуине, а на рассыпухе, на простых и дешёвых микроконтроллерах.
А связь между ними по RS485 или RS422.
Как это может быть не правильным решением???? Если оно у меня уже год как работает и проблем с кнопками нет, ну кроме одновременного нажатия... И да, извините меня плиз, но вы хоть представляете себе 81 кнопка, это 27 трёхклавишных выключателя, это удаления местами до 30-50 метров до самого дальнего выключателя (по rs232) было бы супер, да и с 485 ещё та трабла правильно соединить 27 устройств и нихрена не перепутать, это один геморрой, мне даже трудно представить на сколько...

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

Вложения

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,415
977
58
Марий-Эл
это один геморрой, мне даже трудно представить на сколько...
Это геморрой для людей не разбирающихся в этом.
Если оно у меня уже год как работает и проблем с кнопками нет
Это временно. И не факт, что работает не на пределе.
Я пока не представляю общей структуры сети. Плюс картинки навевают грусть.
А кнопки раскиданы по квартире или все в одном месте?
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
А твердотельне модули реле не пробовал ?
Ну запихать 32 твердотелки для коммутации нагрузки максимум в 500 миллиампер это жёстко, импульсные реле, тоже жесть (просто дорого, даже если на али брать), я решил делать всё на bt139-600e, сделал уже схему на макетке, опробовал, заказал платы, жду их теперь, и управлять ими планирую по i2c, и корпуса на дин рейку заказал (просто если самому собирать, то 8 реле на семисторах выйдут по сибистоимости в 1000 рублей), осталось решить вопрос с диодами, просто чтобы понимать, мне надо будет 81 диод расшить на патч панели и правильно их соединить, но я замешкался на стадии выбора диода, главное чтобы он держал 5 вольт и не был слишком медленным по частоте
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Это геморрой для людей не разбирающихся в этом.

Это временно. И не факт, что работает не на пределе.
Я пока не представляю общей структуры сети. Плюс картинки навевают грусть.
А кнопки раскиданы по квартире или все в одном месте?
И у меня грусть, но это временно очень хорошо работает, схему подключения я кинул, и да, говорить, что в этом кто то не разбирается, тоже жёстко с Вашей стороны. Я отмёл к чёрту 232 интерфейс, у него с дистанцией совсем хреново, с 485тым обдумывал, но не вижу смысла, от слова совсем не вижу. Особенно для чела, который ПИК ни разу не программировал, а на срр после php как то попроще. Выключатели трёхклваишные, работают в режиме кнопок, до каждого выключателя идёт 4-х жилка витая пара (именно витая), включены по схеме матрицы 9на9

Опять же по CAN шине неплохо. Самый помехозащищённый стандарт. ;)
Извини конечно, но моя реализация гораздо проще и показала свою устойчивость ко всему! Уже год всё работает, и дальше будет работать дальше, вопрос не про шину и реализацию а про марку диода
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,415
977
58
Марий-Эл
2д503б не сдохнет? просто их тьма в местном магазине? меня их характеристика напрягает или лучше КД522Б
Я не знаю параметров и топологии схемы, что бы сказать утвердительно.
Может вы там кнопками с проводами по 40 метров коммутируете нагрузку 1.5 мегаватта.
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Да ты просто дурак.
Всё в мире относительно....

Какое I2C сюда нужно запихнуть.
Ты описал проблему со своей точки зрения, но не смог донести идею. И при этом чего то хочешь.
Если прочитать предыдущий твой высер, ты весь в белом, хоть и год ебался с помехами а когда решил, что смог решить, ещё год проработало и ты счастлив. Но в этом мире всё временно.
Скажем так, ни слова про то, что я год ебался с помехами, я с ними ебался ровно пару часов, обнаружив их при первом тесте. В первом посте я скинул ссылку на схему подключения, позже я прикрепил файл, плюс было написано в первом же посте, что витая пара идёт от щитовой до каждого выключателя! Написал что кнопки подключил "далее 18 выводов я бросил на 81 кнопку (подключил по матрице 9*9) "

Тебе нужен ответ какие диоды ставить? Если цепь слаботочка, ставь любые.
Да, мне реально нужен именно такой ответ, у меня слаботочка, но на сколько я понимаю напряжение на пинах ардуино 5 Вольт, нашёл в ближайшем магазине кучу диодов 2Д503Б (я писал про них в первом же посте)

Вот их характеристики
Основные технические характеристики диода 2Д503Б:
• Uoбp max - Максимальное постоянное обратное напряжение: 30 В;
• Inp max - Максимальный прямой ток: 20 мА;
• fд - Рабочая частота диода: 350 мГц;
• Unp - Постоянное прямое напряжение: не более 1 В при Inp 10 мА;
• Ioбp - Постоянный обратный ток: не более 10 мкА при Uoбp 30 В;
• tвoc обр - Время обратного восстановления: 0,01 мкс;

У меня закралось сомнение о том, что данный диод выживет, ну или в надёжности схемы с этим диодом, порылся в каталоге магаза, нашёл на 1000В 1А, но они громоздкие, это как из пушки по воробьям.... Меня не забанили ни в гугле ни в яндексе, просто я реально надеялся в ветке по электронике будут люди с опытом использования диодов и тупо скажут, да ставь такие то такие то, точно будут пахать, но нет... Нахрен диоды, надо делать по другому..... Всё говно, реализация хрень, ставь любые...
Вот пошёл бы я и купил 81 любой диод, расшил бы их, собрал схему и херак, всё бы сдохло и нихрена бы не работало, и сидела бы вся моя семья без освещения, вот тогда я был бы ДУРАКОМ, но при это Ваш рейтинг не пострадал бы ни разу и где ниь в другом месте этого форума Вы продолжали бы давать полезные советы....

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

Я до последнего тянул, пытался вывести на диалог. Но ты упёрся рогом. Что у тебя всё заебись.
Описание схемы словами - это разговор слепого с глухим. Хочешь помощи - рисуй схему.
Я не стал тянуть разговор, вернее не разговор, а демагогию. Просто теперь пойду покупать любые диоды и проверять на практике какие диоды выживут, а какие - не относятся к категории ЛЮБОЙ!
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
@DAK, в мире наверное не существует диодов, которые бы не работали на 5-ти вольтах. Но если такие и есть, то это точно не те, которые можно купить в соседнем магазине.
Уж извините, но топография вашего подключения - полная туфта. И отработала она почти год видимо потому, что дом не заселен, или очень мало заселен. Вот когда у соседей кофемолка начнет включать/выключать вам свет в спальне (или вообще вешать вашу Мегу, с соответствующим результатом), тогда вы и вспомните все то, о чем вас предупреждали.

Нельзя делать ВСЁ на одном контроллере. Ладно если у вас глюканул секторальный контроллер, и свет или питание отопления пропало в одном помещении. Но когда вся жизнь дома зависит от прихоти одного контроллера, - это не нормально. Главный контроллер вообще желательно максимально изолировать от работы с реле, искрящей нагрузкой и т.п.
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,066
914
нашёл в ближайшем магазине кучу диодов 2Д503Б

Вот их характеристики
Основные технические характеристики диода 2Д503Б:
• Uoбp max - Максимальное постоянное обратное напряжение: 30 В;
• Inp max - Максимальный прямой ток: 20 мА;
• fд - Рабочая частота диода: 350 мГц;
• Unp - Постоянное прямое напряжение: не более 1 В при Inp 10 мА;
• Ioбp - Постоянный обратный ток: не более 10 мкА при Uoбp 30 В;
• tвoc обр - Время обратного восстановления: 0,01 мкс;
ну как вас не троллить, если вы год работаете с электричеством, накрутили огромную схему - а так и не научились хотя бы читать характеристики в даташите. "Прямое напряжение диода - 1в", про которое вы говорите - вовсе не значит, что на диод можно подавать не более 1в. Эта величина - падение напряжения на переходе при прямом подключении.

А максимальное напряжение, которое можно подать на диод - это Uoбp max - Максимальное постоянное обратное напряжение, в вашем случае это 30в. Так что этот диод вам подойдет.

Другой вопрос, нафига брать такой дорогой диод (он в Чипе 22 рубля), когда можно взять абсолютно любой маломощный, например 1N4148, ценой всего по 1 рублю в Чипе, а на Али и того дешевле.

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

DAK, ваша проблема в том, что вы уверены, что всегда все делаете правильно - даже в тех областях, в которых ничего не понимаете. На самом деле вам не нужны советы, на форумы вы ходите похвастать, какой вы крутой. А когда форум начинает критиковать ваши поделки - начинаете обижаться и бычить.
Я нашел вашу ветку на ардуино.ру - вы там выложили наикривейший код, а когда вам указали на ошибки - вместо того чтоб прислушаться стали писать. что вам не нужно учиться программировать и вы справитесь и так.
Чтобы чему-то научиться - нужно уметь слушать более опытных людей, признавать свои ошибки и исправлять их. Судя по вашей реакции - вы этого не делаете. Уверен, что в вашем коде до сих пор такая же жуть, как тогда, когда вы приходили на тот форум. И, судя по нынешнему вопросу про диод - в электронике вы понимаете не больше.
Остается только пожелать вашим домашним, чтобы они не пострадали от системы, построенным этаким "специалистом". С электричеством шутки плохи.
 
Изменено:

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
@bort707, Спасибо.
На самом деле меня и правда подбешивают форумы на которых присутствую программисты, это уж издержки профессии, и я очень рад, что Вы не поленились и сходили на другой форум (это ж сколько у Вас свободного времени, аж завидую), но за инфу по диодам реально спасибо, хоть где то нормально мозги на место встали. И да, диоды в чипдипе я даже не смотрел, как не странно у нас они по 2 рубля (на сайте радио лавке тоже по 2 рубля). И да, код значительно изменился, и уж рядом не стоял с тем, который был ранее....
Знаете, что удивительно, я как бы считаю, что Интернет нужен для обмена опытом, идеями, взаимопомощью (в меру конечно), но как не странно, такие вещи можно встретить только на форумах автолюбителей. А теперь попробуйте найти готовое изделие, которое более менее может коммутировать 32 силовых выхода и к которому можно подключить 27 3-х клавишных выключателя, и которое ещё сможет отрабатывать такие состояния кнопок, как включение, быстрый клики, долгий клик, отключение.... и на каждую клавишу и на каждое событие можно вешать группу из нескольких реле.... У меня ранее была тупо идея, сейчас у меня есть готовое, обкатаное решение, и в ближайшие пару месяцев я реально планирую изменить схемотехнику (ну реально всё стрёмно выглядит, привожу всё в порядок). И да, срач будет продолжаться здесь, в этой теме, когда я выложу сюда схемы и код, и ещё попрошу кодеров ткнуть в меня идеей, как правильно составить меню настройки всего этого чуда...
И да, с ардуино.ру мне дали понять, что там чисто кодеры, которых волнует не сама идея, а именно красота кода, я же вроде не тупой, нахрена быть там, где людям пофиг сам проект. Вот тут не пофиг, сразу видно. Продолжение срача ещё впереди, но боюсь не сегодня, сегодня я купил почти сотню диодов и у меня уже не хватает времени на форум...
Ещё раз спасибо!

Нельзя делать ВСЁ на одном контроллере. Ладно если у вас глюканул секторальный контроллер, и свет или питание отопления пропало в одном помещении. Но когда вся жизнь дома зависит от прихоти одного контроллера, - это не нормально. Главный контроллер вообще желательно максимально изолировать от работы с реле, искрящей нагрузкой и т.п.
Согласен, на данный момент у меня 16ти канальный модуль с опторазвязкой, сейчас же делаю 8ми канальный модуль твёрдотельного реле на семистрах с управленией по шине i2c, тоже с опторазязкой, и плюс ко всему у меня пару ардуинок всегда в запасе, тоже сильно переживал, но как не странно, всё работает без проблемм (и ещё пару один момент, не вся жизнь дома, только свет)
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
@bort707, может, не стоило ничего добавлять, но всё же... Не просто так придумали помехозащищённые линии. А тут вдруг человек говорит, что у него работает всё без всяких помехозащищённых каналов. Чудеса, однако. По витой паре. Напрямик к контролеру идут провода. Дома. У него. Насчёт соседей он ничего не говорил. К выключателю идёт витая пара, и это пока работает? Серьёзно? Ну тогда будем подождать, пока всё это заглючит. Не, мы злорадствоать не будем, просто укажем на ошибки. Если аффтор бычить не будет. А пока он бычит.
 
Изменено:

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
я не бычу, просто у меня дома всё работает более года, при этом матрица кнопок подключена даже без подтягивание строк резисторами (входы строк включил в режиме input_puulup), и всё работает по сей день.
Но после ваших постов я теперь на все сто уверен, что у меня ничего не работает вопреки своим глазам:unsure:.

Может и мне не стоило писать следующее, но а вдруг реально кому то моё решение понравится и он его захочет проверить на столе....

Ниже рабочий код на считывание матрицы кнопок 9х9, уже опробовал с диодами и при длине в 20 метров проблем не наблюдается (завтра притащу кабель подлиннее, намотаю его на сотовые и прочее барахло и вдруг у произойдёт чудо и найду у себя помехи и они испортят мне весь свет).
Если реально интересно и хотите проверить, просто заливайте код мегу2560, предварительно только ноги входов ( int pin_y[9]={36,38,40,42,44,46,48,50,52}; ) через резисторы в 10-20 кОм к земле подтяните (ЭТО ОБЯЗАТЕЛЬНО), и всё, можно пробовать. Подключайте, жмите кнопки, ищите помехи.


C++:
#include <LiquidCrystal.h>

class Matrixbutton {
  public:
    void read(){
      for (byte xm=0;xm<_x;xm++){                                                                     // перебираем столбики
        digitalWrite(pin_x[xm],1);                                                                   
        delay(20);                                                                                    //Физика, при длинных проводах обязательно делать небольшую задержку
        for (byte ym=0;ym<_y;ym++){                                                                   //Читаем строчки
          current_state[xm][ym]=digitalRead(pin_y[ym]);                                               
          if (last_state[xm][ym]==0 && current_state[xm][ym]==1){                                     //Если предыдущее 0, а новое 1, значит клавиша нажата
            event_down[xm][ym]=1;
            eventdown_start[xm][ym]=millis();                                                         //Стартуем таймер, дабы отследить длительность нажатия кнопки
          }
          if (eventdown_start[xm][ym]!=0){                                                            //Если клавиша долго нажата то перестаём пытаться регистрировать события быстрого и долгого клика
            if ((millis()-eventdown_start[xm][ym])>= 5000){
            eventdown_start[xm][ym]=0;           
            }
          }
          if (last_state[xm][ym]==1 && current_state[xm][ym]==0){                                     //Если предыдущая 1, а новое 0, значит клавиша отпущена
            event_up[xm][ym]=1;                                                                       //Регистрируем события отпускания клавиши, но ещё необходимо проверить события быстрого или долгого клика
            if (eventdown_start[xm][ym]!=0){
              if ((millis()-eventdown_start[xm][ym]) < 1100) {                                        // Если клик меньше 1.1 сек, то будем считать это быстрым кликом, если от 1.1 до 5 сек, то долгий
                event_fastclick[xm][ym]=1;
                eventdown_start[xm][ym]=0;
              } else {
                event_longclick[xm][ym]=1;
                eventdown_start[xm][ym]=0;
              }
            }
          }
          last_state[xm][ym]=current_state[xm][ym];
        }
        digitalWrite(pin_x[xm],0);  //реверс
      }
    }
    void init(){
      for (byte i=0; i<_x;i++){                                                                       //Инициализируем пины
        pinMode(pin_x[i],OUTPUT);
        digitalWrite(pin_x[i],0);                                                                     //На тот случай, если делать  puulup
      }
      for (byte i=0; i<_y;i++){
         pinMode(pin_y[i],INPUT);                                                                     //Не забываем подтянуть строки к земле через резисторы, иначе будет весело, можно правда сделать puulup, но придётся немного программу изменить
      }
      for (byte xm=0;xm<_x;xm++){                                                                     //Обнуляем матрицы состояний и таймеров
        for (byte ym=0;ym<_y;ym++){
          current_state[xm][ym]=0;
          last_state[xm][ym]=0;
          event_up[xm][ym]=0;
          event_down[xm][ym]=0;
          event_fastclick[xm][ym]=0;
          event_longclick[xm][ym]=0;
          eventdown_start[xm][ym]=0;
        }
      }
    }
   boolean clickUp(byte button){                                                                      //Просто события, после считывания события - сбрасываем событие
      if (event_up[button/_x][button%_y] == 1){
        event_up[button/_x][button%_y] =0;
        return true;       
      } else {
        return false;
      }
    }
    boolean clickDown(byte button){
      if (event_down[button/_x][button%_y] == 1){
        event_down[button/_x][button%_y] =0;
        return true;       
      } else {
        return false;
      }
    } 
    boolean fastclick(byte button){
      if (event_fastclick[button/_x][button%_y] == 1){
        event_fastclick[button/_x][button%_y] =0;
        return true;       
      } else {
        return false;
      }
    }
    boolean longclick(byte button){
      if (event_longclick[button/_x][button%_y] == 1){
        event_longclick[button/_x][button%_y] =0;
        return true;       
      } else {
        return false;
      }
    }
  private:
    const byte _x = 9;                                                                                //Количество столбиков
    const byte _y = 9;                                                                                //Количество строк
    int pin_x[9]={37,39,41,43,45,47,49,51,53};                                                        //Пины столбиков (Выходы)
    int pin_y[9]={36,38,40,42,44,46,48,50,52};                                                        //Пины строк     (Входы)
    boolean current_state[9][9];                                                                      //Размеры массивов должны соответствовать _x и _y
    boolean last_state[9][9];
    boolean event_up[9][9];
    boolean event_down[9][9];
    boolean event_fastclick[9][9];
    boolean event_longclick[9][9];
    unsigned long eventdown_start[9][9];
    
};


Matrixbutton knop;
LiquidCrystal lcd(12,11,5,4,3,2);

String str,str1,str2;
bool fl_cur,LightLcd;
unsigned long LcdTimeStart;

void setup() {
lcd.begin(16, 2);
fl_cur=false;
pinMode(8,OUTPUT);  //Управление подсветкой LCD
lcd.noDisplay();
pinMode (13,OUTPUT);
knop.init();
Serial.begin(9600); // отладка
}

void loop() {
  knop.read();                                         //Читаем кнопки
  byte f=0;
  while (f<=80){                           //Если была нажата любая кнопка, то условие в цикле сработает
    if (knop.clickUp(f)) {
      str=str+"Up="+String(f)+" ";
      fl_cur=true;
    }
    if (knop.longclick(f)){
      str=str+"LongClick="+String(f)+" ";
      fl_cur=true;
      }
    if (knop.fastclick(f)){
      str=str+"FastClick="+String(f)+" ";
      fl_cur=true;
    }
    if (knop.clickDown(f)){
      str=str+"DOWN="+String(f)+" ";
      fl_cur=true;
    }
    f++;
  }
if (LightLcd){
  if ((millis()-LcdTimeStart)>15000){     //Тушим подсветку при простое более 15 сек
    lcd.noDisplay();
    digitalWrite(8,LOW);
  }
}
if (fl_cur){                             //Если были события с кнопок, кидаем их на экран
  Serial.println(str);
  digitalWrite(8,HIGH);
  lcd.display();
  LcdTimeStart=millis();
  LightLcd=true;
  lcd.clear();
  str1=str2;
  str2=str;
  lcd.setCursor(0,0);
  lcd.print(str1);
  lcd.setCursor(0,1);
  lcd.print(str2);
  fl_cur=false;
  str="";
}

}
 

Вложения

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
474
@kostyamat, ага, а потом вдруг откуда ни возьмись появился в .... О чём это это я? Ах да, о помехах. Как только появятся в сети всякие пакостные коллекторные двигатели, индукционные плиты и прочая техника, срущая импульсами в сеть и в эфир, вот тогда будет весело. А если принимать во внимание то, что у уважаемого аффтара все исполнительные цепи завязаны в одну точку и на один контроллер, вот где ад начнётся. Хотя я такого ему не желаю.
 
Изменено:

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
@kostyamat, ага, а потом вдруг откуда ни возьмись появился в .... О чём это это я? Ах да, о помехах. Как только появятся в сети всякие пакостные коллекторные двигатели, индукционные плиты и прочая техника, срущая импульсами в сеть, вот тогда будет весело.
Было бы классно это проверить, стиралка, посудомойка, вентиляторы, холодильники, микроволновка, коммутаторы, роутеры, пылесосы, куча люстр, и всё это 365 дней без глюков. (и да, в процессе ремонта я ещё регулярно пользовался циркулярной пилой, болгаркой, всякими перфораторами (с тем самым коллекторным двигателем), и как не странно все соседи вокруг меня делают ремонт и по сей день, не было глюка ни разу.
Единственно пару раз в самом начале ночью свет включался в одной комнате, но при расследовании инцидента выяснилось, что мой кот очень любит играть с проводками (просто не все кнопки тогда ещё поставил и просто из стены торчал провод), другой помехи, окромя кота я не встречал.
Каюсь, нет индукционной плиты, на это я ничего сказать не могу.
Скажу проще, кому интересно, сам может всё проверить, кто любит просто поумничать, пусть умничает, мне по барабану. (Кстати есть куча гаджетов в продаже, которые работают по такому же принципу, и ещё и стоят от 6-8 тыр, и там до выключателей идёт ровно такой же провод, наверное все те инженеры тоже о помехах просто не знали в в момент проектирования).
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Ниже рабочий код на считывание матрицы кнопок 9х9
интересненький код...
Матрица со всеми ее 81 кнопками - запихнута в класс... класс без конструктора, но с методом init()... конкретные номера пинов забиты прямо в инит...

ТС, код, наверно, списали где-то?
 

DAK

★★★✩✩✩✩
8 Окт 2020
517
137
Понеслась. Я не хотел выкидывать код, так как реально его надо доработать. Как не печально код от первой до последней буквы писал сам.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
???
простите, не знал, что Вы сюда похвастать пришли, обсуждать код нельзя...

Как не печально код от первой до последней буквы писал сам.
это не гарантирует того, что код хороший :)

Поправлюсь - вы не списали код, но наверно переделали из похожего примера. К сожалению, вы это делали без понимания, зачем нужны классы и как их правильно использовать, поэтому в коде получилась лишь имитация использования класса. Если выкинуть класс и переписать без него - код будет проще и понятнее.
 
Изменено: