Hello everyone,
I am trying to change RTC data on ili9486 based TFT display and its overwrite the chage data on previous data change by manually..
My project have uno+ 3.5" ili9486 based TFT display + DS3231 RTC
and two external buttons which is interfacing with uno at pin number 10 &11 respectively.
button 1 = digital pin 10
button 2 = digital pin 11
MY arduino sketch are like this,
[
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#include <Fonts/FreeSerifBoldItalic18pt7b.h>
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/Org_01.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#define button1 10
#define button2 11
void setup(void) {
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
delay(1000);
uint16_t identifier = tft.readID();
if (identifier == 0x9486)
{
//Serial.println(F("Found 0x9486 LCD driver"));
}
else {
//Serial.print(F("Unknown LCD driver chip: "));
identifier = 0x9486;
}
tft.begin(identifier);
tft.fillScreen(BLACK);
}
char Time[] = " : : ";
char Calendar[] = " / /20 ";
byte i, second, minute, hour, day, date, month, year;
void display_day() {
tft.setTextColor(YELLOW);
switch (day) {
case 1: draw_text(100, 25, " SUNDAY ", 3); break;
case 2: draw_text(100, 25, " MONDAY ", 3); break;
case 3: draw_text(100, 25, " TUESDAY ", 3); break;
case 4: draw_text(100, 25, "WEDNESDAY", 3); break;
case 5: draw_text(100, 25, "THURSDAY ", 3); break;
case 6: draw_text(100, 25, " FRIDAY ", 3); break;
default: draw_text(100, 25, "SATURDAY ", 3);
}
}
void DS3231_display() {
second = (second >> 4) * 10 + (second & 0x0F);
minute = (minute >> 4) * 10 + (minute & 0x0F);
hour = (hour >> 4) * 10 + (hour & 0x0F);
date = (date >> 4) * 10 + (date & 0x0F);
month = (month >> 4) * 10 + (month & 0x0F);
year = (year >> 4) * 10 + (year & 0x0F);
Time[7] = second % 10 + 48;
Time[6] = second / 10 + 48;
Time[4] = minute % 10 + 48;
Time[3] = minute / 10 + 48;
Time[1] = hour % 10 + 48;
Time[0] = hour / 10 + 48;
Calendar[9] = year % 10 + 48;
Calendar[8] = year / 10 + 48;
Calendar[4] = month % 10 + 48;
Calendar[3] = month / 10 + 48;
Calendar[1] = date % 10 + 48;
Calendar[0] = date / 10 + 48;
tft.setTextColor(RED);
draw_text(245, 410, Calendar, 3);
draw_text(0, 410, Time, 3);
}
void blink_parameter() {
byte j = 0;
while (j < 10 && digitalRead(button1) && digitalRead(button2)) {
j++;
delay(25);
}
}
byte edit(byte x_pos, byte y_pos, byte parameter) {
char text[3];
//tft.fillScreen(BLACK);
sprintf(text, "%02u", parameter);
while (!digitalRead(button1));
while (true) {
while (!digitalRead(button2)) {
parameter++;
if (i == 0 && parameter > 31)
parameter = 1;
if (i == 1 && parameter > 12)
parameter = 1;
if (i == 2 && parameter > 99)
parameter = 0;
if (i == 3 && parameter > 23)
parameter = 0;
if (i == 4 && parameter > 59)
parameter = 0;
sprintf(text, "%02u", parameter);
draw_text(x_pos, y_pos, text, 3);
delay(200);
}
draw_text(x_pos, y_pos, " ", 3);
blink_parameter();
draw_text(x_pos, y_pos, text, 3);
blink_parameter();
if (!digitalRead(button1)) {
i++;
return parameter;
}
}
}
void draw_text(byte x_pos, byte y_pos, char *msg, byte text_size) {
tft.setCursor(x_pos, y_pos);
tft.setTextSize(text_size);
tft.println(msg);
//tft.display();
}
void loop() {
if (!digitalRead(button1)) {
i = 0;
while (!digitalRead(button1));
while (true) {
while (!digitalRead(button2)) {
day++;
if (day > 7) day = 1;
display_day();
delay(200);
}
draw_text(40, 0, " ", 3);
blink_parameter();
display_day();
blink_parameter();
if (!digitalRead(button1))
break;
}
date = edit(170, 450, date);
month = edit(210, 450, month);
year = edit(260, 450, year);
hour = edit(30, 450, hour);
minute = edit(40, 450, minute);
minute = ((minute / 10) << 4) + (minute % 10);
hour = ((hour / 10) << 4) + (hour % 10);
date = ((date / 10) << 4) + (date % 10);
month = ((month / 10) << 4) + (month % 10);
year = ((year / 10) << 4) + (year % 10);
Wire.beginTransmission(0x68);
Wire.write(0);
Wire.write(0);
Wire.write(minute);
Wire.write(hour);
Wire.write(day);
Wire.write(date);
Wire.write(month);
Wire.write(year);
Wire.endTransmission();
delay(200);
}
Wire.beginTransmission(0x68);
Wire.write(0);
Wire.endTransmission(false);
Wire.requestFrom(0x68, 7);
second = Wire.read();
minute = Wire.read();
hour = Wire.read();
day = Wire.read();
date = Wire.read();
month = Wire.read();
year = Wire.read();
display_day();
DS3231_display();
delay(50);
} //end sketch
]
following are attachment for TFT display and operation video