Помечено: Arduino nano часы схема
- В этой теме 115 ответов, 39 участников, последнее обновление 1 год, 7 месяцев назад сделано
Alexnev.
-
АвторСообщения
-
08.12.2018 в 14:52 #968
ksv2109
Участниксхемы нет
или транзисторный ключ на MPSA42
или ULN2003
стандартные схемы включения08.12.2018 в 19:30 #969daniadania1908
Участникдобавил библиотеку которая у автора на 3 странице что то не пашел
пишет ошибка exit status 1
no matching function for call to ‘DS3231::DS3231()’08.12.2018 в 20:54 #970ksv2109
Участникarduino 1.8.5 работает как с той , так и с этой библиотекой
exit status 1 выскакивает когда нет какой нибудь библиотеки
попробуйте просто проверить мой скетч с предыдущей страницы в своей программе08.12.2018 в 21:44 #971daniadania1908
Участникksv2109,не, ничего не поменялось
09.12.2018 в 01:27 #972ksv2109
Участникзначит проблема в установленном по
14.12.2018 в 18:02 #973Siegfried
УчастникКлассный проект,я повторил его.Все заработало но напряжение было низковато. Исправил с помощью индуктивности на 470 мкГн и настройкой «AnalogWrite».
10.01.2019 в 00:12 #976graf_8
УчастникПодправил немного код на 6 ламп
Arduino123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444#include <DS3231.h>#include <Wire.h>#include <EEPROM.h>// точка секунд берется с 3 вывода DS3231// выводы для дешифратораint out1 = A3;int out2 = A0;int out4 = A1;int out8 = A2;// выводы для транзисторных ключейint key1= 9;int key2 = 8;int key3 = 7;int key4 = 6;int key5 = 5;int key6 = 4;int keyb = A7;// пин для клавиатурыint buzz = 2;//пин пищалкиint sec;int x=0;//счетчик бояint v=0; // счетчик времени после отпускания кнопкиint alr; // срабатывание будильникаint alrhour;//часы будильникаint alrminute;//минуты будильникаint pwalr; // вкл выкл будильникаint pwbo; //почасовой сигнал вкл выклint keynum = 0; //номер нажатой кнопкиint mode = 0; //менюbool blinkflag = 0; // флаг для мигания цифр при установке времениbool timeout = false; // таймаут после нажатия кнопкиunsigned long startTime; //для мигания пиканья :)unsigned long startTime2; // для опроса нажатых кнопокDS3231 Clock;// переменные для работы ds3231bool Century = false;bool h12;bool PM;int second, minute, hour, date, month, year, temperature;void setup() {Wire.begin();// старт I2CClock.enableOscillator(true, false, 0);//установка 1 с на 3 выводе DS3231pinMode(out1,OUTPUT);pinMode(out2,OUTPUT);pinMode(out4,OUTPUT);pinMode(out8,OUTPUT);pinMode(key1,OUTPUT);pinMode(key2,OUTPUT);pinMode(key3,OUTPUT);pinMode(key4,OUTPUT);pinMode(key5,OUTPUT);pinMode(key6,OUTPUT);pinMode(buzz, OUTPUT);startTime = millis();startTime2 = startTime;sec = 0;alrhour=EEPROM.read(1);//считываем ячейки памятиalrminute=EEPROM.read(2);pwalr=EEPROM.read(3);pwbo=EEPROM.read(4);ReadDS3231();// считываем текущее вермя}void ReadDS3231(){ minute = Clock.getMinute();hour = Clock.getHour(h12, PM);second = Clock.getSecond();}//перебор всех цифр----------void loop() {if (second==59)//раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{ scroll (250);}show();}void scroll(int pause) {for (int i = 0; i < 9; i++) {int a[] = {i, i, i, i, i, i};show(a);delay(2);show(a);}}//меню--------------------------------------------void show() {int digits[3]; // массив для текущего значения времени на четыре цифрыint keyval = analogRead(keyb); // считываем значение с клавиатурыunsigned long currentTime = millis(); //текущее время с момента запускаif (currentTime >= (startTime2 + 200)){ timeout = false;//проверим нажатие кнопок----------------------------------------if (alr==1){if ((keynum == 1 )||(keynum == 2 )||(keynum == 3)){pwalr=0;}}else{if (keynum == 2) // кнопка переключения между меню{ timeout = true; // запрещаем считывать нажатия кнопокif (mode == 0) mode = 1;//настр минутelse if (mode == 1) mode = 2;//настр часовelse if (mode == 2) mode = 3;//вкл выкл будильникelse if (mode == 3) mode = 4;//вкл выкл бойelse if (mode == 4) mode = 5;//настр мин будelse if (mode == 5) mode = 6;//настр час будelse if (mode == 6) mode = 0;v = 0;}if (keynum == 3) // кнопка увеличения количества{ blinkflag = true; // прекращаем мигать цифрамиstartTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 1) {minute++;if(minute>59){minute=0;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2) {hour++;if(hour>23){hour=0;}Clock.setHour(hour);v = 0;}if (mode == 3) {pwalr++;if(pwalr>1){pwalr=0;}EEPROM.write(3,pwalr);v = 0;}if (mode == 4) {pwbo++;if(pwbo>1){pwbo=0;}EEPROM.write(4,pwbo);v = 0;}if (mode == 5) {alrminute++;if(alrminute>59){alrminute=0;}EEPROM.write(2,alrminute);v = 0;}if (mode == 6) {alrhour++;if(alrhour>23){alrhour=0;}EEPROM.write(1,alrhour);v = 0;}}if (keynum == 1 )// кнопка уменьшения количества{ blinkflag = true; // прекращаем мигать цифрамиstartTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 1) {minute--;if(minute<0){minute=59;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2) {hour--;if(hour<0){hour=23;}Clock.setHour(hour);v = 0;}if (mode == 3) {pwalr--;if(pwalr<0){pwalr=1;}EEPROM.write(3,pwalr);v = 0;}if (mode == 4) {pwbo--;if(pwbo<0){pwbo=1;}EEPROM.write(4,pwbo);v = 0;}if (mode == 5) {alrminute--;if(alrminute<0){alrminute=59;}EEPROM.write(2,alrminute);v = 0;}if (mode == 6) {alrhour--;if(alrhour<0){alrhour=23;}EEPROM.write(1,alrhour);v = 0;}}}v++;//сброс в 0 меню после нажатие кнопкиif (v >= 60){mode=0;v = 0;}keynum = 0;startTime2=millis();}//будильник-------------------------------------if (mode == 0 && pwalr == 1 && alrhour == hour && alrminute == minute){// для зп-22if (sec < 1){tone(2, 3000);}if (sec >= 1){noTone(2);}alr = 1;}else{noTone(2);alr = 0;}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}alr=1;}else {digitalWrite(buzz,LOW);alr=0;}*///сигнал с 9 до 21-----------------------------if ( hour >= 9 && hour <= 21 && minute == 00 && second == 00 && pwbo == 1)// для зп-22if (sec < 1){tone(2, 3000);}if (sec >= 1){noTone(2);}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}*///---------------------------------------------if (currentTime >= (startTime + 500)){blinkflag = !blinkflag;startTime = currentTime;ReadDS3231();sec =(sec + 1);if (sec >= 2) sec = 0;}//вывод на индикаторы--------------------------------if ((mode==0)||(mode==1)||(mode==2)){digits[0] = hour/10;digits[1] = hour%10;digits[2] = minute/10;digits[3] = minute%10;digits[4] = second / 10;digits[5] = second % 10;}if (mode==3){digits[0] = 0;digits[1] = 1;digits[2] = 0;digits[3] = pwalr;digits[4] = second / 10;digits[5] = second % 10;}if (mode==4){digits[0] = 0;digits[1] = 2;digits[2] = 0;digits[3] = pwbo;digits[4] = second / 10;digits[5] = second % 10;}if ((mode==5)||(mode==6)){digits[0] = alrhour/10;digits[1] = alrhour%10;digits[2] = alrminute/10;digits[3] = alrminute%10;digits[4] = second / 10;digits[5] = second % 10;}show(digits); // вывести цифры на дисплей//проверяем нажатые кнопки от0 до 1024 соответствует от 0 до 5 вольтif (!timeout) //если разрешено, считываем нажатую кнопку{ if (keyval > 400 && keyval < 500) keynum = 3;if (keyval > 900 && keyval < 950) keynum = 2;if (keyval > 1000) keynum = 1;}}void show(int a[])//вывод на индикаторы------------------{setNumber(a[0]);//выведем цифру a[] на индикаторif ((mode == 1) || (mode == 5) || (mode == 3) || (mode == 4) || (mode == 8) || (mode == 9)){digitalWrite(key1 , LOW);}else {digitalWrite(key1, HIGH);delay(2);digitalWrite(key1, LOW);//потушим индикаторdelay(1);}setNumber(a[1]);if ((mode == 1) || (mode == 5) || (mode == 9)){digitalWrite(key2 , LOW);}else {digitalWrite(key2, HIGH);delay(2);digitalWrite(key2, LOW);delay(1);}setNumber(a[2]);if ((mode == 3) || (mode == 4) || (mode == 6) || (mode == 2)){digitalWrite(key3 , LOW);}else {digitalWrite(key3, HIGH);delay(2);digitalWrite(key3, LOW);delay(1);}setNumber(a[3]);if ((mode == 6) || (mode == 2)){digitalWrite(key4 , LOW);}else {digitalWrite(key4, HIGH);delay(2);digitalWrite(key4, LOW);delay(1);}setNumber(a[4]);if ((mode == 3) || (mode == 4) || (mode == 5) || (mode == 6) || (mode == 9)){digitalWrite(key5 , LOW);}else {digitalWrite(key5, HIGH);delay(2);digitalWrite(key5, LOW);delay(1);}setNumber(a[5]);if ((mode == 3) || (mode == 4) || (mode == 5) || (mode == 6) || (mode == 9)){digitalWrite(key6, LOW);}else {digitalWrite(key6, HIGH);delay(2);digitalWrite(key6, LOW);delay(1);}}void setNumber(int num)// передача цифры на катоды{switch (num){case 0:digitalWrite (out1,LOW);digitalWrite (out2,LOW);digitalWrite (out4,LOW);digitalWrite (out8,LOW);break;case 1:digitalWrite (out1,LOW);digitalWrite (out2,HIGH);digitalWrite (out4,HIGH);digitalWrite (out8,LOW);break;case 2:digitalWrite (out1,LOW);digitalWrite (out2,HIGH);digitalWrite (out4,LOW);digitalWrite (out8,LOW);break;case 3:digitalWrite (out1,HIGH);digitalWrite (out2,HIGH);digitalWrite (out4,LOW);digitalWrite (out8,LOW);break;case 4:digitalWrite (out1,LOW);digitalWrite (out2,LOW);digitalWrite (out4,HIGH);digitalWrite (out8,LOW);break;case 5:digitalWrite (out1,HIGH);digitalWrite (out2,LOW);digitalWrite (out4,HIGH);digitalWrite (out8,LOW);break;case 6:digitalWrite (out1,HIGH);digitalWrite (out2,LOW);digitalWrite (out4,LOW);digitalWrite (out8,LOW);break;case 7:digitalWrite (out1,HIGH);digitalWrite (out2,HIGH);digitalWrite (out4,HIGH);digitalWrite (out8,LOW);break;case 8:digitalWrite (out1,LOW);digitalWrite (out2,LOW);digitalWrite (out4,LOW);digitalWrite (out8,HIGH);break;case 9:digitalWrite (out1,HIGH);digitalWrite (out2,LOW);digitalWrite (out4,LOW);digitalWrite (out8,HIGH);break;}}Хочу чтобы при нажатии первой кнопки показывало температуру и влажность с датчика DHT22. И раз в минуту или две оно само показывало. Кто-то может помочь как сделать? А при нажатии кнопки 3 показывало дату
-
Ответ изменён 3 года, 4 месяца назад пользователем
graf_8.
25.01.2019 в 10:08 #994HAWK
УчастникДобрый день! Собрал часы по вашей схеме все хорошо
но через некоторое время заметил что часы спешат на минуту за двое суток
Модуль DS3231 проверил на других часах работают точно проверено на нескольких модулях
Подскажите где смотреть25.01.2019 в 10:16 #995Anathema
УчастникHAWK, если используете батарейку CR2032, а не литий-ионовую LIR2032, удалите с модуля DS3231 стабилитрон (оранжевая стекляшка, рядом с кроваткой батарейки. Он нужен для цепи подпитки аккумулятора, но если у вас CR2032, такая подпитка для нее губительна, и часы начинают врать
-
Ответ изменён 3 года, 4 месяца назад пользователем
Anathema.
28.01.2019 в 10:43 #1001HAWK
Участникдобрый день Anathema убрал цепочку подзарядки стали спешить меньше .оказалось я сам не внимательно проверил модули DS3231 засинхронизировал
пять модуле оказалось только два работают точно, остальные спешат брал на митино у разны продавцов.
спасибо за совет по батарейки CR203229.01.2019 в 20:51 #1007razlogoff
УчастникДоброго всем дня!!! Проект просто поразил своей повторимостью и значительным снижением деталей ( оптопары и генератор просто космос) но в развитие никто не думал прикрутить node mcu, и я не совсем глубоко понимаю проблемы с которыми столкнусь пока лишь что дешифратор прийдется менять на транзисторы, и ваять вебинтерфейс)))
30.01.2019 в 10:12 #1008graf_8
УчастникПрикрутил календарь, температуру и влажность при нажатии кнопок 1 и 3. Показ даты и температуры еще само показывает несколько раз в час.
В коде ОЧЕНЬ много костылей и правок под мою схему, так что сильно не пинайте.
П.С. код писать не умею. Умею Ctrl C Ctrl VArduino123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702#include <DS3231.h>#include <Wire.h>#include <EEPROM.h>#include "DHT.h"#define DHTPIN 3 // what digital pin we're connected to// Uncomment whatever type you're using!//#define DHTTYPE DHT11 // DHT 11#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321// точка секунд берется с 3 вывода DS3231// выводы для дешифратораint out1 = A3;int out2 = A0;int out4 = A1;int out8 = A2;// выводы для транзисторных ключейint key1 = 9;int key2 = 8;int key3 = 7;int key4 = 6;int key5 = 5;int key6 = 4;int keyb = A7;// пин для клавиатурыint buzz = 2;//пин пищалкиint sec;int x = 0; //счетчик бояint v = 0; // счетчик времени после отпускания кнопкиint alr; // срабатывание будильникаint alrhour;//часы будильникаint alrminute;//минуты будильникаint pwalr; // вкл выкл будильникаint pwbo; //почасовой сигнал вкл выклint keynum = 0; //номер нажатой кнопкиint mode = 0; //менюbool blinkflag = 0; // флаг для мигания цифр при установке времениbool timeout = false; // таймаут после нажатия кнопкиunsigned long startTime; //для мигания пиканья :)unsigned long startTime2; // для опроса нажатых кнопокDHT dht(DHTPIN, DHTTYPE);byte h = dht.readHumidity();byte t = dht.readTemperature();DS3231 Clock;// переменные для работы ds3231bool Century = false;bool h12;bool PM;int second, minute, hour, date, month, year, temperature;void setup() {Wire.begin();// старт I2Cdht.begin();Clock.enableOscillator(true, false, 0);//установка 1 с на 3 выводе DS3231pinMode(out1, OUTPUT);pinMode(out2, OUTPUT);pinMode(out4, OUTPUT);pinMode(out8, OUTPUT);pinMode(key1, OUTPUT);pinMode(key2, OUTPUT);pinMode(key3, OUTPUT);pinMode(key4, OUTPUT);pinMode(key5, OUTPUT);pinMode(key6, OUTPUT);pinMode(buzz, OUTPUT);startTime = millis();startTime2 = startTime;sec = 0;alrhour = EEPROM.read(1); //считываем ячейки памятиalrminute = EEPROM.read(2);pwalr = EEPROM.read(3);pwbo = EEPROM.read(4);ReadDS3231();// считываем текущее вермя}void ReadDS3231(){ minute = Clock.getMinute();hour = Clock.getHour(h12, PM);second = Clock.getSecond();date = Clock.getDate();month = Clock.getMonth(Century);year = Clock.getYear();}//перебор всех цифр----------void loop() {if (second == 59) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (250);}show();if (minute == 0 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (100);mode = 7;v = 30;}show();if (minute == 15 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (250);mode = 7;v = 30;}show();if (minute == 30 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (250);mode = 7;v = 30;}show();if (minute == 45 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (250);mode = 7;v = 30;}show();if (minute == 9 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (100);mode = 8;v = 40;}show();if (minute == 38 && second == 59 ) //раз в час// (hour==23 && minute==59 )//раз в день в течении минуты//( second==59)//раз в минуту{scroll (100);mode = 8;v = 40;}show();}void scroll(int pause) {for (int i = 0; i < 9; i++) {int a[] = {i, i, i, i, i, i};show(a);delay(2);show(a);}}//меню--------------------------------------------void show() {int digits[3]; // массив для текущего значения времени на четыре цифрыint keyval = analogRead(keyb); // считываем значение с клавиатурыunsigned long currentTime = millis(); //текущее время с момента запускаif (currentTime >= (startTime2 + 200)){ timeout = false;//проверим нажатие кнопок----------------------------------------if (alr == 1) {if ((keynum == 1 ) || (keynum == 2 ) || (keynum == 3)) {pwalr = 0;}}else {if (keynum == 2) // кнопка переключения между меню{ timeout = true; // запрещаем считывать нажатия кнопокif (mode == 0) mode = 1;//настр минутelse if (mode == 1) mode = 2;//настр часовelse if (mode == 2) mode = 4;//вкл выкл будильникelse if (mode == 4) mode = 3;//вкл выкл бойelse if (mode == 3) mode = 5;//настр мин будelse if (mode == 5) mode = 6;//настр час будelse if (mode == 6) mode = 10;else if (mode == 10) mode = 11;else if (mode == 11) mode = 12;else if (mode == 12) mode = 0;v = 0;}if (keynum == 3) // кнопка увеличения количества{ blinkflag = true; // прекращаем мигать цифрамиstartTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 0) {mode = 7;v = 40;{for (int i = 0; i < 9; i++) {int a[] = {i, i, i, i, i, i};show(a);delay(2);show(a);}}}if (mode == 1) {minute++;if (minute > 59) {minute = 0;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2) {hour++;if (hour > 23) {hour = 0;}Clock.setHour(hour);v = 0;}if (mode == 3) {pwalr++;if (pwalr > 1) {pwalr = 0;}EEPROM.write(3, pwalr);v = 0;}if (mode == 4) {pwbo++;if (pwbo > 1) {pwbo = 0;}EEPROM.write(4, pwbo);v = 0;}if (mode == 5) {alrminute++;if (alrminute > 59) {alrminute = 0;}EEPROM.write(2, alrminute);v = 0;}if (mode == 6) {alrhour++;if (alrhour > 23) {alrhour = 0;}EEPROM.write(1, alrhour);v = 0;}if (mode == 10) {date++;if (date > 31) {date = 1;}Clock.setDate(date);v = 0;}if (mode == 11) {month++;if (month > 12) {month = 1;}Clock.setMonth(month);v = 0;}if (mode == 12) {year++;if (year > 99) {year = 0;}Clock.setYear(year);v = 0;}}if (keynum == 1 )// кнопка уменьшения количества{ blinkflag = true; // прекращаем мигать цифрамиstartTime = millis();timeout = true; // запрещаем считывать нажатия кнопокif (mode == 0) {mode = 8;v = 40;{for (int i = 0; i < 9; i++) {int a[] = {i, i, i, i, i, i};show(a);delay(2);show(a);}}}if (mode == 1) {minute--;if (minute < 0) {minute = 59;}Clock.setMinute(minute);Clock.setSecond(0);v = 0;}if (mode == 2) {hour--;if (hour < 0) {hour = 23;}Clock.setHour(hour);v = 0;}if (mode == 3) {pwalr--;if (pwalr < 0) {pwalr = 1;}EEPROM.write(3, pwalr);v = 0;}if (mode == 4) {pwbo--;if (pwbo < 0) {pwbo = 1;}EEPROM.write(4, pwbo);v = 0;}if (mode == 5) {alrminute--;if (alrminute < 0) {alrminute = 59;}EEPROM.write(2, alrminute);v = 0;}if (mode == 6) {alrhour--;if (alrhour < 0) {alrhour = 23;}EEPROM.write(1, alrhour);v = 0;}if (mode == 10) {date--;if (date < 1) {date = 31;}Clock.setDate(date);v = 0;}if (mode == 11) {month--;if (month < 1) {month = 12;}Clock.setMonth(month);v = 0;}if (mode == 12) {year--;if (year < 0) {year = 99;}Clock.setYear(year);v = 0;}}}v++;//сброс в 0 меню после нажатие кнопкиif (v >= 60) {mode = 0;v = 0;}keynum = 0;startTime2 = millis();}//будильник-------------------------------------if (mode == 0 && pwalr == 1 && alrhour == hour && alrminute == minute){// для зп-22if (sec < 1){tone(2, 3000);}if (sec >= 1){noTone(2);}alr = 1;}else{noTone(2);alr = 0;}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}alr=1;}else {digitalWrite(buzz,LOW);alr=0;}*///сигнал с 9 до 21-----------------------------if ( hour >= 9 && hour <= 21 && minute == 00 && second == 00 && pwbo == 1)// для зп-22if (sec < 1){tone(2, 3000);}if (sec >= 1){noTone(2);}//для активного бузера через транзистор/*if(sec<1){digitalWrite(buzz,HIGH);Serial.println(blinkflag);}if(sec>=1){digitalWrite(buzz,LOW);}*///---------------------------------------------if (currentTime >= (startTime + 500)){blinkflag = !blinkflag;startTime = currentTime;ReadDS3231();sec = (sec + 1);if (sec >= 2) sec = 0;}//вывод на индикаторы--------------------------------if ((mode == 0) || (mode == 1) || (mode == 2)) {digits[0] = hour / 10;digits[1] = hour % 10;digits[2] = minute / 10;digits[3] = minute % 10;digits[4] = second / 10;digits[5] = second % 10;}if (mode == 3){digits[0] = 0;digits[1] = 2;digits[2] = 0;digits[3] = pwalr;digits[4] = second / 10;digits[5] = second % 10;}if (mode == 4){ digits[0] = 0;digits[1] = 1;digits[2] = 0;digits[3] = pwbo;digits[4] = second / 10;digits[5] = second % 10;}if ((mode == 5) || (mode == 6)) {digits[0] = alrhour / 10;digits[1] = alrhour % 10;digits[2] = alrminute / 10;digits[3] = alrminute % 10;digits[4] = second / 10;digits[5] = second % 10;}if (mode == 7) {byte h = dht.readHumidity();byte t = dht.readTemperature();digits[0] = t / 10;digits[1] = t % 10;digits[2] = 0;digits[3] = 0;digits[4] = h / 10;digits[5] = h % 10;}if (mode == 8) {digits[0] = date / 10;digits[1] = date % 10;digits[2] = month / 10;digits[3] = month % 10;digits[4] = year / 10;digits[5] = year % 10;}if (mode == 10) {digits[0] = date / 10;digits[1] = date % 10;digits[2] = 0;digits[3] = 0;digits[4] = 0;digits[5] = 0;}if (mode == 11) {digits[0] = 0;digits[1] = 0;digits[2] = month / 10;digits[3] = month % 10;digits[4] = 0;digits[5] = 0;}if (mode == 12) {digits[0] = 0;digits[1] = 0;digits[2] = 0;digits[3] = 0;digits[4] = year / 10;digits[5] = year % 10;}show(digits); // вывести цифры на дисплей//проверяем нажатые кнопки от0 до 1024 соответствует от 0 до 5 вольтif (!timeout) //если разрешено, считываем нажатую кнопку{ if (keyval > 400 && keyval < 500) keynum = 3;if (keyval > 900 && keyval < 950) keynum = 2;if (keyval > 1000) keynum = 1;}}void show(int a[])//вывод на индикаторы------------------{setNumber(a[0]);//выведем цифру a[] на индикаторif ((mode == 1) || (mode == 5) || (mode == 3) || (mode == 4) || (mode == 9)|| (mode == 11)|| (mode == 12) ){digitalWrite(key1 , LOW);}else {digitalWrite(key1, HIGH);delay(2);digitalWrite(key1, LOW);//потушим индикаторdelay(1);}setNumber(a[1]);if ((mode == 1) || (mode == 5) || (mode == 9)|| (mode == 11)|| (mode == 12) ){digitalWrite(key2 , LOW);}else {digitalWrite(key2, HIGH);delay(2);digitalWrite(key2, LOW);delay(1);}setNumber(a[2]);if ((mode == 3) || (mode == 4) || (mode == 6) || (mode == 2) || (mode == 7)|| (mode == 10)|| (mode == 12)){digitalWrite(key3 , LOW);}else {digitalWrite(key3, HIGH);delay(2);digitalWrite(key3, LOW);delay(1);}setNumber(a[3]);if ((mode == 6) || (mode == 2) || (mode == 7)|| (mode == 10)|| (mode == 12)){digitalWrite(key4 , LOW);}else {digitalWrite(key4, HIGH);delay(2);digitalWrite(key4, LOW);delay(1);}setNumber(a[4]);if ((mode == 3) || (mode == 4) || (mode == 5) || (mode == 6) || (mode == 9)|| (mode == 10)|| (mode == 11)){digitalWrite(key5 , LOW);}else {digitalWrite(key5, HIGH);delay(2);digitalWrite(key5, LOW);delay(1);}setNumber(a[5]);if ((mode == 3) || (mode == 4) || (mode == 5) || (mode == 6) || (mode == 9)|| (mode == 10)|| (mode == 11)){digitalWrite(key6, LOW);}else {digitalWrite(key6, HIGH);delay(2);digitalWrite(key6, LOW);delay(1);}}void setNumber(int num)// передача цифры на катоды{switch (num){case 0:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out4, LOW);digitalWrite (out8, LOW);break;case 1:digitalWrite (out1, LOW);digitalWrite (out2, HIGH);digitalWrite (out4, HIGH);digitalWrite (out8, LOW);break;case 2:digitalWrite (out1, LOW);digitalWrite (out2, HIGH);digitalWrite (out4, LOW);digitalWrite (out8, LOW);break;case 3:digitalWrite (out1, HIGH);digitalWrite (out2, HIGH);digitalWrite (out4, LOW);digitalWrite (out8, LOW);break;case 4:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out4, HIGH);digitalWrite (out8, LOW);break;case 5:digitalWrite (out1, HIGH);digitalWrite (out2, LOW);digitalWrite (out4, HIGH);digitalWrite (out8, LOW);break;case 6:digitalWrite (out1, HIGH);digitalWrite (out2, LOW);digitalWrite (out4, LOW);digitalWrite (out8, LOW);break;case 7:digitalWrite (out1, HIGH);digitalWrite (out2, HIGH);digitalWrite (out4, HIGH);digitalWrite (out8, LOW);break;case 8:digitalWrite (out1, LOW);digitalWrite (out2, LOW);digitalWrite (out4, LOW);digitalWrite (out8, HIGH);break;case 9:digitalWrite (out1, HIGH);digitalWrite (out2, LOW);digitalWrite (out4, LOW);digitalWrite (out8, HIGH);break;}}06.02.2019 в 06:33 #1009enemy
Участникавтор молодец, очень простая схема вышла
но, на мой взгляд использование в качестве разделителя светодиода не совсем сочетается с конструкцией в целом
еще бы заменить кнопки на энкодер и было бы совсем замечательно )06.02.2019 в 07:31 #1010Anathema
Участникenemy, я, вместо светодиода секунд поставил оптопару и 2 неонки через резисторы. Но здесь секунды бутафорские, ничего общего с реальными секундами ds3231 не имеют, это просто ардуинка раз в ~секунду зажигает светодиод. Энкодер зачем? Он занимает много места, а настраивать там постоянно ничего не надо, раз настроил и забыл, часы очень точные
06.02.2019 в 08:49 #1011enemy
Участникнеонки и хочется видеть на плате
придется ее немного изменить, чтоб потом не ляпать костыли, а хотелось без заморочек, на халяву ))
энкодер просто личная хотелка, дырок в корпусе на 2 меньше сверлить ))) -
Ответ изменён 3 года, 4 месяца назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.