101

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

Вот скетч под новое подключение кнопок.

Нажать Сброс >> выбор корр. времени или будил. кнопки выбора мин час
Если выбрали режим нажмите сброс для начала коррекции.
Если мигания цифр нет, то можно нажать мин или час для выхода из режима корректировки

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 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};// Б  

 int reg;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  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);
}

void pic(){tone(9,1500,150);}

102 (2024-04-29 15:18:43 отредактировано Evgen326)

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

http://forum.rcl-radio.ru/uploads/images/2024/04/988f9fea5d225c9b6788cd3f4bf96a66.jpg
готово, схема перепаяна

103

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

http://forum.rcl-radio.ru/uploads/images/2024/04/43e0901546784dca3f1610e40540ac3d.jpg
http://forum.rcl-radio.ru/uploads/images/2024/04/4f9330d7caa4256b41ef0f2ae810c161.jpg
http://forum.rcl-radio.ru/uploads/images/2024/04/1d9f573fdeb79ed7ee839f5b37c6d066.jpg

104

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

попробовал установить будильник, всё настраивается, но в установленное время он не сработал

105

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

при включении переключателя "СИГНАЛ" светодиод не загорается

106

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

Еще кода будильника нет, вот только написал.

Будильник должен работать если на D5 подана 1, то есть кнопка СИГНАЛ не замкнута на GND, при этом должен светится светодиод ИНДИКАЦИЯ.
Кнопка сенсорная на D12 должна отключать сигнал будильника 

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 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};// Б  

 int reg;
 byte alarm_on;
 bool alarm;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(12,INPUT);// кнопка будильника
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  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();}

  if(digitalRead(ALARM)==HIGH){digitalWrite(8,HIGH);}else{digitalWrite(8,LOW);}

  if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
 
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();}
 
  if(digitalRead(12)==HIGH && alarm_on==1){alarm_on=2;delay(200);}
  if(digitalRead(12)==HIGH && alarm_on==1){alarm_on=2;delay(200);}  
  delay(100);
}

void pic(){if(digitalRead(5)==HIGH){tone(9,1500,150);}}

107

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

http://forum.rcl-radio.ru/uploads/images/2024/04/640968b6ee474ee342d4d6c272ab08b1.jpg

108

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

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

109

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

Пищалка подключена на D9-GND

110

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

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 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};// Б  

 int reg;
 byte alarm_on;
 bool alarm;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(12,INPUT);// кнопка будильника
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  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();}

  if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);}else{digitalWrite(8,LOW);}

  if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
 
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();}
 
  if(digitalRead(12)==HIGH && alarm_on==1){alarm_on=2;delay(200);}
  delay(100);
}

void pic(){tone(9,1500,150);}

111

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

Выход сенсорной кнопки что выдает когда нет касания?

112

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

переключатель и светодиод, работают правильно. Будильник не сработал. Для чистоты эксперимента уберу резистор из цепи пищалки.

113

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

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

114

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

в монитор порта показания сенсорной кнопки не транслируются

115

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

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

116

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

пищалку проверил, рабочая

117

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

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

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 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};// Б  

 int reg;
 byte alarm_on;
 bool alarm;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(12,INPUT);// кнопка будильника
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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);
  Serial.print("D12 = ");Serial.println(digitalRead(12));

  if(digitalRead(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  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();}
  
  alarm = 1;
  if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);}else{digitalWrite(8,LOW);}

  if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
 
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();Serial.println("ZZZZzzzz");}
 
  if(digitalRead(12)==HIGH && alarm_on==1){alarm_on=2;delay(200);} 

  delay(100);
}

void pic(){tone(9,1500,150);}

118

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

D12 - при нажатой - 0, когда нет прикосновения - 1

119

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

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 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};// Б  

 int reg;
 byte alarm_on;
 bool alarm;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(12,INPUT);// кнопка будильника
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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);
  Serial.print("D12 = ");Serial.println(digitalRead(12));

  if(digitalRead(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  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();}
  
  
  if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);alarm = 1;}else{digitalWrite(8,LOW);alarm = 0;}

  if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
 
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();Serial.println("ZZZZzzzz");}
 
  if(digitalRead(12)==LOW && alarm_on==1){alarm_on=2;delay(200);} 

  delay(100);
}

void pic(){tone(9,1500,150);}

120

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

Будильник и сенсорная кнопка отработали правильно.

121

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

Пищалка пищит?

122

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

обратил внимание, что на часах не мигает двоеточие

123

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

пищалка работает

124

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

#define SET    4
#define UP     2
#define DW     3
#define ALARM  5

#include <EEPROM.h>
#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,  hh_alarm,mm_alarm;
 long times,times0,times1;
 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};// Б  

 int reg;
 byte alarm_on;
 bool alarm,tic;


