76

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

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

77

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,times0;
 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() {
  if(millis()-times>5000){
  svet = map(analogRead(A2), 0,250,10,250);if(svet>250){svet=250;}
  analogWrite(10, svet);
  times0=millis();
  }
  
  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);
}

78 (2024-04-29 00:02:27 отредактировано Evgen326)

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

авторегулировка перестала работать, показания фоторезистора 0

79

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,times0;
 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() {
  if(millis()-times0>5000){
  svet = map(analogRead(A2), 0,250,10,250);if(svet>250){svet=250;}
  analogWrite(10, svet);
  times0=millis();
  }
  
  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);
}

80

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

тоже самое, показания фоторезистора 0

81

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

Еще раз загрузите последний скетч, я внес правки

82

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

Период опроса датчика 5 секунд

83

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

норм, отрабатывает как следует

84

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

По будильнику. Нужно уточнить.

Корректировку времени будильника как запускать, куда выводить время будильника. Как посмотреть время будильника.

Включение или отключение будильника осуществляется переключением тумблера D5"СИГНАЛ".

Это мне понятно.

Отключение будильника во время срабатывания в установленное время, сенсорной кнопкой №2 D12.

тоже понятно

При нажимании кнопки D4 «СБРОС» происходит перебор элементов меню, для коррекции часов, даты и месяца, установки времени будильника.

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

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

85

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

Изначально идея была следующая, нажимаем кнопку "СБРОС" и попадаем в меню настройки с выбором: часы, дата, будильник, уже в подменю производим корректировку значений. Для включения и выключения будильника отдельных подменю и значка не требуется, т.к. имеется переключатель "СИГНАЛ", в положении ВКЛ - будильник активируется и загорается светодиод.

86

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

У Вас еще 2- кнопки не заняты, может их подключить. Так будильником проще будет управлять.

87

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

к сожалению это не кнопки, а переключатели имеющие жесткие положения либо ВКЛ, либо ВЫКЛ.

88

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

к сожалению это не кнопки, а переключатели имеющие жесткие положения либо ВКЛ, либо ВЫКЛ.

Как вариант одну из этих кнопок можно использовать.
Выключена - доступна коррекция времени часов
Выключена - доступна коррекция времени будильника

Вы подумайте над вариантами.

На сегодня наверное все, тут у меня уже давно ночь. Завтра продолжим.

89

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

я так предполагаю, что в процессе корректировки значений мы столкнёмся с проблемой возврата в предыдущее меню и придется вводить в каждом подменю элемент "НАЗАД"

90

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

Спасибо. Доброй ночи.

91

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

Добрый день. Готов продолжить.

92

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

Добрый день! Да.

93 (2024-04-29 11:47:58 отредактировано Evgen326)

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

я так предполагаю, что в процессе корректировки значений мы столкнёмся с проблемой возврата в предыдущее меню и придется вводить в каждом подменю элемент "НАЗАД" или "←"

94

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

Предлагаю все же задействовать один из переключателей СЕК или СТОП для просмотра и корректировки времени будильника.

В режиме часов первая строка будет выглядеть так:
23,5*С 20:22 ПТ

В режиме будильника

ALARM  06:00 ПТ

Если в режиме будильника нажать на кнопку СБРОС, то можно корректировать время будильника.

Так будет проще и как мне кажется удобней

95

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

А что мешает сделать меню с подменю и в нем производить все корректировки, это будет выглядеть более логично, кроме того переключатели очень трудно двигаются, а тремя кнопками проще манипулировать

96

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

Я такое без собирания схемы не напишу, надо много вводить новых переменных. Это достаточно сложный алгоритм работы кнопок.

Самое простое это просто менять время будильника просто нажима час+ мин- без участия кнопки СБРОС.

97

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

Давайте хотя бы попробуем, «Дорогу осилит идущий»

98

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

Я подумаю над этим вопросом

99

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

Вам не сложно переделать подключение кнопок и переключателей (кроме сенсорных).

Убрать подтягивающие резисторы. Один вывод кнопки замкнуть на GND, а другой подать на соответствующий вход арудино.

По сути просто убрать от кнопок резисторы, а +5В общий провод для кнопок поменять на GND общий провод для кнопок.

100

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

Да могу, для меня это не проблема