LCD+DS1307+DS18B20
- Войдите на сайт для отправки комментариев
Если кому интересно - привожу пример часов с цифровым датчиком температуры.
Arduino Mega - хотя любая пойдет.
MP1095 - аналог DS1307 (от MasterKit).
DS18B20 - цифровой датчик температуры.
пример скеча:
// DS1302: SDA pin -> Arduino Digital 4
// SCL pin -> Arduino Digital 5
// LCD: DB7 -> Arduino Digital 6
// DB6 -> Arduino Digital 7
// DB5 -> Arduino Digital 8
// DB4 -> Arduino Digital 9
// E -> Arduino Digital 10
// RS -> Arduino Digital 11
// DS18B20: -> Arduino Digital 12
#include <LiquidCrystal.h>
#include <DS1307.h>
#include <OneWire.h>// Инициализация библиотеки шины OneWire.
#include <DallasTemperature.h>// Инициализация библиотеки термодатчиков.
#define ONE_WIRE_BUS 12// Подключение цифрового вывода датчика к 10-му пину Ардуино.
OneWire oneWire(ONE_WIRE_BUS);// Запуск интерфейса OneWire для подключения OneWire устройств.
DallasTemperature sensors(&oneWire);// Указание, что устройством oneWire является термодатчик от Dallas Temperature.
// Init the DS1307
DS1307 rtc(4, 5);
// Init the LCD
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
void setup()
{
// Set the clock to run-mode
// rtc.halt(false);
// Setup LCD to 16x2 characters
lcd.begin(16, 2);
sensors.begin(); // Запуск сенсора.
// The following lines can be commented out to use the values already stored in the DS1307
// rtc.setDOW(FRIDAY); // Set Day-of-Week to SUNDAY
// rtc.setTime(20, 12, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate(7, 11, 2014); // Set the date to October 3th, 2010
// Set SQW/Out rate to 1Hz, and enable SQW
rtc.setSQWRate(SQW_RATE_1);
rtc.enableSQW(true);
}
void loop()
{
sensors.requestTemperatures(); // Команда опроса температуры.
// Display time centered on the upper line
lcd.setCursor(0, 0);
lcd.print(rtc.getTimeStr());
lcd.setCursor(10, 0);
lcd.print(sensors.getTempCByIndex(0));
// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 1);
lcd.print(rtc.getDOWStr(FORMAT_SHORT));
// Display date in the lower right corner
lcd.setCursor(6, 1);
lcd.print(rtc.getDateStr());
// Wait one second before repeating :)
delay (1000);
}
Это хорошо. Вы научились использовать библиотеки, но порой они работают не совсем так как хотелось бы.
А теперь доработайте библиотеку чтобы передавая ей строку "DD.MM.YYYY hh:mm" вы на выходе получали "08.11.2014 22:05" и выводили это на дисплей командой print, чтобы можно было получить только дату задав формат "YYYY-MM-DD.txt"(для имени файла) или только время в формате "hh:mm:ss" и все это выполнялось одной функцией библиотеки с любым форматом. Можно для формата использовать формат даты в PHP или другом популярном языке программирования.
Я уже написал такой код - и его применение очень широкое.
Самое смешное - в этих "часах" даже время не откорректировать...