RTC1307 добавить настройку кнопками
- Войдите на сайт для отправки комментариев
Пнд, 30/03/2015 - 01:24
Всем привет. Пытаюсь реализовать настроку часов кнопками (для примера пока использую только 1 кнопку).
Вот код. Как правильно реализовать задуманное??? Считал время во временные переменные, по нажатию кнопки сменил часы - а как теперь записать???
#include <Wire.h> #include "DS1307.h" //Переменные для сохранения данных часов int hr_00 =0; //часы int mn_00 =0; //минуты int sc_00 =0; //секунды const int buttonPin = 2; // Кнопка настройки времени int buttonState = 0; DS1307 clock;//define a object of DS1307 class void setup() { Serial.begin(9600); clock.begin(); //clock.fillByYMD(2013,1,19);//Jan 19,2013 //clock.fillByHMS(15,28,30);//15:28 30" //clock.fillDayOfWeek(SAT);//Saturday //clock.setTime();//write time to the RTC chip pinMode(buttonPin, INPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { hr_00=clock.hour+1; } printTime(); } void read_rtc1307() //чтение времени в переменные { clock.getTime(); hr_00=clock.hour; mn_00=clock.minute; sc_00=clock.second; } void set_time() { } /*Function: Display time on the serial monitor*/ void printTime() { read_rtc1307(); clock.getTime(); Serial.print(clock.hour, DEC); Serial.print(":"); Serial.print(clock.minute, DEC); Serial.print(":"); Serial.print(clock.second, DEC); Serial.println(" "); }
Включить в set_time() строки 19 и 21, в 19 числа заменить на переменные. Сейчас по вашей логике вы будете пытаться устанавливать время при каждом проходе loop().
В loop() предусмотреть условие, по которому устанавливать время. При true, переходим в set_time(), считываем переменные времени, ждем нажатия кнопки. Если нажали - переменная часов+1, далее строки 19 и 21, прошел период ожидания - возврат. Возникает вопрос - часы+1 и сразу запись или надо как то иначе? Если не сделаете возврат по периоду - можете вечно ожидать нажатия кнопки.
Ваш вариант - в loop() поймали кнопку (предусмотреть антидребезг и блокировку), перешли в set_time(), считали переменные времени, прибавили к часам единицу, занесли время как в строках 19 и 21, возврат. Если не предусмотрите блокировку от повторного нажатия, получите значения превышающие час+1. МК достаточно шустрый.
Спасибо, попробую разобраться.
69 строка, хмм... Зачем это так. За что! :)
Из строк 53-62 оставить только 57. 66 думаю тоже не нужна. По 69 kisoft уже сказал, в loop() вернется автоматически. И нужно предусмотреть задержку (можно гнусный delay(), но не кошерно) иначе пока держите кнопку выполнится несколько раз.
Да, и время считать забыли перед изменением.