Нано, mqtt, геркон
- Войдите на сайт для отправки комментариев
Ср, 23/10/2019 - 17:25
Здравствуйте.
Подскажите пожалуйста по коду. Ардуино нано, mqtt, геркон. При срабатывании геркона в mqtt летит сначала 0, потом сразу же 1.
Для антидребезга использую библиотеку. Геркон замыкает на землю, внутренняя подтяжка включена.
Где ошибка?
#include <Bounce2.h>
#include <PubSubClient.h>
const byte inButton3 = 16;
Bounce debouncer3 = Bounce();
boolean flag_kalitka = false; //флаг калитка
boolean flag_button3 = false;
// =======================================================================
void setup()
{
pinMode(inButton3, INPUT_PULLUP);
debouncer3.attach(inButton3);
debouncer3.interval(15);
}
// =======================================================================
void loop()
{
//--------------------------------------------------------------------------------------
//проверка состояния геркона
if (debouncer4.update())
{
//факт нажатия
if (debouncer4.fell())
{
flag_button4 = true;
itoa(flag_button4, buff, 10);
client.publish("ihouse/gadget/kalitka", buff);
}
//факт отпускания
if (debouncer4.rose())
{
flag_button4 = false;
itoa(flag_button4, buff, 10);
client.publish("ihouse/gadget/kalitka", buff);
}
}
client.loop();
}
Благодарю
опять дичь какая-то.
в сетапе debouncer3, в лупе debouncer4,
нано и inButton3 = 16.
опять дичь какая-то.
в сетапе debouncer3, в лупе debouncer4,
нано и inButton3 = 16.
этот код выхолощенный с основного. конечно debouncer4.
к пину а2 подключен.
опять дичь какая-то.
в сетапе debouncer3, в лупе debouncer4,
нано и inButton3 = 16.
этот код выхолощенный с основного. конечно debouncer4.
к пину а2 подключен.
и геркон к ардуино синей изолентой подключен, так ?
вот как вам помогать.
опять дичь какая-то.
в сетапе debouncer3, в лупе debouncer4,
нано и inButton3 = 16.
этот код выхолощенный с основного. конечно debouncer4.
к пину а2 подключен.
и геркон к ардуино синей изолентой подключен, так ?
вот как вам помогать.
Нет, беленькой :)
Суть: геркон стоит на столбе, на калитке магнит. Ардуинка в доме. Расстояние 5 метров, витая пара.
Суть: геркон стоит на столбе, на калитке магнит. Ардуинка в доме. Расстояние 5 метров, витая пара.
Если вы сделали столько бестолковых ошибок, когда выкладывали код в форум - наверняка и в рабочем коде ошибок не меньше. Сядьте спокойно и напишите нормальный код. чтобы в нем все сходилось - и номера дебонсеров и правильные пины. Вполне возможно, что после этого код и без помощи форума заработает. Если нет - выкладывайте код сюда.
а флаги и строчки itoa() - можно выкинуть, они в этом коде лишние
При срабатывании геркона в mqtt летит сначала 0, потом сразу же 1.
Два значения - это чудно как-то. Это что-же получается, геркон в неправильном состоянии остался? При всех дребезгах он к 0 устаканиться должен
Суть: геркон стоит на столбе, на калитке магнит. Ардуинка в доме. Расстояние 5 метров, витая пара.
Если вы сделали столько бестолковых ошибок, когда выкладывали код в форум - наверняка и в рабочем коде ошибок не меньше. Сядьте спокойно и напишите нормальный код. чтобы в нем все сходилось - и номера дебонсеров и правильные пины. Вполне возможно, что после этого код и без помощи форума заработает. Если нет - выкладывайте код сюда.
а флаги и строчки itoa() - можно выкинуть, они в этом коде лишние
#include <Bounce2.h> #include <UIPEthernet.h> #include <PubSubClient.h> // ======================================================================= // Конфигурация устройства MQTT: uint8_t mac[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xD6 }; uint8_t myIP[4] = {192, 168, 1, 80}; uint8_t myDNS[4] = {192, 168, 1, 1}; uint8_t myGW[4] = {192, 168, 1, 1}; uint8_t myMASK[4] = {255, 255, 255, 0}; const char *mqtt_server = "192.168.1.70"; // Имя сервера MQTT const int mqtt_port = 1883; // Порт для подключения к серверу MQTT const char *mqtt_user = "*****"; // Логи от сервер const char *mqtt_pass = "******"; // Пароль от сервера EthernetClient ethClient; PubSubClient client(ethClient); // ======================================================================= const byte outPin1 = 9; // тв const byte outPin2 = 8; // боковой const byte outPin3 = 7; // свет калитка const byte outPin4 = 6; // участок //кнопки const byte inButton1 = 5; const byte inButton2 = 4; const byte inButton3 = 16; const byte inButton4 = 15; //создаем объект класса Bounce. Указываем пин, к которому подключена кнопка, и время дребезга в мс. Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); Bounce debouncer3 = Bounce(); Bounce debouncer4 = Bounce(); boolean flag_zal_tv = false; //флаг кнопка 1 boolean flag_zal_up = false; //флаг кнопка 1 boolean flag_zabor = false; //флаг участок boolean flag_kalitka = false; //флаг калитка boolean flag_button1 = false; boolean flag_button2 = false; boolean flag_button3 = false; boolean flag_button4 = false; char buff[15]; //mqtt broker uint32_t previousMillis_mqtt_connect = 0; // храним время последнего подключения uint32_t interval_mqtt_connect = 60000; //интервал uint32_t currentMillis_mqtt_connect = 0; // ======================================================================= // Функция получения данных от сервера void callback(char* topic, byte* payload, unsigned int length) { //-------------------------------------------------------------------------------------- //свет зал тв if (String(topic) == "ihouse/svet/zal/tv") { if ((char)payload[0] == '1') flag_zal_tv = true; if ((char)payload[0] == '0') flag_zal_tv = false; digitalWrite(outPin1, flag_zal_tv); } //свет зал верх if (String(topic) == "ihouse/svet/zal/up") { if ((char)payload[0] == '1') flag_zal_up = true; if ((char)payload[0] == '0') flag_zal_up = false; digitalWrite(outPin2, flag_zal_up); } //свет участок if (String(topic) == "ihouse/svet/zabor") { if ((char)payload[0] == '1') flag_zabor = true; if ((char)payload[0] == '0') flag_zabor = false; digitalWrite(outPin4, flag_zabor); } //свет калитка if (String(topic) == "ihouse/svet/kalitka") { if ((char)payload[0] == '1') flag_kalitka = true; if ((char)payload[0] == '0') flag_kalitka = false; digitalWrite(outPin3, flag_kalitka); } } // ======================================================================= void mqtt_reconnect() { currentMillis_mqtt_connect = millis(); // подключаемся к MQTT серверу if (currentMillis_mqtt_connect - previousMillis_mqtt_connect > interval_mqtt_connect) { String clientId = "nanosvetzal-"; clientId += String(random(0xffff), HEX); if (client.connect(clientId.c_str(), mqtt_user, mqtt_pass)) { //подписываемся по топики client.subscribe("ihouse/svet/zal/tv"); client.loop(); client.subscribe("ihouse/svet/zal/up"); client.loop(); client.subscribe("ihouse/svet/zabor"); client.loop(); client.subscribe("ihouse/svet/kalitka"); client.loop(); } previousMillis_mqtt_connect = currentMillis_mqtt_connect; } } // ======================================================================= void setup() { Ethernet.begin(mac,myIP,myDNS,myGW,myMASK); delay(10); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); delay(10); pinMode(inButton1, INPUT_PULLUP); pinMode(inButton2, INPUT_PULLUP); pinMode(inButton3, INPUT_PULLUP); pinMode(inButton4, INPUT_PULLUP); pinMode(outPin1, OUTPUT); digitalWrite(outPin1, LOW); pinMode(outPin2, OUTPUT); digitalWrite(outPin2, LOW); pinMode(outPin3, OUTPUT); digitalWrite(outPin3, LOW); pinMode(outPin4, OUTPUT); digitalWrite(outPin4, LOW); debouncer1.attach(inButton1); debouncer1.interval(15); debouncer2.attach(inButton2); debouncer2.interval(15); debouncer3.attach(inButton3); debouncer3.interval(100); debouncer4.attach(inButton4); debouncer4.interval(100); } // ======================================================================= void loop() { //-------------------------------------------------------------------------------------- if (!client.connected()) { mqtt_reconnect(); } //-------------------------------------------------------------------------------------- //проверка состояния кнопки1 - холл if (debouncer1.update()) { //факт нажатия if (debouncer1.fell()) { flag_zal_tv = !flag_zal_tv; digitalWrite(outPin1, flag_zal_tv); itoa(flag_zal_tv, buff, 10); client.publish("ihouse/svet/zal/tv", buff); client.publish("ihouse/svet/zal/buttonTv", "1"); } } //-------------------------------------------------------------------------------------- //проверка состояния кнопки2 - санузел if (debouncer2.update()) { //факт нажатия if (debouncer2.fell()) { flag_zal_up = !flag_zal_up; digitalWrite(outPin2, flag_zal_up); itoa(flag_zal_up, buff, 10); client.publish("ihouse/svet/zal/up", buff); client.publish("ihouse/svet/zal/buttonUp", "1"); } } //-------------------------------------------------------------------------------------- //проверка состояния геркона ворот if (debouncer3.update()) { //факт нажатия if (debouncer3.fell()) { flag_button3 = true; itoa(flag_button3, buff, 10); client.publish("ihouse/gadget/vorota", buff); } //факт отпускания if (debouncer3.rose()) { flag_button3 = false; itoa(flag_button3, buff, 10); client.publish("ihouse/gadget/vorota", buff); } } //-------------------------------------------------------------------------------------- //проверка состояния геркона калитки if (debouncer4.update()) { //факт нажатия if (debouncer4.fell()) { flag_button4 = true; itoa(flag_button4, buff, 10); client.publish("ihouse/gadget/kalitka", buff); } //факт отпускания if (debouncer4.rose()) { flag_button4 = false; itoa(flag_button4, buff, 10); client.publish("ihouse/gadget/kalitka", buff); } } client.loop(); }5 делал, 15 делал, 100 делал. все одно.