Непопулярный дисплей LCD Nokia 1202
Прочитав мимоходом в сети, что дисплей LCD Nokia 1202 более современный аналог Nokia 5110, посмотрев на цену(но не просмотрев всей информации), тут же быстренько заказал из Поднебесной, и на полтора месяца перешел в режим ожидания.
Итак, модель платы HX1230, дисплей Nokia 1202. Напряжение питания 3.3 вольт. Правда поддавал ненадолго 5 вольт – не сгорел, но экран стал сильно контрастным. Буквы вышли в негатив. Разрешение: 96x68, для многих подделок вещь просто незаменимая!
Распиновка модуля:
LcdRST _ pin 8
Lcd CE _ pin 7
Lcd N/C _ Not Connected
Lcd DIN _ pin 5
Lcd CLK _ pin 4
Lcd VCC _ +3,3V (+5V)
Lcd BL_ +3,3V (+5V) (LED)
LcdGND _ GND
Это основные моменты. И все плюсы, которые на этом и закончились. Потому что больше информации найти не получилось. Вопросы на форумах без ответов. Ни скетчей, ни проектов, ничего. Начал искать на заграничных сайтах, и набрел на один проект простых часов на модуле часов реального времени DS1307, который у меня был. В общем от этих часов и начал плясать.
1. Arduino UNO
2. LCD HX1230
3. DS1307
4. Макетная плата
Распиновка модуля DS1307:
SCL _ pin A5
SDA _ pin A4
VCC _ +5V
GND _ GND
Wire, Time, RTClib, graphicsLCD.
Библиотека Wire используется для связи микроконтроллера с устройствами и модулями через интерфейс I2C, Time - для установки времени с ПК или вручную, RTClib - библиотека модуля реального времени и graphicsLCD - библиотека дисплея.
Ну начнем собирать часики на основе LCD HX1230 и модуля DS1307. Время можно установить вручную и синхронизировать с компютером. Второй быстрее и точнее. В любом случае используется спечиальный скетч. Но до этого надо собрать схему:
вставить батарею в держате модуля часов, подключить ардуино к usb-порту компьютера. В arduino-IDE создаем новый скетч и заливаем в arduino
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup () {
while (!Serial); // for Leonardo/Micro/Zero
Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop () {
DateTime now = rtc.now();
// время
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
// дата
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
// день недели
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.println();
delay(3000); //каждые три секунды меняются показания в мониторе порта
}
Открываем монитор порта и видим, что все работает.
Данный скетч устанавливает время, дату и день недели автомтически, синхронизируясь с компом, но если время отобразилось неправильно (долго скетч заливался, или системное время было неправильное), то надо отключить плату ардуинки, вытащит батарею, и все повторить заново.
Добавляем плату HX1230
Заливаем скетч:
#include "RTClib.h"
#include <graphicsLCD.h>
#define lcd_RST_pin 8 // LCD HX1230 pins, (no pin6) Change to your desire pins
#define lcd_CS_pin 7
#define lcd_DIN_pin 5
#define lcd_CLK_pin 4
graphicsLCD lcd(lcd_RST_pin,lcd_CS_pin,lcd_DIN_pin,lcd_CLK_pin);
RTC_DS1307 RTC;
int led = 2;
void setup() {
pinMode(led,OUTPUT);
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(); //
lcd.clear();
}
void loop() {
DateTime now = RTC.now();
lcd.line(1);
lcd.print(" ");
if (now.day() < 10) {
lcd.print("0");
}
lcd.print(now.day());
lcd.print("/");
if (now.month() < 10) {
lcd.print("0");
}
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
lcd.line(3);
lcd.print(" ");
if (now.hour() < 10) {
lcd.print("0");
}
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
delay(1000);
}
И на выходе получаем полноценные электронные часы. При желании можно вмонтировать в любое устройство, или отдельный корпус.
Но мы подзабыли, что в первом скетче настраивали часы реального времени еще и на дни недели, которые тоже можно вывести на экран. Для этого добавляем небольшой строчку в начало скетча
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
и в конце
lcd.line(5);
lcd.print(" ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
Скетм выводящий дни недели:
#include "RTClib.h"
#include <graphicsLCD.h>
#define lcd_RST_pin 8 // LCD HX1230 pins, (no pin6) Change to your desire pins
#define lcd_CS_pin 7
#define lcd_DIN_pin 5
#define lcd_CLK_pin 4
graphicsLCD lcd(lcd_RST_pin,lcd_CS_pin,lcd_DIN_pin,lcd_CLK_pin);
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
RTC_DS1307 RTC;
int led = 2;
void setup() {
pinMode(led,OUTPUT);
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.begin(); //
lcd.clear();
}
void loop() {
DateTime now = RTC.now();
lcd.line(1);
lcd.print(" ");
if (now.day() < 10) {
lcd.print("0");
}
lcd.print(now.day());
lcd.print("/");
if (now.month() < 10) {
lcd.print("0");
}
lcd.print(now.month());
lcd.print("/");
lcd.print(now.year());
lcd.line(3);
lcd.print(" ");
if (now.hour() < 10) {
lcd.print("0");
}
lcd.print(now.hour());
lcd.print(":");
if (now.minute() < 10) {
lcd.print("0");
}
lcd.print(now.minute());
lcd.print(":");
if (now.second() < 10) {
lcd.print("0");
}
lcd.print(now.second());
lcd.line(5);
lcd.print(" ");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
delay(1000);
}