Hi to all!
I have 3 device: main on arduino mega,2-uno,3-esp 8266.When i press the button on my arduino mega,on uno should trigger a relay.I use bridge widget.But when i turn on mega(bridge widget run on mega)?another one device(UNO) permanently loses connection and relay and the relay constantly works,even if the button is not pressed.I use the locall server/
Добрый день!У меня есть три устройства.Главное ардуино мега,второе уно и третье есп 8266.Мне надо при нажатии кнопки,подключенной к ардуино мега, срабатывало реле на ардуино уно.Я использую для этого виджет bridge,запущенный на меге.Но когда я включаю мегу,уно начинает переодически отваливаться и опять подключаться и реле на ней периодически срабатывает независимо от того,нажималась кнопка или нет.Сервер локальный.Помогите разобраться))
// пин А6 датчик газа
// пин 4 SD карта на шилде
// пин 5 свет в спальне
// пин 7 DS термометр
// пин 10 ETHERNET SHILD
// пин 17 DHT11 ванная
// пин 18 DHT11 спальня
// пин 19 DHT11 кухня
// пин 20 SDA I2C
// пин 21 SCL I2C
// пин 22 LCD
// пин 23 LCD
// пин 24 LCD
// пин 25 LCD
// пин 26 LCD
// пин 27 LCD
// пин 28 калитка
// пин 38 пищалка
// пин 44 вентилятор в ванной
// пин 42 кнопка
// пин 48 дежурный свет
// пин 49 свет на доме
// пин 53 ETHERNET SHILD
//#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>
#include "RTClib.h"//ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИ
#include <OneWire.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
#include "DHT.h"
#include <SimpleTimer.h>
#define DHTPIN 19 //кухня
#define DHTPIN3 18 // спальня
#define DHTPIN2 17 //ванная
#define W5100_CS 10 //ethernet модуль
#define SDCARD_CS 4 // сд карта
#define DHTTYPE DHT11
// RS 22, E23, DB4 24, DB5 25, DB6 26, DB7 27
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
RTC_DS3231 rtc; //Создаем переменную для использования RTC
const int analogInPin = A6; // датчик газа
Adafruit_BMP085 bmp; // барометр
int sensorValue = 0; // переменная для хранения значения датчика газа
int p = 38; //переменная пищалки
int lcdstate=0;//переменная для вывода инфы на экран
int pr ; //давление
int tmp ;//температура на улице
int alt ;
int t ;//температура кухня
int h ;//влажность кухня
int Temp ;//температура трубы
int t3;//температура в спальне
int h3;//влажность в спальне
int t2;//температура в ванной
int h2;//влажность в ванной
bool button_state = false;
uint32_t ms_button = 0;
WidgetLED led2(V0);
WidgetLED led3(V13);
WidgetLED led4(V20);
WidgetBridge bridge1(V21);
OneWire ds(7); // на пине 7 термометр (нужен резистор 4.7 КОм)
DHT dhta(DHTPIN, DHTTYPE); // Создаем объект dhta датчик 1
DHT dhtb(DHTPIN2, DHTTYPE); // Создаем объект dhtb датчик 2
DHT dhtc(DHTPIN3, DHTTYPE); // Создаем объект dhtb датчик 3
SimpleTimer timer;
char auth[] = ***************;// для локального сервера
IPAddress server_ip (**********); // для локального сервера
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress arduino_ip ( **********);
IPAddress dns_ip ( 8, 8, 8, 8);
IPAddress gateway_ip ( ****************);
IPAddress subnet_mask(255, 255, 255, 0);
BLYNK_CONNECTED()
{
bridge1.setAuthToken("*************");
}
void sendSensor2()
{
t2 = dhtb.readTemperature(); // температура и влажность в ванной
h2 = dhtb.readHumidity();
Blynk.virtualWrite(V6, t2);
Blynk.virtualWrite(V4, h2);
if (h2>75)
{
digitalWrite(44, LOW);
}
else if (h2<65)
{
digitalWrite(44, HIGH);
}
if (digitalRead(44)==LOW)
{
led3.on();
}
if (digitalRead(44)==HIGH)
{
led3.off();
}
}
void sendSensor()
{
sensorValue = analogRead(analogInPin);
pr = bmp.readPressure()/133.3;
tmp = bmp.readTemperature()-2;
alt = bmp.readAltitude(98925);
t = dhta.readTemperature();
h = dhta.readHumidity();
t3 = dhtc.readTemperature(); // температура и влажность в спальне
h3 = dhtc.readHumidity();
//чтение температуры с датчика даллас
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
Temp = (data[1]<< 8)+data[0];
Temp = Temp>>4;
//зажигаем диод на виджете
if (digitalRead(49)==LOW)
{
led2.on();
led4.off();
}
if (digitalRead(49)==HIGH)
{
led2.off();
led4.on();
}
Blynk.virtualWrite(V2, tmp);
Blynk.virtualWrite(V7, t);
Blynk.virtualWrite(V8, pr);
Blynk.virtualWrite(V10, alt);
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V3, sensorValue);
Blynk.virtualWrite(V12, Temp);
Blynk.virtualWrite(V9, t3);
Blynk.virtualWrite(V11, h3);
if (Temp < 30 && tmp < 0)
{
Blynk.email("*******@****", "Subject: котел", "Внимание!Котел не горит!");
tone (p, 1000); //включаем на 1000 Гц
lcdstate=1;
}
else
{
lcdstate=0;
}
if (sensorValue>500)
{
lcdstate=3;
Blynk.email(*******@*******", "Subject: датчик газа", "Внимание!Превышен порог газа!");
tone (p, 1000); //включаем на 1000 Гц
}
else
{
lcdstate=0;
}
}
void knopka()
{
if (digitalRead(42) == HIGH)
{
lcdstate=2;
}
else
{
lcdstate=0;
}
Blynk.virtualWrite(V14, lcdstate);
noTone(p);
}
void LCD()
{
if (lcdstate==0)// обычный экран
{
lcd.clear();
lcd.print("Pr:");
lcd.print(pr);
lcd.print("mm ");
lcd.print( "H:");
lcd.print(h);
lcd.print( "%");
lcd.setCursor(0, 1);
lcd.print("To:");
lcd.print(tmp);
lcd.print(" Tin: ");
lcd.print(t);
}
if (lcdstate==1)// выключение отопления
{
lcd.clear();
lcd.print("OTOPLENIE OFF");
}
if (lcdstate==2)// нажатие кнопки
{
lcd.clear();
lcd.print("Teplo:");
lcd.print(Temp);
lcd.setCursor(0, 1);
lcd.print("Metan: ");
lcd.print(sensorValue);
}
if (lcdstate==3)// датчик газа
{
lcd.clear();
lcd.print("CH4: ");
lcd.print(sensorValue);
}
}
void RELE() //включение ночной подсветки
{
DateTime now = rtc.now();
int hours=now.hour();
if (hours == 22||hours == 23||hours == 24||hours == 0||hours == 1||hours == 2||hours == 3||hours == 4||hours == 5)
{
digitalWrite(48, LOW);
}
else
{
digitalWrite(48, HIGH);
}
}
void kalitka()//открытие калитки с домофона
{
uint32_t ms = millis();
bool pin_state = digitalRead(28);
// Фиксируем нажатие кнопки
if ( pin_state == LOW && ( ms - ms_button ) > 100 )
{
ms_button = ms;
bridge1.digitalWrite(8, LOW);//открываем калитку
tone (p, 1000); //включаем на 1000 Гц
timer.setTimeout(1000, door_close);
}
}
void door_close()
{
bridge1.digitalWrite(8, HIGH);//закрываем калитку
noTone(p);
}
// Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup()
{
// Serial.begin(9600);
bmp.begin();
Wire.begin();
//инициализируем часы
rtc.begin();
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //для настройки часов раскоментировать эту строку
/* Инициализируем дисплей: 2 строки по 16 символов */
lcd.begin(16, 2);
// Инициализируем датчик 1
dhta.begin();
// Инициализируем датчик 2
dhtb.begin();
// Инициализируем датчик 3
dhtc.begin();
Blynk.begin(auth, server_ip, 8442, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
pinMode(53, OUTPUT); //обьявляем режим работы пина на выход для ethernet шилда
pinMode(SDCARD_CS, OUTPUT);
pinMode(48, OUTPUT);
pinMode(44, OUTPUT);
pinMode(p, OUTPUT);
pinMode(42, INPUT);
pinMode(28, INPUT);// кнопка калитки
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card
digitalWrite(48, HIGH);
digitalWrite(49, HIGH);
//Таймеры для войдов
timer.setInterval(2000L, sendSensor);
timer.setInterval(4000L, sendSensor2); //для датчика в ванной
timer.setInterval(60000L, RELE);
timer.setInterval(1000L, LCD);
timer.setInterval(200L, kalitka);
timer.setInterval(200L, knopka);
}
void loop()
{
Blynk.run();
timer.run();
}