Re: Часы (DS3231) с будильником (Arduino)
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Часы (DS3231) с будильником (Arduino)
День недели
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
byte v1[8] = {0b00111111,0b11000110,0b00011000,0b01100011,0b00000100};// П
byte v2[8] = {0b00110001,0b11000110,0b00001111,0b00100001,0b11111100};// Ч
byte v3[8] = {0x3f,0x84,0x17,0xe3,0x03};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
}
void loop() {
svet = map(200, 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");lcd.print(minut/10);lcd.print(minut%10);
lcd.setCursor(8, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
lcd.print(day/10);lcd.print(day%10);lcd.print(".");lcd.print(month/10);lcd.print(month%10);lcd.print(".");lcd.print(year);
delay(1000);
}
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
}
void loop() {
svet = map(200, 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
lcd.print(hour/10);lcd.print(hour%10);lcd.print(":");lcd.print(minut/10);lcd.print(minut%10);
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
lcd.print(day/10);lcd.print(day%10);lcd.print(".");lcd.print(month/10);lcd.print(month%10);lcd.print(".");lcd.print(year);
delay(1000);
}
Напишите алгоритм установки времени, какие кнопки нажимать и при каких условиях, с учетом что потом нужно будет устанавливать время будильника
При нажимании кнопки D4 «СБРОС» происходит перебор элементов меню, для коррекции часов, даты и месяца, установки времени будильника.
Включение или отключение будильника осуществляется переключением тумблера D5"СИГНАЛ".
Установка времени срабатывания будильника осуществляется кнопками: кнопка D2"ЧАС" = кнопке «+», кнопка D3"МИН" = кнопке «-», кнопка «СБРОС»=SET.
Отключение будильника во время срабатывания в установленное время, сенсорной кнопкой №2 D12.
Коррекция времени
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(200, 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year/10%10);lcd.print(year%10);}
if(millis()-times>400){times=millis();}
delay(100);
}
Коррекция часов, минут и даты происходит правильно, но нет коррекции дня недели. Год потерял первые две цифры.
Год поправил.
При коррекции цифры мигают?
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(200, 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year);}
if(millis()-times>400){times=millis();}
delay(100);
}
Коррекции дня недели не бывает, DS3231 это же часы реального времени, они сами по дате определяют день недели
Да, при коррекции цифры мигают. Год отображается правильно.
Авто-яркость работает?
Авто-яркость не работает
Выход D10 это подсветка дисплея, все верно?
Посмотрите монитор порта как меняется последний параметр при изменении освещения
да, верно, именно так как на фото. Ещё заметил мелкий косяк, при коррекции года мигают первые две цифры, но меняются последние две.
при коррекции года мигают первые две цифры, но меняются последние две.
Поправил
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(200, 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year);}
if(millis()-times>400){times=millis();}
delay(100);
}
Посмотрите монитор порта как меняется последний параметр при изменении освещения
не меняются постоянно 210
Нашел ошибку
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(analogRead(A4), 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year);}
if(millis()-times>400){times=millis();}
delay(100);
}
для надёжности проверил, залил старый скейч, авторегулировка подсветки работает.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(analogRead(A2), 0,250,50,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year);}
if(millis()-times>400){times=millis();}
delay(100);
}
в старом скейче авторегулировка подсветки была реализована через функцию.
Сделал так же
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
int set,hh,mm,ss,dd,mn,gg;
long times;
byte v1[8] = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000};// П
byte v2[8] = {B10001,B10001,B10001,B01111,B00001,B00001,B00001,B00000};// Ч
byte v3[8] = {B11110,B10000,B10000,B11110,B10001,B10001,B11110,B00000};// Б
void setup() {
Serial.begin(9600);
lcd.init();lcd.backlight();
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
pinMode(10,OUTPUT);
analogWrite(10, 200);
clock.begin();
bme.begin(0x76);
pinMode(A2,INPUT);
pinMode(4,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
///clock.setDateTime(__DATE__, __TIME__);
}
void loop() {
svet = map(analogRead(A2), 0,100,10,250);if(svet>250){svet=250;}
analogWrite(10, svet);
DateTime = clock.getDateTime();
hour = DateTime.hour;
minut = DateTime.minute;
secon = DateTime.second;
year=DateTime.year;
month=DateTime.month;
day=DateTime.day;
den=DateTime.dayOfWeek;
hh=hour;mm=minut;ss=secon;dd=day;mn=month;gg=year;
temp = bme.readTemperature();
p = bme.readPressure() / 133.3224;
h = bme.readHumidity();
Serial.print(hour/10);Serial.print(hour%10);Serial.print(":");
Serial.print(minut/10);Serial.print(minut%10);Serial.print(":");
Serial.print(secon/10);Serial.println(secon%10);
Serial.println(temp,1);
Serial.println(p,1);
Serial.println(h,1);
Serial.println(svet);
if(digitalRead(4)==HIGH){set++;if(set>5){set=0;}delay(200);}
if(set==1 && digitalRead(2)==HIGH){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==1 && digitalRead(3)==HIGH){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(2)==HIGH){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==2 && digitalRead(3)==HIGH){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(2)==HIGH){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==3 && digitalRead(3)==HIGH){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(2)==HIGH){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==4 && digitalRead(3)==HIGH){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(2)==HIGH){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
if(set==5 && digitalRead(3)==HIGH){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
lcd.setCursor(0, 0);
lcd.print(temp,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(8, 0);
if(set==1&&millis()-times<200){lcd.print(" ");}else{lcd.print(hour/10%10);lcd.print(hour%10);}lcd.print(":");
if(set==2&&millis()-times<200){lcd.print(" ");}else{lcd.print(minut/10%10);lcd.print(minut%10);}
lcd.setCursor(14, 0);
switch(den){
case 1: lcd.write((uint8_t)1);lcd.print("H");break;//ПН
case 2: lcd.print("BT");break;
case 3: lcd.print("CP");break;
case 4: lcd.write((uint8_t)2);lcd.print("T");break; //ЧТ
case 5: lcd.write((uint8_t)1);lcd.print("T");break; //ПТ
case 6: lcd.print("C");lcd.write((uint8_t)3);break; //СБ
case 7: lcd.print("BC");break;
}
lcd.setCursor(0, 1);
lcd.print(p,0);lcd.print("mH");
lcd.setCursor(6, 1);
if(set==3&&millis()-times<200){lcd.print(" ");}else{lcd.print(day/10%10);lcd.print(day%10);}lcd.print(".");
if(set==4&&millis()-times<200){lcd.print(" ");}else{lcd.print(month/10%10);lcd.print(month%10);}lcd.print(".");
if(set==5&&millis()-times<200){lcd.print(" ");}else{lcd.print(year);}
if(millis()-times>400){times=millis();}
delay(100);
}
forum.rcl-radio.ru → Тестирование скетчей → Часы (DS3231) с будильником (Arduino)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|