Прошу помощи разобраться с реле
- Войдите на сайт для отправки комментариев
Добрый день. Вопрос мой возможно будет банален, но я надеюсь на подсказку более знающих людей.
Планирую домашнюю автоматику на модулях:
1. Ардуино Мега 2560.
2. Модуль из 16 реле.
Веб морда выглядит пока что так:
Суть проблемы в следующем:
При включении реле от первого и до четырнадцатого, включение происходит отлично, без сбоев, а вот когда я начию выключать реле с четырнадцатого по первый происходит проблема. Она вырожается в следующем, как только я выключаю реле номер 14 то совместно с ним выключается реле номер 4 и тоже самое происходит при включении (и так с 14го по 11, например выключая 11 выключается 1е тоже), но не наоборот, если я включаю 1е, то включается 1е. Надеюсь объяснил понятно.
Прошу взглянуть на скетч (знаю колхозно довольно), и потыкать носом, что же я делаю не так?
За ранее благодарю всех, кто потратит на меня свое время. Спасибо.
#include <SPI.h> #include <Ethernet2.h> #include <DHT.h> #define DHT_1_PIN 40 #define DHT_2_PIN 41 #define DHT_3_PIN 42 #define DHT_4_PIN 43 #define DHT_5_PIN 44 #define DHT_6_PIN 45 DHT dht1(DHT_1_PIN, DHT11), dht2(DHT_2_PIN, DHT11), dht3(DHT_3_PIN, DHT11), dht4(DHT_4_PIN, DHT11), dht5(DHT_5_PIN, DHT11), dht6(DHT_6_PIN, DHT11); int relayA = 22,relayB = 23, relayC = 24, relayD = 25, relayE = 26, relayF = 27, relayG = 28,relayJ = 29, relayK = 30, relayL = 31, relayM = 32, relayN = 33, relayO = 34,relayP = 35, relayQ = 36, relayR = 37, relayS = 38, relayT = 39; int temp1, temp2, temp3, temp4, temp5, temp6; float h1, h2, h3, h4, h5, h6, t1, t2, t3, t4, t5, t6; boolean statusRA, statusRB, statusRC, statusRD, statusRE, statusRF, statusRG, statusRJ, statusRK, statusRL, statusRM, statusRN, statusRO, statusRP, statusRQ, statusRR, statusRS, statusRT = false; String readString; char c; byte mac[] = { 0x61, 0x34, 0x41, 0x30, 0x30, 0x49 }; IPAddress ip(10, 0, 0, 238); EthernetServer server(81); void setup() { pinMode(relayA, OUTPUT); pinMode(relayB, OUTPUT); pinMode(relayC, OUTPUT); pinMode(relayD, OUTPUT); pinMode(relayE, OUTPUT); pinMode(relayF, OUTPUT); pinMode(relayG, OUTPUT); pinMode(relayJ, OUTPUT); pinMode(relayK, OUTPUT); pinMode(relayL, OUTPUT); pinMode(relayM, OUTPUT); pinMode(relayN, OUTPUT); pinMode(relayO, OUTPUT); pinMode(relayP, OUTPUT); pinMode(relayQ, OUTPUT); pinMode(relayR, OUTPUT); pinMode(relayS, OUTPUT); pinMode(relayT, OUTPUT); Serial.begin(9600); while (!Serial) { ; } Ethernet.begin(mac, ip); server.begin(); dht1.begin(); dht2.begin(); dht3.begin(); dht4.begin(); dht5.begin(); dht6.begin(); } void loop() { EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { c = client.read(); if (readString.length() < 100) { readString += c; } if (c == '\n') { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<HTML>"); client.println("<HEAD>"); client.println("<meta http-equiv=\"Refresh\" content=\"4; url=/Home_controller\" />"); client.println("<meta http-equiv=\"Content-Type\" content=\"application/vnd.wap.xhtml+xml; charset=utf-8\" />"); client.println("<TITLE>Комнатная автоматика</TITLE>"); client.println("</HEAD>"); client.println("<BODY align=\"center\">"); client.println("<h1>Пульт управления реле </h1>"); client.println("<hr />"); client.println("<br />"); client.println("<br />"); client.println("<table align=\"center\"><tr>"); client.println("<th width=\"10%\">Номер розетки</th>"); client.println("<th width=\"10%\">Тумблер управления</th>"); client.println("<th width=\"10%\">Номер комнаты</th>"); client.println("<th width=\"10%\">Статус комнаты</th></tr>"); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 1"); client.println("</td><td align=\"center\">"); if (statusRA == false) { client.println("<a href=\"/1on\" />Включено</a>"); } else { client.println("<a href=\"/1off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 1"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h1); client.print("Температура: " ); client.print(t1); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 2"); client.println("</td><td align=\"center\">"); if (statusRB == false) { client.println("<a href=\"/2on\" />Включено</a>"); } else { client.println("<a href=\"/2off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 2"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h2); client.print("Температура: " ); client.print(t2); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 3"); client.println("</td><td align=\"center\">"); if (statusRC == false) { client.println("<a href=\"/3on\" />Включено</a>"); } else { client.println("<a href=\"/3off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 3"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h3); client.print("Температура: " ); client.print(t4); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 4"); client.println("</td><td align=\"center\">"); if (statusRD == false) { client.println("<a href=\"/4on\" />Включено</a>"); } else { client.println("<a href=\"/4off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 4"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h4); client.print("Температура: " ); client.print(t4); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 5"); client.println("</td><td align=\"center\">"); if (statusRE == false) { client.println("<a href=\"/5on\" />Включено</a>"); } else { client.println("<a href=\"/5off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 5"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h5); client.print("Температура: " ); client.print(t5); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 6"); client.println("</td><td align=\"center\">"); if (statusRF == false) { client.println("<a href=\"/6on\" />Включено</a>"); } else { client.println("<a href=\"/6off\" />Выключено</a>"); } client.println("</td><td align=\"center\">"); client.println("Комната № 6"); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h6); client.print("Температура: " ); client.print(t6); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 7"); client.println("</td><td align=\"center\">"); if (statusRG == false) { client.println("<a href=\"/7on\" />Включено</a>"); } else { client.println("<a href=\"/7off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 8"); client.println("</td><td align=\"center\">"); if (statusRJ == false) { client.println("<a href=\"/8on\" />Включено</a>"); } else { client.println("<a href=\"/8off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 9"); client.println("</td><td align=\"center\">"); if (statusRK == false) { client.println("<a href=\"/9on\" />Включено</a>"); } else { client.println("<a href=\"/9off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 10"); client.println("</td><td align=\"center\">"); if (statusRL == false) { client.println("<a href=\"/10on\" />Включено</a>"); } else { client.println("<a href=\"/10off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 11"); client.println("</td><td align=\"center\">"); if (statusRM == false) { client.println("<a href=\"/11on\" />Включено</a>"); } else { client.println("<a href=\"/11off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 12"); client.println("</td><td align=\"center\">"); if (statusRN == false) { client.println("<a href=\"/12on\" />Включено</a>"); } else { client.println("<a href=\"/12off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh1\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 13"); client.println("</td><td align=\"center\">"); if (statusRO == false) { client.println("<a href=\"/13on\" />Включено</a>"); } else { client.println("<a href=\"/13off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.println("Состояние розетки 14"); client.println("</td><td align=\"center\">"); if (statusRP == false) { client.println("<a href=\"/14on\" />Включено</a>"); } else { client.println("<a href=\"/14off\" />Выключено</a>"); } client.println("</td></tr>"); client.println(); client.println("</BODY>"); delay(1); client.stop(); h1= dht1.readHumidity(); t1= dht1.readTemperature(); h2= dht2.readHumidity(); t2= dht2.readTemperature(); h3= dht3.readHumidity(); t3= dht3.readTemperature(); h4= dht4.readHumidity(); t4= dht4.readTemperature(); h5= dht5.readHumidity(); t5= dht5.readTemperature(); h6= dht6.readHumidity(); t6= dht6.readTemperature(); //--------------------------------- Диапазон для управления розетками if (readString.indexOf("1on") >0){ digitalWrite(relayA, HIGH); statusRA = true; } if (readString.indexOf("1off") >0){ digitalWrite(relayA, LOW); statusRA = false; } if (readString.indexOf("2on") >0){ digitalWrite(relayB, HIGH); statusRB = true; } if (readString.indexOf("2off") >0){ digitalWrite(relayB, LOW); statusRB = false; } if (readString.indexOf("3on") >0){ digitalWrite(relayC, HIGH); statusRC = true; } if (readString.indexOf("3off") >0){ digitalWrite(relayC, LOW); statusRC = false; } if (readString.indexOf("4on") >0){ digitalWrite(relayD, HIGH); statusRD = true; } if (readString.indexOf("4off") >0){ digitalWrite(relayD, LOW); statusRD = false; } if (readString.indexOf("5on") >0){ digitalWrite(relayE, HIGH); statusRE = true; } if (readString.indexOf("5off") >0){ digitalWrite(relayE, LOW); statusRE = false; } if (readString.indexOf("6on") >0){ digitalWrite(relayF, HIGH); statusRF = true; } if (readString.indexOf("6off") >0){ digitalWrite(relayF, LOW); statusRF = false; } if (readString.indexOf("7on") >0){ digitalWrite(relayG, HIGH); statusRG = true; } if (readString.indexOf("7off") >0){ digitalWrite(relayG, LOW); statusRG = false; } if (readString.indexOf("8on") >0){ digitalWrite(relayJ, HIGH); statusRJ = true; } if (readString.indexOf("8off") >0){ digitalWrite(relayJ, LOW); statusRJ = false; } if (readString.indexOf("9on") >0){ digitalWrite(relayK, HIGH); statusRK = true; } if (readString.indexOf("9off") >0){ digitalWrite(relayK, LOW); statusRK = false; } if (readString.indexOf("10on") >0){ digitalWrite(relayL, HIGH); statusRL = true; } if (readString.indexOf("10off") >0){ digitalWrite(relayL, LOW); statusRL = false; } if (readString.indexOf("11on") >0){ digitalWrite(relayM, HIGH); statusRM = true; } if (readString.indexOf("11off") >0){ digitalWrite(relayM, LOW); statusRM = false; } if (readString.indexOf("12on") >0){ digitalWrite(relayN, HIGH); statusRN = true; } if (readString.indexOf("12off") >0){ digitalWrite(relayN, LOW); statusRN = false; } if (readString.indexOf("13on") >0){ digitalWrite(relayO, HIGH); statusRO = true; } if (readString.indexOf("13off") >0){ digitalWrite(relayO, LOW); statusRO = false; } if (readString.indexOf("14on") >0){ digitalWrite(relayP, HIGH); statusRP = true; } if (readString.indexOf("14off") >0){ digitalWrite(relayP, LOW); statusRP = false; } //--------------------------------- Диапазон для управления кранами if (t1<=20.0){ digitalWrite(relayQ, LOW); } if (t1>=25.0){ digitalWrite(relayQ, HIGH); } if (t2<=20.0){ digitalWrite(relayR, LOW); } if (t2>=25.0){ digitalWrite(relayR, HIGH); } if (t3<=20.0){ digitalWrite(relayS, LOW); } if (t3>=25.0){ digitalWrite(relayS, HIGH); } if (t4<=20.0){ digitalWrite(relayT, LOW); } if (t4>=25.0){ digitalWrite(relayT, HIGH); } readString=""; } } } } }
Если на входе попалась строка "11on", то какая строка программы должна отреагировать? 330-я? 411-я? Обе?
Вообще должна отреагировать 411, но я кажется понимаю к чему вы клоните. К тому что считывается строка не полностью а лишь ее часть 11on читается как 1on? Я правильно понимаю? Я уже думал об этом, по этому заменил всю нумерацию переменных буквами алфавита. Сейчас проверю.
О благодарю тебя! Все заработало. Ведь ну на поверхности было! Можно и удалять тему.
Брат, это не скетч, а какая-то "Палата №6"...
Вам не приходило в голову, что семь абсолютно одинаковых кусков HTML
можно заменить одним, если положить параметры в массивы?
Блин, неужели непонятно, что большие проекты не пишутся путем многократного копирования маленьких??? Ну изучите вы хоть чуть-чуть язык, прежде чем брать за монстрообразные конструкции из 14 реле...После этого понятно, почему почти каждый новичек сразу хватает Мегу... у них же ничего в Уно-то не влазит...
Конечно можно, почему бы и нет. Тогда сразу напрашивается пример. Это первый опыт работы с HTML в ардуино, сам вижу что так себе портянка.
Конечно можно, почему бы и нет. Тогда сразу напрашивается пример. Это первый опыт работы с HTML в ардуино, сам вижу что так себе портянка.
да причем тут HTML? тут речь-то о элементарном знании Си - положить температуру и влажность в массивы и итерировать по ним циклом for
Что, неужели и на это пример нужен?
Пример не нужен. Нужно вотпрямщас работающее решение как БратуВору надо.
Дед, меня от подобных проектов просто тошнит уже... мало того, что сама идея управлять светом в комнате по сети - полный бред, так еще и люди, не написавщие до того в жизни и сотни строк на Си - сразу берутся писать управление на полтора десятка реле...
Где светодиодики? Где блинк через миллис? хотя какой тут миллис, когда человек цикл ФОР не знает.
Не надо так ребята, я услышал и увидел, спасибо за пример. А вот желчь не надо тут спускать. Ну не нравится, тошнит, ну зачем заходить, тратить время и что-то, кому-то писать? Решение тут и сейчас я не прошу, свой первый вопрос я исчерпал полностью, а вот остальное вы сами развели. Я же уже выше написал и еще раз повторю, что тему можно закрывать.