RTC Часы
- Войдите на сайт для отправки комментариев
Втр, 19/12/2017 - 23:46
Привет всем.Я сделал обычный RTC часы,который показывает часы и дату.Все работает отлично.Сейчас хочю,чтобы,скажем в 21:00, на быходе arduino nano D10 было наприжение 5V,то есть когда будет 21:00 делать следушее digitalWrite(D10, HIGH);
Вот код...
#include <LiquidCrystal.h>
#include <DS1307.h>
DS1307 rtc(6, 7);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int led = 8;
void setup()
{
pinMode(led, OUTPUT);
rtc.halt(false);
lcd.begin(16, 2);
// The following lines can be commented out to use the values already stored in the DS1307
// rtc.setDOW(MON); // Set Day-of-Week to SUNDAY
// rtc.setTime(00, 45, 45); // Set the time to 12:00:00 (24hr format)
//rtc.setDate(19, 12, 2017); // Set the date to October 3th, 2010
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.setCursor(6, 0);
lcd.print(rtc.getTimeStr());
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.setCursor(6, 1);
lcd.print(rtc.getDateStr(FORMAT_LONG));
if (Вот тут нужна помощь)
{
digitalWrite(led, HIGH);
}
}
За ранее спасибо Всем.
Сейчас хочю,чтобы,скажем в 21:00, на быходе arduino nano D10 было наприжение 5V,то есть когда будет 21:00 делать следушее digitalWrite(D10, HIGH);
Ну, хоЧЕТЕ, и что? Я вот, может быть "Ларису Ивановну хочЮ", так что ж теперь? Хотите - делайте. У Вас какие-то проблемы?
Я думаю Вы на армянском точно ничего не напишите.Так что извините за мой русский.
А проблема в том,что не могу читать часы,то есть не могу написать функцию чтоб на 21:00 на выходе D10 у меня был HIGH
Посмотрите пример в библиотеке. похоже что так
Вот спасибо,вот молодец.
А проблема в том,что не могу читать часы,то есть не могу написать функцию чтоб на 21:00 на выходе D10 у меня был HIGH
Тут есть маленькая хитрость.
На словах мы говориим так: "нужно ровно в 21:00 переключить пин". Но (если нет аппаратной поддержки такой команды) в точности запрограммировать это невозможно, т.к. контроллер работает с ограниченной скоростью и:
- сначала часы переключатся в 21:00,
- потом контроллер считает их показания,
- потом ему нужно время на сравнение и принятие решения,
- а потом еще время на переключение пина.
Т.е. на самом деле переключение произойдет не в 21:00, а немного позже. Но это действительно очено "немного", так что, как правило, переживать по этому поводу не стоит.
Но есть еще один момент - Вам ведь нужно один раз переключать из LOW в HIGH, а не осуществлять переключение несколько тысяч раз в секунду (а у конотрллера хватит скорости, чтобы сделать именно так). Поэтому Вам нужно завести переменную, которая будет соответствовать состоянию пина. При переключении пина одновременно изменить значение переменной. И потом, когда часы по прежнему будут показывать подходящее для переключения время, проверить переменную - если она уже в новом состоянии, второй (третий...сотый) раз переключать пин уже не нужно - он и так находится в нужном состоянии.
Кстати, код из потса №4 делает именно так, как я не рекомендую - по достижении заданного времени будет долюбить пин без конца.
Для этого лучше взять модуль RTC на чипе DS3231, у которого есть два аппаратных будильника. По цене - не сильно дороже, зато по точности - значительно лучше.