Передача состояния порта по UART
- Войдите на сайт для отправки комментариев
Добрый день
Придесловие
Попалось мне в руки китайское устройство http://www.nitwo.com/sell-wifi_8do_8di_module_8relay_220v_5a_network_ethernet_wifi_control_android_mobile-1876150.html
Железо Atmega32A WIFI H-link RM04 на входах и выходах стоят оптроны PORTA INPUT PORTD OTPUT
Управляется только через свою китайскую программу. Захотел подключить его к системе умного дома
Написал прошивку для своих целей
Обработка кнопок каждая кнопка включает/выключает свое реле
Работа с wifi по статье забугорного товарища http://83.56.32.125/wifirm04.html
Так вот все работает отлично хочу добавить обратную связь т.е. Контролер умного дома через инет опрашивает железяку каждые пять минут и должен получить состояние реле включено или выключено
Кусок кода По hf,jnt WIFI
boolean has_request = false; String in = ""; if (Serial.available()) { in = ""; while (true) { // should add time out here while (Serial.available() == false) {} in += (char)(Serial.read()); if (in.endsWith("\r\n\r\n")) { has_request = true; break; } } } if (has_request) { int i1 = in.indexOf("GET /relay?f="), i2; if (i1 != -1) { i2 = in.indexOf(" ", i1+13); f = in.substring(i1+13, i2).toInt(); } Serial.println("HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close"); String sr = "<!DOCTYPE HTML >\n"; //??NO QUITAR ESPACIOS EN BLANCO!! Serial.print("Content-Length: "); Serial.print(sr.length()); Serial.print("\r\n\r\n"); if (f==10) { Serial.println("Реле1: Выключено"); } if (f==11) { Serial.println("Реле1: Включено"); } if (f==12) { Serial.println(relayON1, DEC); } Serial.print(sr); has_request = false; } switch (f){ case 10: digitalWrite(Relay1, HIGH); relayON1=0; break; case 11: digitalWrite(Relay1, LOW); relayON1=1; break; f=0; }
Загвоздка в том что команда if (f==12) { Serial.println(relayON1, DEC); } выдает всегда 1
relayON1 - integer флаг включения реле используемый при управлении кнопка и через GET Запросы
Так же пробовал if (f==12) { Serial.println(digitalRead(Relay1), DEC); } так же всегда 1
В чем может быть проблема?
Что выводится в Сериал при f=10 или f=11?
При f =10 выводится Реле1: Выключено
При f =11 выводится Реле1: Включено
При f =12 выводится "1" - если даже реле выключено
Как и где описаны переменные relayON1 и f?
Здесь ещё в конце switch "странная" конструкция f = 0; хоть это и не особенно важно, но все таки после break напрашивается закрывающаяся фигурная скобка.
UPD: и да, на какой Ардуине этот скетч выполняется?
Как и где описаны переменные relayON1 и f?
Здесь ещё в конце switch "странная" конструкция f = 0; хоть это и не особенно важно, но все таки после break напрашивается закрывающаяся фигурная скобка.
UPD: и да, на какой Ардуине этот скетч выполняется?
relayON1 - relayON8 описываются в самом начале до процедуры setup()
f описывается между setup и loop это не важно
По поводу f=0 из теории С конструкця swich case любое действие после break будет выполняться код
По поводу платформы я писал что это китайская железяка на атмега32а для того что б подружить ее с Arduino IDE я прописал в файл боард
в файл варинт написал следующие
Ну и сам скетч кривой косой секретов нет , но работающий в принципе, могу проверить работу на ардуино нано
Строки 71-75 говорят о том, что если кнопка не нажата, а relayON1 =1, то оно должно сброситься в 0.
Здесь нет проверки на дребезг кнопок, значит нажатие кнопок будет звенеть (многократно срабатывать), если нажать или отпустить кнопку.
Про switch, не проще сбросить f в 0 после switch, зачем такая сложная конструкция?
Я бы порекомендовал закрыть код кнопок для отладки, потому что он может только помешать отладке.
Могу только порекомендовать посмотреть все точки, где relayON1 устанавливается в 1, себе лучше вывести на монитор.
Переписал вот таким образом но возникла проблема другая если реле вкл/выкл GET запросом то при нажатии кномки оно срабатывает и возвращается в положение последней команды GET запроса