nick7zmail писал(а): ↑Вс апр 24, 2016 11:31 pm
Еще один девайс, под который я набросал код - вот такая плата с 4 реле. Возможно немного тороплюсь, т.к. плата мне ещё не дошла, но код уже подготовил, и вроде работает.
1) Оборудование: Плата для управления 4мя нагрузками 220v.02_122.jpg
2) Возможности: Управление платой с веб интерфейса (как MD, так и AMS), а так же физическими выключателями по типу вот этих268_P_1252303217900.jpgЛично я такими управлять собираюсь...но как вариант - можно использовать обычные настенные выключатели, а реле пустить на свет.
Алгоритм работы следующий: При включении выключателем (физическим) - на сервере меняется статус. При выключении с сервера (кнопкой) устройство отключается. Чтобы включить выключателем - нужно его отключить, и снова включить - устройство включится. С сервера так же можно включать/выключать при отключенном выключателе. Устройство так же будет исправно включаться/выключаться. Дебаг выводится в монитор порта.
3) Для установки необходимо:
-распаковать файл relays.ino в папку с ams
-вписать в начало файла arduino_mega_server
Код: Выделить всё
#define RELAYS_FEATURE
byte modulRel = MODUL_NOT_COMPILLED;
boolean REL_state[4] = {0};//рядом с boolean LED_state[4] = {0};
(в места, похожие по содержанию))
-в функцию voidsetup ()
-в функцию void loop()
Код: Выделить всё
#ifdef RELAYS_FEATURE
rel_control();
#endif
-на вкладке server_ajax
Код: Выделить всё
#ifdef RELAYS_FEATURE
void SetREL() {
if (StrContains(HTTP_req, "REL1=1")) {
rel_sw(0, 1);
} else if (StrContains(HTTP_req, "REL1=0")) {
rel_sw(0, 0);
}
if (StrContains(HTTP_req, "REL2=1")) {
rel_sw(1, 1);
} else if (StrContains(HTTP_req, "REL2=0")) {
rel_sw(1, 0);;
}
if (StrContains(HTTP_req, "REL3=1")) {
rel_sw(2, 1);
} else if (StrContains(HTTP_req, "REL3=0")) {
rel_sw(2, 0);
}
if (StrContains(HTTP_req, "REL4=1")) {
rel_sw(3, 1);
} else if (StrContains(HTTP_req, "REL4=0")) {
rel_sw(3, 0);
}
}
#endif
-там же в команде void responseGeneric()
Код: Выделить всё
cl.print("<REL>");
if (REL_state[0]) {cl.print("on");}
else {cl.print("off");}
cl.println("</REL>");
cl.print("<REL>");
if (REL_state[1]) {cl.print("on");}
else {cl.print("off");}
cl.println("</REL>");
cl.print("<REL>");
if (REL_state[2]) {cl.print("on");}
else {cl.print("off");}
cl.println("</REL>");
cl.print("<REL>");
if (REL_state[3]) {cl.print("on");}
else {cl.print("off");}
cl.println("</REL>");
- в void parseRequest() в секцию request_generic
- теперь на sd карте - аналогично sample2 создаём кнопки, и привязываем к коду в js
Код: Выделить всё
var strREL1 = "";
var strREL2 = "";
var strREL3 = "";
var strREL4 = "";
var REL1_state = 0;
var REL2_state = 0;
var REL3_state = 0;
var REL4_state = 0;
....
if (this.responseXML.getElementsByTagName('REL')[0].childNodes[0].nodeValue === "on") {
document.getElementById("REL1").innerHTML = "REL 1 is ON";
REL1_state = 1;
} else {
document.getElementById("REL1").innerHTML = "REL 1 is OFF";
REL1_state = 0;
}
if (this.responseXML.getElementsByTagName('REL')[1].childNodes[0].nodeValue === "on") {
document.getElementById("REL2").innerHTML = "REL 2 is ON";
REL2_state = 1;
} else {
document.getElementById("REL2").innerHTML = "REL 2 is OFF";
REL2_state = 0;
}
if (this.responseXML.getElementsByTagName('REL')[2].childNodes[0].nodeValue === "on") {
document.getElementById("REL3").innerHTML = "REL 3 is ON";
REL3_state = 1;
} else {
document.getElementById("REL3").innerHTML = "REL 3 is OFF";
REL3_state = 0;
}
if (this.responseXML.getElementsByTagName('REL')[3].childNodes[0].nodeValue === "on") {
document.getElementById("REL4").innerHTML = "REL 4 is ON";
REL4_state = 1;
} else {
document.getElementById("REL4").innerHTML = "REL 4 is OFF";
REL4_state = 0;
}
....
strREL1 = "";
strREL2 = "";
strREL3 = "";
strREL4 = "";
.....
function GetButtonRel1() {
if (REL1_state === 1) {
REL1_state = 0;
strREL1 = "&REL1=0";
} else {
REL1_state = 1;
strREL1 = "&REL1=1";
}
}
function GetButtonRel2() {
if (REL2_state === 1) {
REL2_state = 0;
strREL2 = "&REL2=0";
} else {
REL2_state = 1;
strREL2 = "&REL2=1";
}
}
function GetButtonRel3() {
if (REL3_state === 1) {
REL3_state = 0;
strREL3 = "&REL3=0";
} else {
REL3_state = 1;
strREL3 = "&REL3=1";
}
}
function GetButtonRel4() {
if (REL4_state === 1) {
REL4_state = 0;
strREL4 = "&REL4=0";
} else {
REL4_state = 1;
strREL4 = "&REL4=1";
}
}
Ну вроде ничего не забыл....
4) Отправка в md пока не работает, но "почва" подготовлена. Не могу склеить строковую переменную с byte)), а в разные объекты пихать не хочется. Мог кстати что-то упустить, половина делалось методом тыка)). Пишите, исправимся.