подскажите по ds1307
- Войдите на сайт для отправки комментариев
Ср, 05/10/2016 - 14:05
подскажите пожалуйста .
пытаюсь собрать простейщие часы с термометром и выводом на max7221\7219 , встал на установке времени через кнопки в ds1307 .
примеров много, но везде нагороженно так что начальных знаний не хватает для адаптации под мои нужды.
интересует код которым можно настроить часы и минуты остальное не нужно , без всяких эфектов и прибомбасов . тоесть нажал на первую кнопку добавилось значение часа , нажал вторую добавилось значение минут .
Вы ищите ссылку на готовый проект, или Вам подсказать примерный алгоритм действий, или хотите что бы за Вас все написали?
я хочу хотя бы кусок кода чтоб можно было понять как задавать значение через кнопку .
везде где находил подобную функцию наверчено много , не могу выдернуть нужное.
Вопрос не такой простой - зависит от того какую библиотеку Вы ипользуете, в нете много разных и каждая своей командой устанавлюет время. В той что я сейчас смотрю вот такая команда устанавлюет время "rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)" Для такой библиотеки Вам надо создать переменные к примеру int cas; int min; После на экране выставить значение для cas, min присвоив им эти значения. Потом по нажатии кнопки выполнить команду rtc.setTime(cas, min, 0); поменяв время. Это один из вариантов.
я хочу хотя бы кусок кода чтоб можно было понять как задавать значение через кнопку .
везде где находил подобную функцию наверчено много , не могу выдернуть нужное.
Примерный код, без учета вашей библиотеки. Состояние нажатой кнопки - LOW; без подавления дребизга контактов.
void setup() { . . . pinMode(BTN_HR, INPUT); // кнопка для увеличения значения часов pinMode(BTN_MN, INPUT); // кнопка для увеличения значения минут . . . } void loop() { . . . if (digitalRead(BTN_HR) == LOW || digitalRead(BTN_MN) == LOW) { int cur_h = получить текущей час; int cur_m = получить текущую минуту; if (digitalRead(BTN_HR) == LOW) { cur_h = (cur_h + 1) % 24; } else { cur_m = (cur_m + 1) % 60; } установить время(cur_h, cur_m); } . . . }на данный момент пока по той уйме информации которая есть в интернете пытаюсь разобраться что куда и как .
библиотеки в основном использую из проектов в которых нахожу подходящий код . сам писать не дорос ещё ...
пока тока собрал монстра и кусков кода с кучей лишнего , выводит время , настраивается кнопками через кучу мусора , выводит температуру с двух ds18b20 и все это на lcd 1602 . пока не совсем разобрался с вводом переменных для разбития показаний на числа для вывода на max7219 по разрядно ( хотя тут явно проще можно решить)
тоесть если я правильно понял выглядеть будет примерно так ?
void setup() { . . . pinMode(BTN_HR, INPUT); // кнопка для увеличения значения часов pinMode(BTN_MN, INPUT); // кнопка для увеличения значения минут . . . } void loop() { . . . if (digitalRead(BTN_HR) == LOW || digitalRead(BTN_MN) == LOW) { int cur_h = time.gettime("H"); int cur_m = time.gettime("m"); if (digitalRead(BTN_HR) == LOW) { cur_h = (cur_h + 1) % 24; } else { cur_m = (cur_m + 1) % 60; } time.settime(-1, cur_m, cur_h, -1, -1, -1, -1); } . . . }в библиотеке часов установка времени time.settime(0,51,21,27,10,15,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник. -1 параметр не изменяется получение времени time.gettime("d-m-Y, H:i:s, D"));//Arduino 02 – кнопка для увеличения значения часов //Arduino 03 – кнопка для увеличения значения минут //Arduino 04 – DS1307: SDA //Arduino 05 – DS1307: SCL #include <DS1307.h> DS1307 rtc(4, 5); // Init the DS1307 Time t; // **************************************** if ((PIND&(1<<2)) == 0 || (PIND&(1<<3)) == 0) { t = rtc.getTime(); byte cur_h = t.hour; byte cur_m = t.min; if ((PIND&(1<<2)) == 0) { cur_h = (cur_h + 1) % 24; } else { cur_m = (cur_m + 1) % 60; } rtc.halt(false); rtc.setTime(cur_h, cur_m, 0); }