HELP!!! Требуется подсказка ... в адаптации кода.

SubJorj
Offline
Зарегистрирован: 30.05.2021

Привет всем !

Пытаюсь адаптировать скетч из проекта "Temperature PID controller - Arduino"  к уже спаянному своему  терморегулятору. Отличие от оригинального проекта в дисплее - у меня OLED 0,96" и в энкодере - у меня 3 кнопки вместо него.

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

С дисплеем всё адаптировал, а вот фрагмент с обработкой энкодера, что-то то не хочет с моими кнопками работать ... Вернее кнопка "+" работает, а "-" что-то никак. Хотя в мониторе порта вижу, что при нажатии кнопки "-" переход на вектор прерывания происходит и значение переменной "dt_state" вроде такое как надо, но почему-то не обрабатывается правильно.

Вот фрагмент кода с обработкой кнопок:

До 18 строки всё нормально отрабатывает, а дальше ELSE нет, поскажите кто шарит, что я не так там делаю?

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

Уберите 20 строку. Она всё путает.

SubJorj
Offline
Зарегистрирован: 30.05.2021

mykaida пишет:

Уберите 20 строку. Она всё путает.

Убрал, безрезультатно... Такое ощущение, что на это ELSE программа вообще не попадает.

nik182
Offline
Зарегистрирован: 04.05.2015

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Странный подход к делу: Не разбираюсь, но буду что-то там править. 
Вы либо повторяйте 1 в 1 (если не разбираетесь), либо учитесь - и правьте потом что угодно (или даже пишите своё).

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

nik182 пишет:

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

Значение по умолчанию  равно 0 градусов. Нажмите кнопку установки поворотного энкодера. Поверните его влево, чтобы увеличить или уменьшить значение температуры. Нажмите кнопку установки еще раз, и теперь вы можете установить константу P для ПИД-регулятора. Нажмите еще раз и выберите значение I. Наконец, снова нажмите кнопку и выберите значение D. Теперь нажмите кнопку и выйдите из меню, и новые настройки будут сохранены.

nik182
Offline
Зарегистрирован: 04.05.2015

ua6em пишет:

nik182 пишет:

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

Значение по умолчанию  равно 0 градусов. Нажмите кнопку установки поворотного энкодера. Поверните его влево, чтобы увеличить или уменьшить значение температуры. Нажмите кнопку установки еще раз, и теперь вы можете установить константу P для ПИД-регулятора. Нажмите еще раз и выберите значение I. Наконец, снова нажмите кнопку и выберите значение D. Теперь нажмите кнопку и выйдите из меню, и новые настройки будут сохранены.

Что это было? Перевод со странички я прочитал и так. Особенно порадовали секундные задержки после каждого этого шага. Писал программу явно кто то с эстонскими корнями :-)

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

nik182 пишет:

Что это было? Перевод со странички я прочитал и так. Особенно порадовали секундные задержки после каждого этого шага. Писал программу явно кто то с эстонскими корнями :-)

раз программу смотрел, то резюме вполне естественное, всё переписать, кнопки на интах нормально работать не будут, на дюпонах однозначно!

SubJorj
Offline
Зарегистрирован: 30.05.2021

nik182 пишет:

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

Да, всё так и есть, исходный код написан для энкодера. И "хитрым" нажатием кнопок получается и уменьшать и увеличивать уставки. Но я чё то подумал, что энкодер это те же кнопки, только нажимающиеся в определенном порядке. Хотел без большой переписи кода обойтись. Видимо ошибался ...

Сам точно быстро не перепишу, придется исполнителя искать.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Инты это прерывания а дюпоны провода? Синее с горячим? А так да переписывать надо управление.

nik182
Offline
Зарегистрирован: 04.05.2015

SubJorj пишет:

nik182 пишет:

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

