51

Re: Часы (DS3231) с будильником (Arduino)

http://forum.rcl-radio.ru/uploads/images/2024/04/6830cf5a837fb7d70aa18644b58e61da.jpg

52

Re: Часы (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);
}

53

Re: Часы (DS3231) с будильником (Arduino)

http://forum.rcl-radio.ru/uploads/images/2024/04/68bab81635d1bef3f145cdf299614199.jpg

54

Re: Часы (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] = {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);
}

55

Re: Часы (DS3231) с будильником (Arduino)

http://forum.rcl-radio.ru/uploads/images/2024/04/5572c41f1e112558842b00b312780350.jpg

56

Re: Часы (DS3231) с будильником (Arduino)

Напишите алгоритм установки времени, какие кнопки нажимать и при каких условиях, с учетом что потом нужно будет устанавливать время будильника

57

Re: Часы (DS3231) с будильником (Arduino)

При нажимании кнопки D4 «СБРОС» происходит перебор элементов меню, для коррекции часов, даты и месяца, установки времени будильника.
Включение или отключение будильника осуществляется переключением тумблера D5"СИГНАЛ".
Установка времени срабатывания будильника осуществляется кнопками: кнопка D2"ЧАС" = кнопке «+», кнопка D3"МИН" = кнопке «-», кнопка «СБРОС»=SET.
Отключение будильника во время срабатывания в установленное время, сенсорной кнопкой №2 D12.

58

Re: Часы (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;
 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);
}

59

Re: Часы (DS3231) с будильником (Arduino)

http://forum.rcl-radio.ru/uploads/images/2024/04/3beb0ab08fdd8c603a326a43c51ea156.jpg

60

Re: Часы (DS3231) с будильником (Arduino)

Коррекция часов, минут и даты происходит правильно, но нет коррекции дня недели. Год потерял первые две цифры.

61

Re: Часы (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;
 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);
}

62

Re: Часы (DS3231) с будильником (Arduino)

Коррекции дня недели не бывает, DS3231 это же часы реального времени, они сами по дате определяют день недели

63

Re: Часы (DS3231) с будильником (Arduino)

Да, при коррекции цифры мигают. Год отображается правильно.

64

Re: Часы (DS3231) с будильником (Arduino)

Авто-яркость работает?

65

Re: Часы (DS3231) с будильником (Arduino)

Авто-яркость не работает

66

Re: Часы (DS3231) с будильником (Arduino)

Выход D10 это подсветка дисплея, все верно?

http://rcl-radio.ru/wp-content/uploads/2020/02/246347c54493232d221007a1c97941fe.png

Посмотрите монитор порта как меняется последний параметр при изменении освещения

67

Re: Часы (DS3231) с будильником (Arduino)

да, верно, именно так как на фото. Ещё заметил мелкий косяк, при коррекции года мигают первые две цифры, но меняются последние две.

68

Re: Часы (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;
 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);
}

69

Re: Часы (DS3231) с будильником (Arduino)

Посмотрите монитор порта как меняется последний параметр при изменении освещения

70

Re: Часы (DS3231) с будильником (Arduino)

http://forum.rcl-radio.ru/uploads/images/2024/04/39028852687baed9666fd506a676c4ee.jpg
не меняются постоянно 210

71

Re: Часы (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;
 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);
}

72

Re: Часы (DS3231) с будильником (Arduino)

для надёжности проверил, залил старый скейч, авторегулировка подсветки работает.

73

Re: Часы (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;
 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);
}

74

Re: Часы (DS3231) с будильником (Arduino)

в старом скейче авторегулировка подсветки была реализована через функцию.
http://forum.rcl-radio.ru/uploads/images/2024/04/11d93c392404802ab1da0ceb343ea829.jpg

75

Re: Часы (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;
 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);
}