Часы с будильником DS3231 и lcd 16*2 i2c
- Войдите на сайт для отправки комментариев
Пнд, 06/03/2017 - 19:28
Искал в интернете простенькую настройку часов с функцией будильника. То что понравилось бы мне я не нашел, и пришлось гавнокодить самому. Конечно я не программист, но может кому пригодится. Тут еще добавлен датчик влажности SI7021. А еще не дописана функция настройки автоматической подсветки. Но есть ручная, что впринципе устраивает. Вообщем кому надо переделают этот код под себя без особых проблем.
//кнопка 0 AL.S //кнопка 1 + //кнопка 2 - //кнопка 3 T.S //кнопка 4 AL.PAUSE //кнопка 5 ON/OFF //не используется // button[ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9].*** #define BUTTON_PIN 2, 3, 4, 5, 6, 7 //, 11, 21, 14, 22 // pins & buttons *** // #define DURATION_BOUNCE 10 // custom settings // #define DURATION_CLICK_DB 300 // #define DURATION_INACTIVITY_DN 1000 // #define DURATION_INACTIVITY_UP 5000 #include <BUTTON.h> #include <Wire.h> #include <DS3231.h> #include <LiquidCrystal_I2C.h> #include <EEPROM.h> DS3231 rtc(SDA, SCL); LiquidCrystal_I2C lcd(0x27, 16, 2); Time RTC_Time; int light = 11; //подсветка дисплея int buzz = 10; //пьезо пищалка float brightness = 255.00; //начальное значение яркости float fadeAmount = 25.50; //шаг яркости int flagRead=0; //переменные для блинка int flagReadA=0; //переменные для автовыключения будильника int alarm_on = 0; //включение будильника int regim=1; // режимы часов //int regim_light=1; //режим для яркости int se=0; //настройка секунд int th=0; //настройка часов времени int tm=0; //настройка минут времени int ah=0; //настройка часов будильника int am=0; //настройка минут будильника int as=0; //секунды будильника int da=0; //число int mo=0; //месяц int we=0; //день недели int ye=0; //год int auto_light = 0; //режим автолайт по умолчанию выключен int th_night = 0; //часы включения ночного режима int tm_night = 0; //минуты включения ночного режима int th_day = 0; //часы включения дневного режима int tm_day = 0; //минуты включения дневного режима int light_night = 0; //яркость ночного режима int light_day = 0; //яркость дневного режима int addr_al = 0; //ячейка EEPROM состояние будильника int addr_ah = 1; //ячейка EEPROM часы в будильнике int addr_am = 2; //ячейка EEPROM минуты в будильнике int addr_li = 10; //ячейка EEPROM уровень яркости дисплея int addr_th_night = 20; //ячейка EEPROM время включения часов ночного режима int addr_tm_night = 30; //ячейка EEPROM время включения минут ночного режима int addr_th_day = 40; //ячейка EEPROM время включения часов дневного режима int addr_tm_day = 50; //ячейка EEPROM время включения минут дневного режима int addr_light_night = 60; //ячейка EEPROM яркость ночного режима int addr_light_day = 70; //ячейка EEPROM яркость дневного режима int addr_auto_light = 80; //ячейка EEPROM режим автолайт состояние char* weekday[8] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; //массив настройки дня недели uint8_t bell[8] = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4}; //колокольчик uint8_t temp_cel[8] = {B00111, B00101, B00111, B00000, B00000, B00000, B00000}; //значок градуса const int ADDR =0x40; //si7021 int Y0,Y1,Y2,Y3; //si7021 double Y,Y_out1,Y_out2; //si7021 void setup() { Serial.begin(9600); // button_pin_auto; button_pin_pullUp; // button_pin_pullDn; pinMode(light, OUTPUT); pinMode(buzz, OUTPUT); Wire.begin(); rtc.begin(); lcd.begin(); lcd.clear(); lcd.createChar(0, bell); //колокольчик lcd.createChar(1, temp_cel); //цельсии Wire.beginTransmission(ADDR); //si7021 Wire.endTransmission(); //si7021 } void read_RTC(){ RTC_Time = rtc.getTime(); se = RTC_Time.sec; th = RTC_Time.hour; tm = RTC_Time.min; da = RTC_Time.date; mo = RTC_Time.mon; ye = RTC_Time.year; we = RTC_Time.dow;} void printTime(){ button_read; read_RTC(); Wire.beginTransmission(ADDR); Wire.write(0xE3); Wire.endTransmission(); Wire.beginTransmission(ADDR); Wire.write(0xE5); Wire.endTransmission(); Wire.requestFrom(ADDR,2); if(Wire.available()<=2);{ Y0 = Wire.read(); Y2=Y0/100; Y0=Y0%100; Y1 = Wire.read(); Y_out1 = Y2*25600; Y_out2 = Y0*256+Y1;} Y_out1 = (125*Y_out1)/65536; Y_out2 = (125*Y_out2)/65536; Y = Y_out1+Y_out2; Y=Y-6; if (button[3].event_click_Dn == 1) {SET_T();} if (button[0].event_click_Dn == 1) {lcd.clear();SET_A();} if (button[2].event_click_Dn == 1) {lcd.clear();SET_AUTO_LIGHT();} lcd.setCursor(0, 0); lcd.print(rtc.getTimeStr(FORMAT_SHORT)); //показать время auto_light = EEPROM.read(addr_auto_light); //читаем состояние автолайт alarm_on = EEPROM.read(addr_al); //читаем состояние буудильника ah = EEPROM.read(addr_ah); am = EEPROM.read(addr_am); blink_temp_rh(flagRead * 3000); //показ температуры и влажности (смена каждые 3 сек) lcd.setCursor(0, 1); lcd.print(rtc.getDateStr());//показать дату lcd.setCursor(13, 1); lcd.print(rtc.getDOWStr(FORMAT_SHORT)); //показать день недели if(alarm_on == 1){ lcd.setCursor(5, 0);lcd.write(0); //показать колокольчик if(th==ah && tm==am && se==as){lcd.clear();Alarm_work();}} else{lcd.setCursor(5, 0);lcd.print(" ");}} void blink_temp_rh(unsigned long interval){ static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //температура lcd.write(1); //значок цельсий lcd.print("C"); //цельсия } else{ lcd.clear(); lcd.setCursor(8, 0); lcd.print("RH"); lcd.print(Y); lcd.print("%"); flagRead = 1;}}} void SET_T(){ read_RTC(); regim=2; while(regim==2){ //установка часов button_read; blink_th(flagRead * 250); if (button[1].event_click_Dn == 1) {th++;} if (button[2].event_click_Dn == 1) {th--;} if(th>23){th=0;}if(th<0){th=23;} if (button[3].event_click_Dn == 1) {regim++;}} while(regim==3){ //установка минут button_read; blink_tm(flagRead * 250); if (button[1].event_click_Dn == 1) {tm++;} if (button[2].event_click_Dn == 1) {tm--;} if(tm>59){tm=0;}if(tm<0){tm=59;} if (button[3].event_click_Dn == 1) {rtc.setTime(th, tm, se);regim++;}} while(regim==4){ //установка числа button_read; blink_da(flagRead * 250); if (button[1].event_click_Dn == 1) {da++;} if (button[2].event_click_Dn == 1) {da--;} if(da>31){da=1;}if(da<1){da=31;} if (button[3].event_click_Dn == 1) {regim++;}} while(regim==5){ //установка месяца button_read; blink_mo(flagRead * 250); if (button[1].event_click_Dn == 1) {mo++;} if (button[2].event_click_Dn == 1) {mo--;} if(mo>12){mo=1;}if(mo<1){mo=12;} if (button[3].event_click_Dn == 1) {regim++;}} while(regim==6){ //установка года button_read; blink_ye(flagRead * 250); if (button[1].event_click_Dn == 1) {ye++;} if (button[2].event_click_Dn == 1) {ye--;} if(ye>2100){ye=2017;}if(ye<2017){ye=2100;} if (button[3].event_click_Dn == 1) {rtc.setDate(da, mo, ye);regim++;}} while(regim==7){ //установка дня недели button_read; blink_we(flagRead * 250); if (button[1].event_click_Dn == 1) {we++;} if (button[2].event_click_Dn == 1) {we--;} if(we>7){we=1;}if(we<1){we=7;} if (button[3].event_click_Dn == 1) {rtc.setDOW(we);regim=1;lcd.clear();}}} void blink_th(unsigned long interval){ //мигаем переменной часов в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); lcd.print(rtc.getDOWStr(FORMAT_SHORT));//показать день недели flagRead = 1;} else{ lcd.setCursor(0, 0); lcd.print(" "); flagRead = 1;}}} void blink_tm(unsigned long interval){ //мигаем переменной минут в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} else{lcd.setCursor(3, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); lcd.print(rtc.getDOWStr(FORMAT_SHORT));//показать день недели flagRead = 1;} else{ lcd.setCursor(3, 0); lcd.print(" "); flagRead = 1;}}} void blink_da(unsigned long interval){ //мигаем переменной число в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} else{lcd.setCursor(3, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); lcd.print(rtc.getDOWStr(FORMAT_SHORT));//показать день недели flagRead = 1;} else{ lcd.setCursor(0, 1); lcd.print(" "); flagRead = 1;}}} void blink_mo(unsigned long interval){ //мигаем переменной месяц в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} else{lcd.setCursor(3, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); lcd.print(rtc.getDOWStr(FORMAT_SHORT));//показать день недели flagRead = 1;} else{ lcd.setCursor(3, 1); lcd.print(" "); flagRead = 1;}}} void blink_ye(unsigned long interval){ //мигаем переменной год в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} else{lcd.setCursor(3, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); lcd.print(rtc.getDOWStr(FORMAT_SHORT));//показать день недели flagRead = 1;} else{ lcd.setCursor(6, 1); lcd.print(" "); flagRead = 1;}}} void blink_we(unsigned long interval){ //мигаем переменной день недели в установке static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); if(th<10){ lcd.setCursor(0, 0); lcd.print("0"); lcd.setCursor(1, 0);} lcd.print(th); //показать врем lcd.print(":"); if(tm<10){ lcd.setCursor(3, 0); lcd.print("0"); lcd.setCursor(4, 0);} lcd.print(tm); lcd.setCursor(9, 0); lcd.print(rtc.getTemp()); //среднее значение с 3 датчиков lcd.write(1); //значок цельсий lcd.print("C"); //цельсия if(da<10){ lcd.setCursor(0, 1); lcd.print("0"); lcd.setCursor(1, 1);} else{lcd.setCursor(0, 1);} lcd.print(da);//показать дату lcd.print("."); if(mo<10){ lcd.setCursor(3, 1); lcd.print("0"); lcd.setCursor(4, 1);} else{lcd.setCursor(3, 1);} lcd.print(mo); lcd.print("."); lcd.print(ye); lcd.print(" "); if(we==7){lcd.print(weekday[0]);} //показать день недели if(we==1){lcd.print(weekday[1]);} if(we==2){lcd.print(weekday[2]);} if(we==3){lcd.print(weekday[3]);} if(we==4){lcd.print(weekday[4]);} if(we==5){lcd.print(weekday[5]);} if(we==6){lcd.print(weekday[6]);} flagRead = 1;} else{ lcd.setCursor(13, 1); lcd.print(" "); flagRead = 1;}}} void SET_A(){ regim=2; while(regim==2){ //включение отключение будильника button_read; if (button[1].event_click_Dn == 1) {alarm_on = !alarm_on;lcd.clear();} if (button[2].event_click_Dn == 1) {alarm_on = !alarm_on;lcd.clear();} lcd.setCursor(3, 0); lcd.print("Alarm"); if(alarm_on == 1){blink_alarm_on(flagRead * 250);} else{blink_alarm_off(flagRead * 250);} ah = EEPROM.read(addr_ah); am = EEPROM.read(addr_am); lcd.setCursor(5, 1); if(ah<10){lcd.setCursor(5, 1);lcd.print("0");lcd.setCursor(6, 1);} lcd.print(ah); lcd.setCursor(7, 1); lcd.print(":"); if(am<10){lcd.setCursor(8, 1);lcd.print("0");lcd.setCursor(9, 1);} lcd.print(am); if (button[0].event_click_Dn == 1) {regim++;}} while(regim==3){ //установка часов будильника button_read; blink_ah(flagRead * 250); if (button[1].event_click_Dn == 1) {ah++;} if (button[2].event_click_Dn == 1) {ah--;} if(ah>23){ah=0;}if(ah<0){ah=23;} if (button[0].event_click_Dn == 1) {regim++;}} while(regim==4){ //установка минут будильника button_read; blink_am(flagRead * 250); if (button[1].event_click_Dn == 1) {am++;} if (button[2].event_click_Dn == 1) {am--;} if(am>59){am=0;}if(am<0){am=59;} if (button[0].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_al, alarm_on); EEPROM.write(addr_ah, ah); EEPROM.write(addr_am, am); regim=1;}}} void blink_alarm_on(unsigned long interval){ static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.setCursor(10, 0);lcd.print("on");} else{lcd.setCursor(10, 0);lcd.print(" ");flagRead = 1;}}} void blink_alarm_off(unsigned long interval){ static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){lcd.setCursor(10, 0);lcd.print("off");} else{lcd.setCursor(10, 0);lcd.print(" ");flagRead = 1;}}} void blink_ah(unsigned long interval){ //мигаем переменной включаем будильник static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); lcd.setCursor(3, 0); lcd.print("Alarm"); if(alarm_on == 1){lcd.setCursor(10, 0);lcd.print("on");} else{lcd.setCursor(10, 0);lcd.print("off");} lcd.setCursor(5, 1); if(ah<10){lcd.setCursor(5, 1);lcd.print("0");lcd.setCursor(6, 1);} lcd.print(ah); lcd.setCursor(7, 1); lcd.print(":"); if(am<10){lcd.setCursor(8, 1);lcd.print("0");lcd.setCursor(9, 1);} lcd.print(am); flagRead = 1;} else{lcd.setCursor(5, 1);lcd.print(" ");flagRead = 1;}}} void blink_am(unsigned long interval){ //мигаем переменной включаем будильник static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.clear(); lcd.setCursor(3, 0); lcd.print("Alarm"); if(alarm_on == 1){lcd.setCursor(10, 0);lcd.print("on");} else{lcd.setCursor(10, 0);lcd.print("off");} lcd.setCursor(5, 1); if(ah<10){lcd.setCursor(5, 1);lcd.print("0");lcd.setCursor(6, 1);} lcd.print(ah); lcd.setCursor(7, 1); lcd.print(":"); lcd.setCursor(8, 1); if(am<10){lcd.setCursor(8, 1);lcd.print("0");lcd.setCursor(9, 1);} lcd.print(am); flagRead = 1;} else{lcd.setCursor(8, 1);lcd.print(" ");flagRead = 1;}}} void Alarm_work(){ regim=2; while(regim==2){ button_read; light_lcd(); //почему то мигает дисплеем(может так и лучше???) //if(auto_light==1){auto_light_on();} Alarm_buzz(flagRead * 500); lcd.setCursor(0, 0); lcd.print("Alarm activated!"); lcd.setCursor(4, 1); lcd.print(rtc.getTimeStr()); //показать время Alarm_auto_off(flagReadA * 30000); //автовыключение будильника через 30 сек (получилось что через минуту???) if (button[4].event_click_Dn == 1) {noTone(buzz);lcd.clear();regim=1;}}} void Alarm_buzz(unsigned long interval){ //пищим будильником static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ tone(buzz, 500, 500); flagRead = 1;} else{ tone(buzz, 1000, 500); flagRead = 1;}}} void Alarm_auto_off(unsigned long interval){ ////автовыключение будильника через 30 сек static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ noTone(buzz);lcd.clear();regim=1; flagReadA = 1;}}} void SET_AUTO_LIGHT(){ regim=2; while(regim==2){ //включение-отключение автолайт button_read; if (button[1].event_click_Dn == 1) {auto_light = !auto_light;lcd.clear();} if (button[2].event_click_Dn == 1) {auto_light = !auto_light;lcd.clear();} lcd.setCursor(0, 0); lcd.print("Auto light:"); if(auto_light == 1){blink_auto_light_on(flagRead * 250);} else{blink_auto_light_off(flagRead * 250);} if (auto_light==1 && button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_auto_light, auto_light); regim++; } if (auto_light==0 && button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_auto_light, auto_light); regim=9; } } while(regim==3){ //установка часов включения ночного режима button_read; if (button[1].event_click_Dn == 1) {th_night++;} if (button[2].event_click_Dn == 1) {th_night--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_th_night, th_night); regim++; } } while(regim==4){ //установка минут включения ночного режима button_read; if (button[1].event_click_Dn == 1) {tm_night++;} if (button[2].event_click_Dn == 1) {tm_night--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_tm_night, tm_night); regim++; } } while(regim==5){ //установка яркости ночного режима button_read; if (button[1].event_click_Dn == 1) {light_night++;} if (button[2].event_click_Dn == 1) {light_night--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_light_night, light_night); regim++; } } while(regim==6){ //установка часов включениядневного режима button_read; if (button[1].event_click_Dn == 1) {th_day++;} if (button[2].event_click_Dn == 1) {th_day--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_th_day, th_day); regim++; } } while(regim==7){ //установка минут включения дневного режима button_read; if (button[1].event_click_Dn == 1) {tm_day++;} if (button[2].event_click_Dn == 1) {tm_day--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_tm_day, tm_day); regim++; } } while(regim==8){ //установка яркости дневного режима button_read; if (button[1].event_click_Dn == 1) {light_day++;} if (button[2].event_click_Dn == 1) {light_day--;} if (button[3].event_click_Dn == 1) { lcd.clear(); EEPROM.write(addr_light_day, light_day); regim=1; } } while(regim==9){ //установка яркости обычного режима button_read; if (button[1].event_click_Dn == 1) {if(brightness < 255){brightness = brightness + fadeAmount;}} if (button[2].event_click_Dn == 1) {if(brightness > 0){lcd.clear();brightness = brightness - fadeAmount;}} //Serial.println(brightness); lcd.setCursor(3, 0); lcd.print("Set light"); lcd.setCursor(5, 1); lcd.print(brightness/255*100); if(brightness < 255){lcd.setCursor(10, 1);lcd.print("%");} else{lcd.setCursor(11, 1);lcd.print("%");} analogWrite(light, brightness); if (button[3].event_click_Dn == 1) { EEPROM.put(addr_li, brightness); lcd.clear();regim=1;}}} void blink_auto_light_on(unsigned long interval){ static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){ lcd.setCursor(12, 0);lcd.print("on");} else{lcd.setCursor(12, 0);lcd.print(" ");flagRead = 1;}}} void blink_auto_light_off(unsigned long interval){ static unsigned long prevTime=0; if(millis() - prevTime > interval){ static boolean flag = 0; prevTime = millis(); flag =! flag; if(flag){lcd.setCursor(12, 0);lcd.print("off");} else{lcd.setCursor(12, 0);lcd.print(" ");flagRead = 1;}}} void light_lcd(){ //brightness = EEPROM.read(addr_li); EEPROM.get(addr_li, brightness); analogWrite(light, brightness); //Serial.println(brightness); //Serial.println("light_lcd"); } void auto_light_on(){ EEPROM.get(addr_li, brightness); analogWrite(light, brightness); //Serial.println(brightness); //Serial.println("auto_light_on"); } void loop() { if(regim==1){printTime();} if(auto_light==0){light_lcd();} if(auto_light==1){auto_light_on();} }А откуда библиотека BUTTON.h ? Ссылочку хочу.
http://arduino.ru/forum/programmirovanie/klass-titanovyi-velosiped-dlya-...
Вот же блин.. Не дочитал. Спасибо.
Тоже не могу эту библиотеку найти
Вот прямая ссылка на библиотеку https://dl.dropboxusercontent.com/u/3671035/BUTTON_v4f/BUTTON_v4f.zip
А эти откуда, с моими не компилируется
Вот все мои библиотеки
https://yadi.sk/d/OHJTrtEp3FdTvr
что бы небыло недопониманий, на i2c модуле от дисплея, сбоку есть перемычка, так вот ее нужно снять,
и контакт где написано LED посадить на 11 пин ардуинки. это нужно для управлением яркостью дисплея.
Подскажите, пожалуйста, что подправить в коде для работы на семисегментном индикаторе. Прошу сильно не пинать, ибо только учусь.
Подозреваю что половину кода (большую). Есть куча примеров на ваш индикатор, спросите у гугла)
А нельзя ли разместить схему часов или кратенькое описание работы кнопок. Хочу сделать такие часы на DS3231. Там ведь есть два будильника, надо ли использовать ардуиновский еепром?