Arduino - усовершенствованные часы.
- Войдите на сайт для отправки комментариев
Пт, 26/04/2013 - 19:49
Добрый день!
Сделал логгер на UNO+DHT22+DS1307+LCD16x2. (Планирую добавить еще Ethernet shild с micro SD) для хранения и передачи данных.
Сейчас часы показывают время с 1-м числом вот так 9:5:3, а хотелось бы 09:05:03. Ну и заменить секунды миганием ":" . А так же дату в формате 12.04.13, а сейчас кажет так: 12.4.2013. Что то эта задача (на первый взгляд простая) поставила меня в тупик. Может кто разжует? Спасибо!
Кстати Скетч выложу, вдруг кому пригодиться:
#include <LiquidCrystal.h> #include "DHT.h" #include "Arduino.h" #include <Wire.h> #include <DS1307.h> #define DHTPIN 9 LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { lcd.begin(16, 2); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); lcd.setCursor(0, 0); lcd.print("T="); lcd.print(t); lcd.print ("C"); lcd.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true lcd.print(":"); lcd.print(RTC.get(DS1307_MIN,false));//read minutes without update (false) lcd.print(":"); lcd.print(RTC.get(DS1307_SEC,false)); lcd.setCursor(0, 1); lcd.print("H="); lcd.print(h); lcd.print("% "); lcd.print(RTC.get(DS1307_DATE,false));//read date lcd.print("/"); lcd.print(RTC.get(DS1307_MTH,false));//read month }
Мне тоже лень искать примерны и обсуждения по форуму, но как-то так.
if (Data < 10) {
print "0" Data;
} else {
print Data;
}
Мне тоже лень искать примерны и обсуждения по форуму, но как-то так.
if (Data < 10) {
print "0" Data;
} else {
print Data;
}
спасибо!
Мне тоже лень искать примерны и обсуждения по форуму, но как-то так.
if (Data < 10) {
print "0" Data;
} else {
print Data;
}
спасибо!
А по миганию : вместо секунд можете направить на путь истинный?
А по миганию : вместо секунд можете направить на путь истинный?
Выводить двоеточие через раз, например, переприсваивая переменной символ двоеточия и пробела :)
Последний глупый вопрос на сегодня, как округлить число с сотых до десятых для вывода на экран?
lcd.print(t, 1);
В каждом цикле loop() мерить температуру (да и выводить на экран) не рационально с точки зрения расходывания процесорного времени. Конечно это не принципиально если задача ограниченная - только мерить и только вывести.
Но если будетет добавлять функционал или количество датчиков, проблема может быть уже щественной.
В этом смысле не желательно в каждом цикле loop() использовать функции с dalay(). Более красивое решение - измерять не в каждом цикле, а через определенное время, скажем раз в 5 или 10 секунд, тоже самое с выводом.
Учту, думаю еще релюшку докинуть, пару кнопок и Ethernet shild.
Новая проблема. При отключении основного питания часы DS1307 начинают сильно отставать. Батарейка новая. М.б. не заряжена? Она зарежается при включении устройства к центральному питанию? Или ее надо отдельно заряжать?
Сейчас скетч выглядит уже так:
Новая проблема. При отключении основного питания часы DS1307 начинают сильно отставать. Батарейка новая. М.б. не заряжена? Она зарежается при включении устройства к центральному питанию? Или ее надо отдельно заряжать?
Вы решили по всем граблям пройти самостоятельно? :)
http://arduino.ru/forum/programmirovanie/chasy-ds1307-ne-idut-i-ne-ustan...
http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vre...
Литиевые батарейки CR-2032 - одноразовые, их заряжать не надо...
http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit
Так как те кто решил проблему в теме по ссылке отписались и здесь, выложу схему своего модуля сюда.
http://photo.reborn.ru/?sectionid=602&a=watch_photo&pic=eb4c59c4b9652b9aeed53e61b9919844-00036609&location=3 ( не смог выложить на данный форум).
Что где нужно обрезать чтоб часы шли и без питания на UNO? Батарейку уже менял. Как только вытаскиваю питание, часы встают, питание подаю, идут с того момента как я отключил контроллер от сети.
А ну и зачем нужен DS еще разжуйте плз.
Что где нужно обрезать чтоб часы шли и без питания на UNO? Батарейку уже менял. Как только вытаскиваю питание, часы встают, питание подаю, идут с того момента как я отключил контроллер от сети.
Меняйте еще, ничего резать не надо - у Вас уже R7 нету. У меня такая же плата, сменил пару батареек, пока попалась рабочая. Но у меня просто было куплено два десятка CR2032 пару лет назад, поэтому не все выжили...
А ну и зачем нужен DS еще разжуйте плз.
http://arduino.ru/forum/apparatnye-voprosy/speshat-chasy-ds1307
1-wire с цифровым термометром DS18B20.
А еще вот тут, в нижней части схемы, показана резисторная "подтяжка" i2c к линии +5В. Возможно, тоже пригодится...
http://arduino.ru/sites/default/files/u4613/1.jpg