пятница, 16 мая 2014 г.

Arduino. DS3231 и I2C/SPI LCD1602 в одном флаконе

Сегодня мне удалось собрать первый функциональный прибор, который может работать без компьютера. Ранее, я уже писал о подключении высокоточных часов и I2C LCD 1602 по шине I2C. Следующей стояла задача совместного использования этих устройств.

В интернете нашел несколько статей по использованию шины I2C. Есть более развернутые статьи, есть менее. Интересующимся рекомендую вот эту статью. Или вот эту. В статье рекомендуют привязывать разъемы SDA и SCL к +5 вольтам. Номинал резисторов от 1кОм до 10 кОм. Я поставил 1кОм (других не нашлось).

Схема сборкиФотография

Скетч просто собрал из двух, использовавшихся ранее для часов и экрана

#include Wire.h
#include DS3231.h
#include LiquidCrystal.h
/**
The circuit:
* 5V to Arduino 5V pin
* GND to Arduino GND pin
* SDA (data) to Analog #4
* SCL (clock) to Analog #5
**/

// Connect via i2c, default address #0 (A0-A2 not jumpered)
LiquidCrystal lcd(0);
DS3231 Clock;
bool h12=false;//True is 12-h, false is 24-hour.;
bool PM;
bool Century=false;

void setup() {
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
lcd.clear();
lcd.setBacklight(LOW);
Wire.begin();
}

void loop() {
int second,minute,hour,date,month,year,temperature;

year=Clock.getYear();
month=Clock.getMonth(Century);
date=Clock.getDate();
hour=Clock.getHour(h12,PM);
minute=Clock.getMinute();
second=Clock.getSecond();
temperature=Clock.getTemperature();

lcd.print("20");
lcd.print(year,DEC);
lcd.print('-');
if (month<10) lcd.print('0');
lcd.print(month,DEC);
lcd.print('-');
if (date<10) lcd.print('0');
lcd.print(date,DEC);

// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
if (hour<10) lcd.print('0');
lcd.print(hour,DEC);
lcd.print(':');
if (minute<10) lcd.print('0');
lcd.print(minute,DEC);
lcd.print(':');
if (second<10) lcd.print('0');
lcd.print(second,DEC);
lcd.print(' ');
lcd.print("Temp:");
lcd.print(temperature);
delay(500);
lcd.setCursor(0,0);
}


Вот такие вот часы у меня получились. ;о)


5 комментариев:

  1. библиотеку
    #include LiquidCrystal.h
    заменить на
    #include LiquidCrystal_I2С.h
    и так далее по тексту

    ОтветитьУдалить
    Ответы
    1. не работает......скетч LiquidCrystal lcd(0); при проверке окрашивает в желтый и дальше не проверяет....менял библиотеки... нет положительного результата..

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. для чего нужны резисторы к sda и scl ?они ведь и так уже присутствуют в модуле часов. вот схема http://radiolaba.ru/wp-content/uploads/2016/10/DS3231-module-schema.jpg

    ОтветитьУдалить