Страница 21 из 23
Re: Подключение железа к AMS
Добавлено: Вс мар 10, 2019 2:05 pm
alexsis_76
Этому вас сдесь
mypractik.ru
научили?
во первых
в указанных вами библиотеках есть задежки(куда же без них), на прерываниях какие вещи организовать довольно сложно.
во вторых
для нормальной работы кода эти библиотеки запрещают прерывания
// Turn off interrupts temporarily because the next sections
// are timing critical and we don't want any interruptions.
InterruptLock lock;
иначе разрушаются временные интервалы
это называется " критические секции".
в третьих
библиотека(та что у меня да и другие наверное) имеет изменяемый интервал опроса датчика #define MIN_INTERVAL 2000 так что как ни опрашивай реальное обращение к датчику будет происходить не чаще MIN_INTERVAL, в остальное время будут возвращаться предыдущие значения
Re: Подключение железа к AMS
Добавлено: Пн мар 11, 2019 9:26 am
shemnik69
Учится никогда не поздно. Данный сайт как и много других не школа и не институт. Люди ищут варианты решения и если они и отличаются от тех что применяется профи то это не ошибка а варианты решения. Я не отнушу себя к профи в вопросе программирования МК или дпжпкгих систем скорее да точнее это хобби а раз так то вариантов может быть много.
Теперь по прерываниям. Имеются в виду не прерывания по событию а есть счётчик он генерирует команду перехода на функцию скажем 2 мс. Т к. Каждый раз мы можем в этот интервал что то сделать. Например это счётчик либо таймер.
Запрет. Полностью согласен и более того знаю это и применяю. Иначе действительно аут.
А библиотека без delay есть и прекрасно работает. Смысл это не ждать время а выполнять фоновые функции паралельно веля счёт миллисекунд и отсчитав нужные интервалы опросить тот же датчик температуры. Этот метод может и кому-то не нравится своим видом, поведением или ещё чем но то что на выходе есть желаемый результат даёт ему право быть реализованым. А что ещё нужно. И в конце... Я только предложил вариант а не сказал что делать нужно так и никак по другому.
Re: Подключение железа к AMS
Добавлено: Пн мар 11, 2019 11:18 am
alexsis_76
что применяется профи
я честно говоря не знаю что применяют проффи, я тоже любитель
Смысл это не ждать время а выполнять фоновые функции паралельно веля счёт миллисекунд и отсчитав нужные интервалы опросить тот же датчик температуры
вы все сделали правильно, эти вещи давно всем известны и применяемы, но есть способ сделать это более понятным
Re: Подключение железа к AMS
Добавлено: Сб окт 12, 2019 9:58 pm
Bolik.Stav
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)), а в разные объекты пихать не хочется. Мог кстати что-то упустить, половина делалось методом тыка)). Пишите, исправимся.
Читал-читал, но так и не нашол полного ответа. Вы смогли реализовать полностью? (работу как вы задумали, и работа с сервером MJ) .
Re: Подключение железа к AMS
Добавлено: Вс окт 13, 2019 1:32 pm
nick7zmail
Как бэ да...всё работало на тот момент уже...только на этапе стэнда. Конечного устройства на AMS у меня нет...ремонт и разводка электрики не те.
Re: Подключение железа к AMS
Добавлено: Вс окт 13, 2019 7:52 pm
eGorka
Интересно, а вообще АМС у кого нибудь работающий есть?
Re: Подключение железа к AMS
Добавлено: Вс окт 13, 2019 10:02 pm
serghei
Еще и интегрированные с гейтом MySensors )) . Да , теперь он не подключается к гейту , а сам им является. При этом элементарно решается задача работы со множеством датчиков на nrf24, nrf52832 и nrf51822
- Screenshot_2019-10-11-16-04-38.png (97.16 КБ) 4548 просмотров
Re: Подключение железа к AMS
Добавлено: Пн окт 14, 2019 6:43 am
nick7zmail
А nrf это mesh сеть, или централизованная?
Re: Подключение железа к AMS
Добавлено: Пн окт 14, 2019 8:00 am
serghei
nick7zmail писал(а): ↑Пн окт 14, 2019 6:43 am
А nrf это mesh сеть, или централизованная?
nick7zmail , привет! Я таких тонкостей не знаю , но дефайном можно подключить режим репитера и все розеточные ноды станут ретрансляторами. К тому же в последней библе есть возможность передавать сообщения и команды с ноды на ноду , минуя гейт. Но тогда адреса надо жестко прописывать в коде.
Более подробно можно обсудить в телеге
https://t.me/mysensors_rus . Скетч на форуме
Тут
Так же могут слать и бродкастовые сообщения
- MD.jpg (243.41 КБ) 4525 просмотров
PS/ АМС живет в куче ипостасиях и на разных платформах
Re: Подключение железа к AMS
Добавлено: Пн окт 14, 2019 8:08 am
nick7zmail
Ну если режим репитера есть - считай mesh сеть. Я просто в последнее время за зигби залипаю =D. Хотел тему с mysensors изучить как то...но потом в сторону зигби унесло =D.