Прошу помощи разобраться с реле
- Войдите на сайт для отправки комментариев
Добрый день. Вопрос мой возможно будет банален, но я надеюсь на подсказку более знающих людей.
Планирую домашнюю автоматику на модулях:
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
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>"); }можно заменить одним, если положить параметры в массивы?
Блин, неужели непонятно, что большие проекты не пишутся путем многократного копирования маленьких??? Ну изучите вы хоть чуть-чуть язык, прежде чем брать за монстрообразные конструкции из 14 реле...После этого понятно, почему почти каждый новичек сразу хватает Мегу... у них же ничего в Уно-то не влазит...
Конечно можно, почему бы и нет. Тогда сразу напрашивается пример. Это первый опыт работы с HTML в ардуино, сам вижу что так себе портянка.
Конечно можно, почему бы и нет. Тогда сразу напрашивается пример. Это первый опыт работы с HTML в ардуино, сам вижу что так себе портянка.
да причем тут HTML? тут речь-то о элементарном знании Си - положить температуру и влажность в массивы и итерировать по ним циклом for
Что, неужели и на это пример нужен?
for (byte i =0; i<7; i++ ) { client.println("</td><td align=\"center\">"); client.print("Комната № "); client.println(i); client.println("</td><td align=\"center\">"); client.print("Влажность: "); client.println(h[i]); client.print("Температура: " ); client.print(t[i]); client.println("</td></tr>"); client.println(); client.println("<tr class=\"trh2\"><td align=\"center\">"); client.println(" "); client.println(" "); client.print("Состояние розетки "); client.println(i); client.println("</td><td align=\"center\">"); if (statusR[i] == false) { client.print("<a href=\"/"); client.print(i); client.println("on\" />Включено</a>"); } else { client.print("<a href=\"/"); client.print(i); client.println("off\" />Выключено</a>"); } }Пример не нужен. Нужно вотпрямщас работающее решение как БратуВору надо.
Дед, меня от подобных проектов просто тошнит уже... мало того, что сама идея управлять светом в комнате по сети - полный бред, так еще и люди, не написавщие до того в жизни и сотни строк на Си - сразу берутся писать управление на полтора десятка реле...
Где светодиодики? Где блинк через миллис? хотя какой тут миллис, когда человек цикл ФОР не знает.
Не надо так ребята, я услышал и увидел, спасибо за пример. А вот желчь не надо тут спускать. Ну не нравится, тошнит, ну зачем заходить, тратить время и что-то, кому-то писать? Решение тут и сейчас я не прошу, свой первый вопрос я исчерпал полностью, а вот остальное вы сами развели. Я же уже выше написал и еще раз повторю, что тему можно закрывать.