ATMEGa328-ESP12 Обратная связь
- Войдите на сайт для отправки комментариев
Пнд, 20/12/2021 - 13:51
Здравствуйте, не соображу как мне наладить обратную связь между Atmega и ESP. Суть такая, нажали на кнопку соединенную с ATMEGA, загорелась лампочка. Еще раз нажали-выключилась. Тоже самое и с ESP. Но вот проблема в чем. Нажали на кнопку ATMEGA. лампа загорелась, нажимаю на кнопку ESP лампа гаснет.А вот потом нажимаю на кнопку ATMEGA лампа не загорается, она загорается если еще раз нажать. А нужно чтобы загоралась сразу. Вот схема. Вот мои куски скетчей для ATMEGA и ESP. Подскажите пожалуйста где я запутался.
ATMEGA 328 if(digitalRead(4)==LOW && flag6==0 && flag33==0 ) //управление освещением от кнопки { delay(200); digitalWrite(16,HIGH); flag33=1; flag6=1; } if(digitalRead(4)==HIGH &&flag6==1 ) //управление освещением от кнопки { flag6=0; } if(digitalRead(4)==LOW && flag6==0 && flag33==1) //управление освещением от кнопки { delay(200); digitalWrite(16,LOW); flag33=2; } if(digitalRead(4)==HIGH &&flag33==2 ) //управление освещением от кнопки { flag33=0; flag6=0; } if (digitalRead(14)==HIGH) { flag33=0; } //////////////////////////////////////////////////////////////////////////////// ESP-12 if (digitalRead(5)==LOW && flag==0) //вход с atmega8 с пина 16 на реле для включения реле от кнопки пульта { digitalWrite(2, HIGH); flag=1; } if (digitalRead(5)==HIGH && flag==1 ) { digitalWrite(2,LOW); flag=0; } if (digitalRead(2)== HIGH) //вход с atmega8 с пина 21 на реле для включения реле от кнопки пульта { digitalWrite(13, HIGH); } else digitalWrite(13, LOW);
при такой схеме странно, что лампа вообще загорается более одного раза .... должен выгореть порт или на атмеге, или на ЕСП
Фоторезистор поставь перед лампой, чтоб оба устройства знали её текущее состояние. А лучше два.
при такой схеме странно, что лампа вообще загорается более одного раза .... должен выгореть порт или на атмеге, или на ЕСП
Почему странно,16 пин Атмеги-выход, 5 пин ЕСП-вход, 2пин ЕСП-выход, 14 пин Атмеги-вход.
перемудрил, управлять лампочкой оставь амегу, с выхода ESP на вход атмеги, в коде атмеги сигнал с кнопки атмеги или ESP меняет состояние лампочки на противоположное
Почему странно,16 пин Атмеги-выход, 5 пин ЕСП-вход, 2пин ЕСП-выход, 14 пин Атмеги-вход.
а к лампе пины 16 и 2 как подключены? Что за лампа такая с тремя ногами - двумя входами и GND ?
Почему странно,16 пин Атмеги-выход, 5 пин ЕСП-вход, 2пин ЕСП-выход, 14 пин Атмеги-вход.
а к лампе пины 16 и 2 как подключены? Что за лампа такая с тремя ногами - двумя входами и GND ?
Да,не правильно нарисовал схему. Переделал.
Какой-то бред нарисован. Зачем все пины меж собой соединять? Зажигайте/тушите лампу 16 пином 328й меги по кнопке sa1, соответственно на 5 пине есп можете «видеть» - включена лампа или нет. А 13 выход есп использовать для «обратной связи», если нужно включать/выключать лампу с кнопки sa2 есп. Понятно излагаю?
Какой-то бред нарисован. Зачем все пины меж собой соединять? Зажигайте/тушите лампу 16 пином 328й меги по кнопке sa1, соответственно на 5 пине есп можете «видеть» - включена лампа или нет. А 13 выход есп использовать для «обратной связи», если нужно включать/выключать лампу с кнопки sa2 есп. Понятно излагаю?
Понятно. А если надо ыключить лампу с ЕСП? Для этого я и задействовал выход 13 ЕСП.
Какой-то бред нарисован. Зачем все пины меж собой соединять? Зажигайте/тушите лампу 16 пином 328й меги по кнопке sa1, соответственно на 5 пине есп можете «видеть» - включена лампа или нет. А 13 выход есп использовать для «обратной связи», если нужно включать/выключать лампу с кнопки sa2 есп. Понятно излагаю?
Всмотрелся, и правда бред.Вот 13 пин для обратной связи я и не могу никак насторить.
Вот так вроде бы правильно. Но не могу написать условия выполнения для этой схемы.
Какая разница - включить или выключить? Обратной связи на это ср#ть ))
Нарисуй сначала схему правильно, потом и по коду можно будет глянуть )
Нарисуй сначала схему правильно, потом и по коду можно будет глянуть )
Вот так вроде бы правильно. Но не могу написать условия выполнения для этой схемы.
Ну, вообще говоря, вот так должно работать:
При включении меги инициализируем переменную состояния порта 16 (state = LOW; digitalWrite (16, state); ). Если нажали кнопку на меге - меняем состояние порта 16 на противоположное ( digitalWrite (16, !state); ). Есп в цикле считывает состояние своего порта 5 и запоминает его в какую-то свою переменную (а так же пхает это состояние в порт 13), например state_esp. Если же нужно управлять с есп, то по нажатии кнопки на есп пихаем в 13 порт противоположное состояние state_esp (!state_esp). Мега в цикле смотрит свой порт 14 и если его состояние отлично от state, то (по аналогии с кнопкой) пхает в 16 пин обратное состояние state. Все.
Скорее всего оптимизировать нужно будет потом, чтобы постоянно в порты не писать, но это потом - пусть сначала заработает так. И какую-то проверку работоспособности обратной связи тоже, иначе может фигня получиться ))
подсоедини к двум входным пинам атмеги две кнопки и добейся, чтобы с любой кнопки лампа меняла своё состояние на противоположное, потом вторую кнопку замени на ESP с кнопкой, так понятно?
подсоедини к двум входным пинам атмеги две кнопки и добейся, чтобы с любой кнопки лампа меняла своё состояние на противоположное, потом вторую кнопку замени на ESP с кнопкой, так понятно?
Вторая кнопка виртуальная, в приложении BLYNK.
а какая разница, с ESP тебе нужен только один сигнал, входной понадобится чтобы нарисовать состояние лампы
подсоедини к двум входным пинам атмеги две кнопки и добейся, чтобы с любой кнопки лампа меняла своё состояние на противоположное, потом вторую кнопку замени на ESP с кнопкой, так понятно?
Вот на макетке собрал, подсоединил, написал код. Работает.
Вот так вроде бы правильно. Но не могу написать условия выполнения для этой схемы.
Ну, вообще говоря, вот так должно работать:
При включении меги инициализируем переменную состояния порта 16 (state = LOW; digitalWrite (16, state); ). Если нажали кнопку на меге - меняем состояние порта 16 на противоположное ( digitalWrite (16, !state); ). Есп в цикле считывает состояние своего порта 5 и запоминает его в какую-то свою переменную (а так же пхает это состояние в порт 13), например state_esp. Если же нужно управлять с есп, то по нажатии кнопки на есп пихаем в 13 порт противоположное состояние state_esp (!state_esp). Мега в цикле смотрит свой порт 14 и если его состояние отлично от state, то (по аналогии с кнопкой) пхает в 16 пин обратное состояние state. Все.
Скорее всего оптимизировать нужно будет потом, чтобы постоянно в порты не писать, но это потом - пусть сначала заработает так. И какую-то проверку работоспособности обратной связи тоже, иначе может фигня получиться ))
Вот написал вроде так, как Вы подсказали, не работает((
можно чуть-чуть упростить:
Набросал скетч, но одновременно от ЕСП и Атмеги не работает(((
Набросал скетч, но одновременно от ЕСП и Атмеги не работает(((
а почему оно должно работать, когда код атмеги не соответствует отлаженному?
Подскажите в чем ошибка? 2 дня бьюсь, не думал что это будет такой проблемой.
Потому, что ты хочешь странного
А в чем странность?
Этот код я на макетке пробовал. А тот который я в устройство заливаю чуть ниже.
А в чем странность?
в том, что ты отлаженный код выкинул и начинаешь писать всё заново, тебе осталось написать для ESP код эмулирующий кнопку и подключить выход ESP на вход атмеги, вместо любой из кнопок
управлять нагрузкой должно только одно устройство, иначе устроишь тяни-толкай на шине, с пожаром и спецэффектами. Второе устройство не должно иметь физический доступ к нагрузке, оно должно уметь передавать в другое устройство свои пожелания и запрашивать у него текущее состояние
А в чем странность?
в том, что ты отлаженный код выкинул и начинаешь писать всё заново, тебе осталось написать для ESP код эмулирующий кнопку и подключить выход ESP на вход атмеги, вместо любой из кнопок
Так я так и сделал, просто в устройстве задействованы другие пины, смысл то тот же самый вроде.
управлять нагрузкой должно только одно устройство, иначе устроишь тяни-толкай на шине, с пожаром и спецэффектами. Второе устройство не должно иметь физический доступ к нагрузке, оно должно уметь передавать в другое устройство свои пожелания и запрашивать у него текущее состояние
Я так и сделал же, реле (лампа)включаются по сигналу с атмеги, Или Вы намекаете что надо делать вот по такой схеме?
Смысл устройства такой. Блок управления на Атмеге328. С него можно включить например обогрев. А через ESP и приложение Блинк я хочу отслеживать, что обогрев включен,т.е горит лампа в приложении. И так же при нажатии кнопки в приложении обогрев должен выключиться.
и где ты видишь также? где Гайверовская библиотека, где обработка второй кнопки?
и где ты видишь также? где Гайверовская библиотека, где обработка второй кнопки?
тут нету, просто на макетке по быстрому залил и указал другие пины.
Для потомков, нашедших этот топик в будущем, пишу. Мы, жители 20-х годов 21-го века, отлично знаем что атмега и esp отлично связываются uart на скоростях вплоть до 250КБод. Просто среди нас есть недоумки ищущие свой, совершенно оригинальный путь в 3.14...
управлять нагрузкой должно только одно устройство, иначе устроишь тяни-толкай на шине, с пожаром и спецэффектами. Второе устройство не должно иметь физический доступ к нагрузке, оно должно уметь передавать в другое устройство свои пожелания и запрашивать у него текущее состояние
1. Выделенное не обязательно.
2. Можно проще.
Итак:
- один контакт лампочки подсоединяется к выходу одного контроллера.
- другой контакт лампочки подсоединяется к выходу другого контроллера.
- оба контроллера работает по одному и тому же донельзя простому алгоритму: на нажатие кнопки - переключение состояния выхода.
Все!
Никакой обратной связи, никаких пожеланий, никаких запросов.
PS. Каждый из контроллеров можно заменить на триггер - как раз есть по паре штук в одном корпусе.
После долгих мучений, я выяснил в чем проблема. При нажатии на кнопку V2 в приложении, загорается кнопка V2 в приложении,но вот лог.1 так и висит, а мне надо чтобы она перешла в лог.0 и при этом кнопка V2 продолжала гореть. Как сделать в скетче так?
Давайте я скажу не совсем по программистки (кулл пограмеров), но нарисуй (если в башке у тебя не складывается), все на бумаге. Ее порвать модно если что, и соо рази как все должно быть.
Давайте я скажу не совсем по программистки (кулл пограмеров), но нарисуй (если в башке у тебя не складывается), все на бумаге. Ее порвать модно если что, и соо рази как все должно быть.
Так нарисовал))
Загвоздка в том, что лог.1 висит постоянно пока я не изменю состояние пина. А надо чтобы я нажал вирт.кнопку SA2 и на изменила свое состояние как обычная кнопка, т.е нажал-1,и через допустим 100мс(как будто я кнопку отпустил) она вернулась в исходное состояние в лог.0. А так получается мне надо нажимать на кнопку 2 раза чтобы она изменила свое состояние .