Собственно у меня есть блютуз модуль (пока он только для отправки данных о температуре и влажности), но я хочу подключить еще устройство: DFPlayermini. И оба устройства нужно будет подключать к сериал .... вот думал может есть библиотека подходящая для этого? например AltSoftSerial ??
C++:
#include <EncButton.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include <SoftwareSerial.h>
#include "DHTStable.h"
#include <DHT22.h>
Button btn1(14); // подключаем кнопку 1 на пин 14 (Обогрев)
Button btn2(15); // подключаем кнопку 1 на пин 15 (Свет (РУНН/РУВН))
Button btn3(16); // подключаем кнопку 1 на пин 16 (Свет (Т1))
Button btn4(17); // подключаем кнопку 1 на пин 17 (Свет (Т2))
unsigned long last_read=millis(), period_read=8000; //Это параметры организации цикла измерения температуры и влажности (1000 = 1 сек)
unsigned long last_yes=millis(), period_yes=20000; //Это параметры организации цикла задержки включения вентиляции и отопления (1000 = 1 сек)
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
int knopka3=0;
const int maxMoisture=31; //максимальная влажность
const int minTemperature=10; //минимальня температура
int LPB1=0;
int LPB2=0;
#define pinDATA 6 // SDA, or almost any other I/O pin
DHT22 dht22(pinDATA);
void setup()
{
pinMode(11, OUTPUT); // пин как выход для светодиода 1
pinMode(10, OUTPUT); // пин как выход для светодиода 2
pinMode(9, OUTPUT); // пин как выход для светодиода 3
pinMode(8, OUTPUT); // пин как выход для светодиода 4
pinMode(14, INPUT); // пин как вход для кнопки 1
pinMode(15, INPUT); // пин как вход для кнопки 2
pinMode(16, INPUT); // пин как вход для кнопки 3
pinMode(17, INPUT); // пин как вход для кнопки 4
pinMode(5, OUTPUT); // пин как выход для реле 1
pinMode(4, OUTPUT); // пин как выход для реле 2
pinMode(3, OUTPUT); // пин как выход для реле 3
pinMode(2, OUTPUT); // пин как выход для реле 4
Serial.begin(9600);
lcd.init(); // Инициализируем экран, включаем подсветку
lcd.backlight();
//Устанавливаем положение курсора для первой строки.
lcd.home();
//выводим строку 1
lcd.print("Welcome!");
//выводим строку 2
lcd.setCursor(0, 1);
lcd.print("AO Sam. Transf.");
Serial.println("");
//Serial.println(__FILE__);
Serial.print("DATA VERSION: 1");
// Serial.println(DHTSTABLE_LIB_VERSION);
Serial.println("");
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
Serial.println("");
Serial.print("Авто обогрев включен"); // Само действие при длинном нажатии
digitalWrite(11, !digitalRead(11));
LPB1=1;
}
void loop()
{
if (Serial.available())
{
char c = Serial.read() ;
switch (c) {
case 't' :
Serial.println("");
Serial.print("ОПА!");
break;
case 'j' :
Serial.println("");
Serial.print("ОПА!ОПА!");
break;
}
}
if(millis()-last_read>period_read)
{ last_read=millis(); //Если работа модуля очень длительная, то тип last_read надо изменить!
float h = dht22.getHumidity(); //Измеряем влажность
float t = dht22.getTemperature(); //Измеряем температуру
if (isnan(h) || isnan(t)) // Проверка. Если не удается считать показания, выводится «Ошибка считывания», и программа завершает работу
{
Serial.println("Ошибка считывания");
return;
}
Serial.println("");
Serial.print("Влажность: ");
Serial.print(h);
Serial.println(" %\t");
Serial.print("Температура: ");
Serial.print(t);
Serial.print(" *C ");
//Вывод показателей на экран
//Устанавливаем положение курсора для первой строки.
lcd.home();
//выводим строку 1
lcd.print("Temp.: ");
lcd.print(t);
lcd.print(" *C ");
//выводим строку 2
lcd.setCursor(0, 1);
lcd.print("Humid.: ");
lcd.print(h);
lcd.print(" %");
}
// опрос кнопок происходит здесь
btn1.tick();
btn2.tick();
btn3.tick();
btn4.tick();
// клик по кнопке 1
if (btn1.click())
{
digitalWrite(5, !digitalRead(5));
digitalWrite(11, LOW);
LPB1=0;
if (digitalRead(5)==HIGH)
{Serial.print("Включен нагреватель");}
if (digitalRead(5)==LOW)
{Serial.print("Отключен нагреватель");}
}
// удержание кнопки 1
if (btn1.hold())
{
Serial.println("btn 1 holded!");
digitalWrite(5, LOW);
digitalWrite(11, !digitalRead(11));
LPB1=1;
last_yes=millis();
}
// клик по кнопке 2
if (btn2.click())
{
digitalWrite(4, !digitalRead(4));
if (digitalRead(4)==HIGH)
{Serial.print("Включен свет РУВН/РУНН");}
if (digitalRead(4)==LOW)
{Serial.print("Отключен свет РУВН/РУНН");}
}
// клик по кнопке 3
if (btn3.click())
{
digitalWrite(3, !digitalRead(3));
if (digitalRead(3)==HIGH)
{Serial.print("Включен свет Т1");}
if (digitalRead(3)==LOW)
{Serial.print("Отключен свет Т1");}
}
// клик по кнопке 4
if (btn3.click())
{
digitalWrite(2, !digitalRead(2));
if (digitalRead(2)==HIGH)
{Serial.print("Включен свет Т2");}
if (digitalRead(2)==LOW)
{Serial.print("Отключен свет Т2");}
}
//Автовентиляция
if(dht22.getHumidity()>maxMoisture&&digitalRead(11)==HIGH&&millis()-last_yes>period_yes&&LPB1==1)
{
last_yes=millis();
digitalWrite(5, HIGH);
Serial.println("");
Serial.print("Включен нагреватель");
LPB1=0;
}
if(dht22.getHumidity()<maxMoisture&&digitalRead(11)==HIGH&&millis()-last_yes>period_yes&&LPB1==0)
{
last_yes=millis();
digitalWrite(5,LOW);
Serial.println("");
Serial.print("Отключен нагреватель");
LPB1=1;
}
if(digitalRead(11)==LOW&&LPB1==1)
{
digitalWrite(5,LOW);
Serial.println("");
Serial.print("Отключен нагреватель");
LPB1=0;
// knopka1=0;//включаем кнопку1
}
}