Re: Часы (DS3231) с будильником (Arduino)
авторегулировка подсветки заработала, но очень не корректно, резко меняется яркость, я так думаю, что необходимо вводить задержку, для более плавной работы. видео загрузить не смог
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Часы (DS3231) с будильником (Arduino)
авторегулировка подсветки заработала, но очень не корректно, резко меняется яркость, я так думаю, что необходимо вводить задержку, для более плавной работы. видео загрузить не смог
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor.git
#include <Adafruit_BME280.h> // https://github.com/adafruit/Adafruit_BME280_Library.git
// может понадобится библиотека Adafruit_I2CDevice.h >>> https://github.com/adafruit/Adafruit_BusIO.git
#include <DS3231.h> // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
Adafruit_BME280 bme;
LiquidCrystal_I2C lcd(0x27,16,2);
int hour,minut,secon,year,month,day,den;
int svet;
float temp,p,h;
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);
}
авторегулировка перестала работать, показания фоторезистора 0
#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);
}
тоже самое, показания фоторезистора 0
Еще раз загрузите последний скетч, я внес правки
Период опроса датчика 5 секунд
норм, отрабатывает как следует
По будильнику. Нужно уточнить.
Корректировку времени будильника как запускать, куда выводить время будильника. Как посмотреть время будильника.
Включение или отключение будильника осуществляется переключением тумблера D5"СИГНАЛ".
Это мне понятно.
Отключение будильника во время срабатывания в установленное время, сенсорной кнопкой №2 D12.
тоже понятно
При нажимании кнопки D4 «СБРОС» происходит перебор элементов меню, для коррекции часов, даты и месяца, установки времени будильника.
Вот здесь не совсем понятно, можно сделать что после корректировки времени можно перейти в часам и минутам будильника, но это не удобно. Есть другие варианты.
Время будильника при просмотре и корректировке куда выводить, вместо времени, тогда надо что бы на дисплее выводился какой то знакчек, что показывается время будильника а не просто время.
Изначально идея была следующая, нажимаем кнопку "СБРОС" и попадаем в меню настройки с выбором: часы, дата, будильник, уже в подменю производим корректировку значений. Для включения и выключения будильника отдельных подменю и значка не требуется, т.к. имеется переключатель "СИГНАЛ", в положении ВКЛ - будильник активируется и загорается светодиод.
У Вас еще 2- кнопки не заняты, может их подключить. Так будильником проще будет управлять.
к сожалению это не кнопки, а переключатели имеющие жесткие положения либо ВКЛ, либо ВЫКЛ.
к сожалению это не кнопки, а переключатели имеющие жесткие положения либо ВКЛ, либо ВЫКЛ.
Как вариант одну из этих кнопок можно использовать.
Выключена - доступна коррекция времени часов
Выключена - доступна коррекция времени будильника
Вы подумайте над вариантами.
На сегодня наверное все, тут у меня уже давно ночь. Завтра продолжим.
я так предполагаю, что в процессе корректировки значений мы столкнёмся с проблемой возврата в предыдущее меню и придется вводить в каждом подменю элемент "НАЗАД"
Спасибо. Доброй ночи.
Добрый день. Готов продолжить.
Добрый день! Да.
я так предполагаю, что в процессе корректировки значений мы столкнёмся с проблемой возврата в предыдущее меню и придется вводить в каждом подменю элемент "НАЗАД" или "←"
Предлагаю все же задействовать один из переключателей СЕК или СТОП для просмотра и корректировки времени будильника.
В режиме часов первая строка будет выглядеть так:
23,5*С 20:22 ПТ
В режиме будильника
ALARM 06:00 ПТ
Если в режиме будильника нажать на кнопку СБРОС, то можно корректировать время будильника.
Так будет проще и как мне кажется удобней
А что мешает сделать меню с подменю и в нем производить все корректировки, это будет выглядеть более логично, кроме того переключатели очень трудно двигаются, а тремя кнопками проще манипулировать
Я такое без собирания схемы не напишу, надо много вводить новых переменных. Это достаточно сложный алгоритм работы кнопок.
Самое простое это просто менять время будильника просто нажима час+ мин- без участия кнопки СБРОС.
Давайте хотя бы попробуем, «Дорогу осилит идущий»
Я подумаю над этим вопросом
Вам не сложно переделать подключение кнопок и переключателей (кроме сенсорных).
Убрать подтягивающие резисторы. Один вывод кнопки замкнуть на GND, а другой подать на соответствующий вход арудино.
По сути просто убрать от кнопок резисторы, а +5В общий провод для кнопок поменять на GND общий провод для кнопок.
Да могу, для меня это не проблема
forum.rcl-radio.ru → Тестирование скетчей → Часы (DS3231) с будильником (Arduino)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|