void setup() {
  Serial.begin(9600);
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);
  pinMode(10,OUTPUT); // LCD1602_LED
  pinMode(9,OUTPUT);  // BUZZER
  pinMode(8,OUTPUT);  // LED (инд. будильника)
  analogWrite(10, 200);
  clock.begin();
  bme.begin(0x76);
  pinMode(A2,INPUT);// Вход фоторезистора
  pinMode(12,INPUT);// кнопка будильника
  pinMode(SET,INPUT_PULLUP); // SET (сброс) кнопка
  pinMode(UP,INPUT_PULLUP); // UP (час+) кнопка
  pinMode(DW,INPUT_PULLUP); // DW (мин+) кнопка
  pinMode(ALARM,INPUT_PULLUP); // ВКЛ/ОТК БУД. (сигнал) тумблер
  ///clock.setDateTime(__DATE__, __TIME__);
  hh_alarm = EEPROM.read(0);mm_alarm = EEPROM.read(1);
}

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);
  Serial.print("D12 = ");Serial.println(digitalRead(12));

  if(digitalRead(SET)==LOW && reg==0){reg=1;delay(200);lcd.clear();}
  if(reg==1){
  lcd.setCursor(0, 0);
  lcd.print("SET TIME & ALARM");
  lcd.setCursor(0, 1);
  lcd.print("UP>TIME DW>ALARM");
  if(digitalRead(UP)==LOW){reg = 2;delay(200);lcd.clear();}
  if(digitalRead(DW)==LOW){reg = 3;delay(200);lcd.clear();}
  }
  if(reg==2){
  if(digitalRead(SET)==LOW){set++;if(set>5){set=0;}delay(200);} 
    
  if(set==1 && digitalRead(UP)==LOW){hh++;if(hh>23){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh--;if(hh<0){hh=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm++;if(mm>59){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm--;if(mm<0){mm=0;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(UP)==LOW){dd++;if(dd>31){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==3 && digitalRead(DW)==LOW){dd--;if(dd<1){dd=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(UP)==LOW){mn++;if(mn>12){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==4 && digitalRead(DW)==LOW){mn--;if(mn<1){mn=1;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(UP)==LOW){gg++;if(gg>2099){gg=2099;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}
  if(set==5 && digitalRead(DW)==LOW){gg--;if(gg<2024){gg=2024;}clock.setDateTime(gg, mn, dd, hh, mm, ss);delay(200);}

  lcd.setCursor(0, 0);lcd.print("SET_TIME_MENU");
  lcd.setCursor(0, 1); 
  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.print(" ");
  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(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);} 
  }

  if(reg==3){
  if(digitalRead(SET)==LOW){set++;if(set>2){set=0;}delay(200);} 
  if(set==1 && digitalRead(UP)==LOW){hh_alarm++;if(hh_alarm>23){hh_alarm=0;}delay(200);}
  if(set==1 && digitalRead(DW)==LOW){hh_alarm--;if(hh_alarm<0){hh_alarm=0;}delay(200);}
  if(set==2 && digitalRead(UP)==LOW){mm_alarm++;if(mm_alarm>59){mm_alarm=0;}delay(200);}
  if(set==2 && digitalRead(DW)==LOW){mm_alarm--;if(mm_alarm<0){mm_alarm=0;}delay(200);}
  lcd.setCursor(0, 0);lcd.print("SET_ALARM_MENU");
  lcd.setCursor(0, 1); 
  if(set==1&&millis()-times<200){lcd.print("  ");}else{lcd.print(hh_alarm/10%10);lcd.print(hh_alarm%10);}lcd.print(":");
  if(set==2&&millis()-times<200){lcd.print("  ");}else{lcd.print(mm_alarm/10%10);lcd.print(mm_alarm%10);}lcd.print(" ");

  if(set==0&&(digitalRead(UP)==LOW || digitalRead(DW)==LOW)){reg=0;set=0;lcd.clear();delay(200);EEPROM.update(0,hh_alarm);EEPROM.update(1,mm_alarm);} 
  }
  
  
  if(reg==0){
  if(millis()-times1<500){tic=1;}else{tic=0;}if(millis()-times1>1000){times1=millis();}
  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);}if(tic==1){lcd.print(":");}else{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();}
  
  
  if(digitalRead(ALARM)==LOW){digitalWrite(8,HIGH);alarm = 1;}else{digitalWrite(8,LOW);alarm = 0;}

  if(hh_alarm*100+mm_alarm!=hour*100+minut){alarm_on=0;}
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==0){alarm_on=1;}
 
  if(hh_alarm*100+mm_alarm==hour*100+minut && alarm==1 && alarm_on==1){pic();Serial.println("ZZZZzzzz");}
 
  if(digitalRead(12)==LOW && alarm_on==1){alarm_on=2;delay(200);} 

  delay(100);
}

void pic(){tone(9,1500,150);}

125

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

http://forum.rcl-radio.ru/uploads/images/2024/04/15013998787467b4f0e1caa879ad0bff.jpg