Да, всё так и есть, исходный код написан для энкодера. И "хитрым" нажатием кнопок получается и уменьшать и увеличивать уставки. Но я чё то подумал, что энкодер это те же кнопки, только нажимающиеся в определенном порядке. Хотел без большой переписи кода обойтись. Видимо ошибался ...

Сам точно быстро не перепишу, придется исполнителя искать.

 

Да не сильно. Надо выкинуть кусок определения какая кнопка раньше нажата и просто написать если одна то плюс, если вторая то минус. К каким ногам кнопки + - продключил?

SubJorj
Offline
Зарегистрирован: 30.05.2021

nik182 пишет:

SubJorj пишет:

nik182 пишет:

Эти клики завязаны на энкодер. Эту подпрограмму нужно выкинуть и переписать код на кнопки. . Что должно происходить при нажатии кнопок. К каким ногам прицеплены кнопки и какие функции каждая кнопка должна выполнять?  И кроме того, меню тоже управляется от энкодера. Так что это не одно место где придётся править. Или учиться две кнопки нажимать одновременно, но одну в нужную сторону чуть раньше. Несколько миллисекунд смоделируют энкодер. 

Да, всё так и есть, исходный код написан для энкодера. И "хитрым" нажатием кнопок получается и уменьшать и увеличивать уставки. Но я чё то подумал, что энкодер это те же кнопки, только нажимающиеся в определенном порядке. Хотел без большой переписи кода обойтись. Видимо ошибался ...

Сам точно быстро не перепишу, придется исполнителя искать.

 

Да не сильно. Надо выкинуть кусок определения какая кнопка раньше нажата и просто написать если одна то плюс, если вторая то минус. К каким ногам кнопки + - продключил?

D8 - "-", D9 - "+", D11 - "переключение меню", всё как в исходном проекте.

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

nik182
Offline
Зарегистрирован: 04.05.2015

Ну тогда как то так. Не проверял. Только идея.

Возможно в if придётся перевернуть условие если кнопки замыкаются на массу типа if (!clk_State)ki = ki + 1 ;

SubJorj
Offline
Зарегистрирован: 30.05.2021

nik182 пишет:

Ну тогда как то так. Не проверял. Только идея.

Возможно в if придётся перевернуть условие если кнопки замыкаются на массу типа if (!clk_State)ki = ki + 1 ;

Проверил - работает. Я правда пока только в одной секции меню поменял. С кнопками код как-то даже упростился, я бы сказал.

Спасибо огромное ! 

З/Ы: Буду пытаться ещё кое какие "хотелки" прикрутить туда. Ещё раз спасибо!

nik182
Offline
Зарегистрирован: 04.05.2015

Обращайся. Поможем.

SubJorj
Offline
Зарегистрирован: 30.05.2021

nik182 пишет:

Обращайся. Поможем.

Спасибо.

     Я сначала вообще сомневался могу ли я здесь вопрос по адаптации чужого кода задать, в правилах для новичков написано, что вопросы задавать только по коду написанному собственноручно. А я вроде как "копипастом" занимаюсь, хоть и пытаюсь его адаптировать под свое железо.

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

SubJorj пишет:

nik182 пишет:

Обращайся. Поможем.

Спасибо.

     Я сначала вообще сомневался могу ли я здесь вопрос по адаптации чужого кода задать, в правилах для новичков написано, что вопросы задавать только по коду написанному собственноручно. А я вроде как "копипастом" занимаюсь, хоть и пытаюсь его адаптировать под свое железо.

это у Ника запас добрых дел за неделю не закончился )))

nik182
Offline
Зарегистрирован: 04.05.2015

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

Maratkxk
Offline
Зарегистрирован: 29.10.2021

Добрый вечер . Возможно ли такое чтоб Ардуино начинал принимать импульс от текста смс . От самого содержимого. Например если приходит смс с текстом привет Ардуино начинает работу . Если другое слово например пока . То никаких действий не происходит .

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Чудо!
В церковь сходите.
А если серьёзно - проверять питание и программу.