LCD+DS1307+DS18B20

lgk1971
Offline
Зарегистрирован: 13.06.2014

Если кому интересно - привожу пример часов с цифровым датчиком температуры.

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);
 
}

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Это хорошо. Вы научились использовать библиотеки, но порой они работают не совсем так как хотелось бы.

А теперь доработайте библиотеку чтобы передавая ей строку "DD.MM.YYYY hh:mm" вы на выходе получали "08.11.2014 22:05" и выводили это на дисплей командой print, чтобы можно было получить только дату задав формат "YYYY-MM-DD.txt"(для имени файла) или только время в формате "hh:mm:ss" и все это выполнялось одной функцией библиотеки с любым форматом. Можно для формата использовать формат даты в PHP или другом популярном языке программирования.

Я уже написал такой код - и его применение очень широкое.

vdk
Offline
Зарегистрирован: 14.04.2013

Самое смешное - в этих "часах" даже время не откорректировать...