Начинаем работать с часами реального времени
С одной стороны вроде как все и не так сложно. Но с другой
есть один момент (такая маленькая хитрость, к которой мы еще вернемся) который
нужно будет учесть при установки точной
даты и времени. Это придеться сделать пока в ручную, после чего сразу же
закомментировать пару строчек в скетче….
Начнем пожалуй с подключения ЧРВ (часы реального времени) к
ардуино. Это как раз несложно. У меня оказался модуль DS1302 и вот как нужно будет подключить
выводы: GND-GND, VCC-+5V, RST-10, CLK-13, DAT-12. При этом указанные пины
(10,12,13) в скетче можно всегда заменить на другие. Итак, модуль ЧРВ мы подключили…
Теперь шаг второй – это скетч. Скетч простой, и первым делом
нужно будет в нем вручную изменить (поставить или снять //) в зависимости от
модуля чипа. Выбирайте тот модуль который у вас и закомментируйте строчку с
ненужным модулем, и раскоментируйте с вашим. Для информации: я использую модуль
DS1302.
А вот теперь нам нужно установить точное время. Для
начала обратим внимание (это важно!) на следующие две строки в программном
коде:
time.settime(35,10,20);// 35 сек, 10 мин, 20 час, дату оставить без
изменений
time.settime(-1,-1,-1,31,12,15);
// 31, декабря, 2015 года, время и день недели оставить без изменений}
Вот здесь и нужно сначала установить точную дату и время.
Причем сделать это нужно заранее перед самой компиляцией. Так же обратите что
компиляция и запись скетча в МК тоже займет некоторое время что тоже желательно
учесть. Скажем у меня это занимает порядка 20 секунд. Все что мне нужно сделать
: синхронизировать время на компьютере, установить время и за 20 секунд начать компиляцию. После компиляции
обязательно (не забудьте это важно!) закомментируйте эти две строчки. Вот и
все. Можете пользоваться. Да и еще чуть не забыл: библиотеку RTC.h можно загрузить с Яндекс диска.
#include
<RTC.h>
RTC time;
void
setup() {
delay(300);
Serial.begin(9600);
// инициализация
модуля RTC
//
time.begin(RTC_DS3231);// на базе чипа DS3231модуль подключается к аппаратным
выводам I2C
// time.begin(RTC_DS1307);// на базе чипа DS1307модуль
подключается к аппаратным выводам I2C
time.begin(RTC_DS1302,10,13,12);
// на базе чипа DS1302, вывод RST, вывод CLK, вывод DATдоступны любые
выводы
// запись даты и
времени
// time.settime(0,51,21,27,10,15,2); // 0
сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
time.settime(35,10,20);// 35 сек, 10 мин, 20 час, дату оставить без
изменений
time.settime(-1,-1,-1,31,12,15);
// 31, декабря, 2015 года, время и день недели оставить без изменений
}
void loop(){
if(millis()%1000==0){
// если прошла 1 секунда
Serial.println(time.gettime("d-m-Y,
H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1
мс, чтоб не выводить время несколько раз за 1мс
}
}
Здравствуйте, Алексей. Это хорошо что вы поставили часы, потому что теперь на них можно теперь сделать различные задержки для всего чего угодно: обновление экрана, опрос кнопок (например через 10мс выполнять опрос кнопок). Вообще лучше сделать таймерную службу: то есть в главном цикле вы не выполняете никаких действий, только расставляете условия через сколько времени например обновить экран, считать показания с датчика, опросить клавиатуру. Все эти действия выполняете функциями, которые будут вызываться из void loop() по условиям времени. Допустим, прошло 10мс - опросили кнопку, прошло еще 10мс (в сумме 20мс), опросили кнопку и опросили датчик итп...прошло 200мс - опросили кнопку, датчик и обновили показания на экране.
ОтветитьУдалить