Помогите доделать 3 кнопки включения реле в скетче. Mega 2560
- Войдите на сайт для отправки комментариев
Чт, 01/01/2015 - 01:57
Имею Ардуино Мега 2560 r2/
Подцепил к ней реле шилд- он использует 4,5,6,7 пины ардуины.
Подцепил к ней ENC2860 сетевуху- она тоже прекрасно отрабатывает, использует 50,51,52,53 контакты ардуино.
Подцепил к ней DHT11 датчик температуры и влажности. Использует 3 пин на ардуине.
Загружаю скетч, вижу страницу в браузере по адресу 192.168.1.35
Нажимаю включить- Включается реле 1
Нажимаю выключить - выключается реле 1
----------------------------------------------------------------
Теперь сама суть:
Хочу чтоб появились кнопки для всех реле. Чтобы тоже включать и выключать их когда хочу через браузер.
Вот код всего скетча:
#include "DHT.h" #include "etherShield.h" #include "ETHER_28J60.h" #define DHTPIN 3 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); int rele1 = 4; int rele2 = 5; int rele3 = 6; int rele4 = 7; static uint8_t mac[6] = {0x2E, 0x35, 0xB5, 0xAB, 0x3F, 0x70}; static uint8_t ip[4] = {192, 168, 1, 35}; static uint16_t port = 80; ETHER_28J60 ethernet; void setup() { ethernet.setup(mac, ip, port); dht.begin(); pinMode(rele1, OUTPUT); pinMode(rele2, OUTPUT); pinMode(rele3, OUTPUT); pinMode(rele4, OUTPUT); } void loop() { char* params; int h = dht.readHumidity(); int t = dht.readTemperature(); for (int i=0; i <= 1000; i++) { if (params = ethernet.serviceRequest()) { ethernet.print("<body background='http://bigsoft.moy.su/BackgroundSite.jpg' repeat;>"); ethernet.print("<center><H2>Temperature:<font color=#00FF00> "); ethernet.print(t); ethernet.print("</font><br></center></H2>"); ethernet.print("<H2><center>Humidity:<font color=#FF8C00> "); ethernet.print(h); ethernet.print("<br></font></center></H2>"); ethernet.print("<H1><center><A HREF='?cmd=on'>ON- Vkluchit Rele 1 </A><br></H1></center>"); ethernet.print("<center><H1><A HREF='?cmd=off'>OFF- Vikluchit Rele 1 </A></H1></center>"); if (strcmp(params, "?cmd=on") == 0) //проверка полученного запроса { digitalWrite(rele1, HIGH); } else if (strcmp(params, "?cmd=off") == 0) { digitalWrite(rele1, LOW); } ethernet.respond(); } delay(2); } }
Вместо строк 54-55 переписать:
Вместо строк 57-66 переписать:
Но это по-тупому. То, что быстро пришло в голову. Можно оптимизировать.
Ну я так первым делом попробовал.
Всегда так для начала делаю, а потом додумываю.
Но в данном случае это не сработало:
по адресу 192.168.1.35 долго долго грузится страница и открывается только это:
200 OK
A
адрес стаёт таким: http://192.168.1.35/?cmd1=on
И сделайте выбор либо вывод основной страницы, либо если идет команда то страница не выводится.
Вот таким образом включает и выключает все реле одновременно.
Не пойму как их разделить.
таким образом тоже работает.только внизу отображается HTTP/1.0 302 FoundLocation: /
насколько я понимаю, реле включается по адресу http://192.168.1.35/?cmd1=on
и выключается по адресу http://192.168.1.35/?cmd1=off
Значит мне надо создать 8 страниц для каждого реле?
но как в этот момент будут вести себя другие реле?
http://192.168.1.35/?cmd1=on
http://192.168.1.35/?cmd2=on
http://192.168.1.35/?cmd3=on
http://192.168.1.35/?cmd4=on
http://192.168.1.35/?cmd1=off
http://192.168.1.35/?cmd2=off
http://192.168.1.35/?cmd3=off
http://192.168.1.35/?cmd4=off
насколько я понимаю, реле включается по адресу http://192.168.1.35/?cmd1=on
и выключается по адресу http://192.168.1.35/?cmd1=off
Значит мне надо создать 8 страниц для каждого реле?
...
Это если вам лень парсить HTTP-запрос...
нашел кусок кода- кажется мне что-то типа этого надо. парсить http запросы я не умею к сожалению, поскажите что означает восклицательный знак - light2=!light2; это какое-то обратное условие? //LIGHT INTERNET**************** if(strcmp(params, "light") == 0){ ethernet.print("Lamp: "); ethernet.print(!light2); ethernet.print("<br>"); ethernet.print("change: "); ethernet.print("<a href='light'><button>Lamp</button></a>"); light2=!light2; digitalWrite(6, light2);
А куда вставлять cmd2? cmd3? cmd4?
Но это как самый простой и не оптимальный способ.
не думал что это сложная работа. Мне нужно то только контролировать 4 цифровых пина через веб-интерфейс.
думал, что это будут 8 кнопок- вкл и выключить каждый пин.
Оказывается это сложнейшая задача.
Нет ли у вас в закромах скетча для управления 4 пинами?
Тут в ветке все выложено уже. Осталось чуть подумать и собрать все вместе.
вот держи...расковыряешь,увидишь как надписи поменять,можно по-русски писать...датчики свои там тоже легко добавить,думаю разберешься...