Тема: Погодная станция + часы + будильник
Данный контент доступен только зарегистрированным пользователям.
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h> //Библиотека - http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
#include <Thinary_AHT10.h> // http://rcl-radio.ru/wp-content/uploads/2020/07/AHT10-master.zip
#include <Adafruit_BMP280.h> // http://rcl-radio.ru/wp-content/uploads/2018/08/Adafruit_BMP280.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <DallasTemperature.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <EEPROM.h>
#define IND 5000 // время смены показаний датчиков
LiquidCrystal_I2C lcd(0x27,20,4); // Устанавливаем дисплей
DS3231 clock;RTCDateTime DateTime;AHT10Class AHT10;
Adafruit_BMP280 bmp(10);
OneWire oneWire(A0);// вход датчика 18b20
DallasTemperature temp(&oneWire);
byte v1[8] = {7,7,7,7,7,7,7,7};
byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};
byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};//
byte v6[8] = {28,28,28,28,28,28,28,28};
byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
byte v8[8] = { 31, 31,0,0,0,0,0, 0};
int a[6],hour,minut,secon,h_alarm,m_alarm,memory,alarm,yar,mount,date;
byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;
float temp_hous,h,p,k;
unsigned long times,times1;
void setup(){
Wire.begin();AHT10.begin();lcd.init();clock.begin();bmp.begin();temp.begin();temp.setResolution(10);
///clock.setDateTime(__DATE__, __TIME__);
lcd.backlight();// Включаем подсветку дисплея
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
pinMode(2,INPUT_PULLUP); // УСТ. ВРЕМЯ
pinMode(7,INPUT_PULLUP); // УСТ. ДАТА-МЕСЯЦ-ГОД
pinMode(3,INPUT_PULLUP); // ЧАСЫ / ДАТА
pinMode(4,INPUT_PULLUP); // МИНУТЫ / МЕСЯЦ
pinMode(5,INPUT_PULLUP); // ОБНУЕНИЕ СЕКУНД / ГОД / УСТ. БУДИЛЬНИКА
pinMode(6,OUTPUT); // ZZZZZZzzzzzz.....
h_alarm = EEPROM.read(11);m_alarm = EEPROM.read(12);alarm = EEPROM.read(13);
}
void loop(){
if(millis()-times>10000){temp_hous = AHT10.GetTemperature();h = AHT10.GetHumidity();
p = bmp.readPressure()/133.3224;temp.requestTemperatures(); k = temp.getTempCByIndex(0);times = millis();} // ОПРОС ДАТЧИКОВ КАЖДЫЕ 10 СЕК
if(digitalRead(2)==LOW||digitalRead(3)==LOW||digitalRead(4)==LOW||digitalRead(5)==LOW||digitalRead(7)==LOW){times1=millis();}
DateTime=clock.getDateTime();
yar = DateTime.year; mount = DateTime.month;date = DateTime.day;hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
memory = DateTime.hour * 100 + DateTime.minute;
a[0]=DateTime.hour/10;
a[1]=DateTime.hour%10;
a[2]=DateTime.minute/10;
a[3]=DateTime.minute%10;
a[4]=DateTime.second/10;
a[5]=DateTime.second%10;
if(digitalRead(2)==LOW&&digitalRead(3)==LOW){hour++;if(hour>23){hour=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
if(digitalRead(2)==LOW&&digitalRead(4)==LOW){minut++;if(minut>59){minut=0;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
if(digitalRead(7)==LOW&&digitalRead(3)==LOW){date++;if(date>31){date=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100);}
if(digitalRead(7)==LOW&&digitalRead(4)==LOW){mount++;if(mount>12){mount=1;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
if(digitalRead(7)==LOW&&digitalRead(5)==LOW){yar++;if(yar>2050){yar=2015;} clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
if(digitalRead(2)==LOW&&digitalRead(5)==LOW){secon=0; clock.setDateTime(yar, mount, date, hour, minut, secon);delay(100); }
for(i=0;i<6;i++){
switch(i){
case 0: e1=0,e2=1,e3=2;break;
case 1: e1=3,e2=4,e3=5;break;
case 2: e1=7,e2=8,e3=9;break;
case 3: e1=10,e2=11,e3=12;break;
case 4: e1=14,e2=15,e3=16;break;
case 5: e1=17,e2=18,e3=19;break;
}
switch(a[i]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);
}
lcd.setCursor(6,0);lcd.print(".");lcd.setCursor(13,0);lcd.print(".");lcd.setCursor(6,1);lcd.print(".");lcd.setCursor(13,1);lcd.print(".");
if(digitalRead(2)==LOW){lcd.setCursor(0,2);lcd.print(" TIME SET HH:MM:SS ");}
else if(digitalRead(7)==LOW){lcd.setCursor(0,2);lcd.print(" TIME SET DD-MM-YY ");}
else if(digitalRead(2)==HIGH&&digitalRead(7)==HIGH&&digitalRead(5)==LOW){
if(digitalRead(3)==LOW){h_alarm++; if(h_alarm>23){h_alarm=0;}delay(100);EEPROM.update(11, h_alarm);}
if(digitalRead(4)==LOW){m_alarm++; if(m_alarm>59){m_alarm=0;}delay(100);EEPROM.update(12, m_alarm);}
lcd.setCursor(0,2);lcd.print("ALARM CLOCK--");lcd.print(h_alarm/10);lcd.print(h_alarm%10);lcd.print(":");lcd.print(m_alarm/10);lcd.print(m_alarm%10);}
else{lcd.setCursor(0,2);
if(alarm==0){lcd.print("------ALARM OFF-----");}
if(alarm==1){lcd.print("------ALARM ON------");}
}
//////////// ZZZZZZZZZzzzzzzzz...... ///////////////////////
if(digitalRead(3)==LOW&&digitalRead(2)==HIGH&&digitalRead(5)==HIGH&&digitalRead(7)==HIGH){alarm=1;delay(300);EEPROM.update(13, alarm);}
if(digitalRead(4)==LOW&&digitalRead(2)==HIGH&&digitalRead(5)==HIGH&&digitalRead(7)==HIGH){alarm=0;delay(300);EEPROM.update(13, alarm);}
if(h_alarm*100+m_alarm==memory&&alarm==1){tone(6,1500,150);}
if(millis()-times1<IND){
lcd.setCursor(1,3);lcd.print(DateTime.day/10);lcd.print(DateTime.day%10);lcd.print("-");
lcd.print(DateTime.month/10);lcd.print(DateTime.month%10);lcd.print("-");lcd.print(DateTime.year);
lcd.print(" ");lcd.print(temp_hous,1);lcd.print((char)223);lcd.print("C ");}
if(millis()-times1>IND){
lcd.setCursor(1,3);lcd.print(h,1);lcd.print("% "); lcd.print(p,1);lcd.print(" ");lcd.print(k,1);lcd.print((char)223);lcd.print("C ");
}
if(millis()-times1>IND*2){times1=millis();}
}