#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
StaticJsonDocument<18000> doc;
int secondCall = 0;
int x = 0;
// the 8 arrays that form each segment of the custom numbers
byte LT[8] =
{
B00111,
B01111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte UB[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte RT[8] =
{
B11100,
B11110,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111
};
byte LL[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B01111,
B00111
};
byte LB[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
byte LR[8] =
{
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11110,
B11100
};
byte UMB[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B11111,
B11111
};
byte LMB[8] =
{
B11111,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
const String url = "https://www.timeapi.io/api/Time/current/zone?timeZone=Asia/Jakarta";
const String url1 = "https://indodax.com/api/btc_usdt/ticker";
HTTPClient http;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.createChar(8, LT);
lcd.createChar(1, UB);
lcd.createChar(2, RT);
lcd.createChar(3, LL);
lcd.createChar(4, LB);
lcd.createChar(5, LR);
lcd.createChar(6, UMB);
lcd.createChar(7, LMB);
lcd.begin(0, 2);
//
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void customtitikdua() {
lcd.setCursor(x, 0);
lcd.write(255);
lcd.setCursor(x, 1);
lcd.write(255);
}
void custom0()
{ // uses segments to build the number 0
lcd.setCursor(x, 0);
lcd.write(8);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(4);
lcd.write(5);
}
void custom1()
{
lcd.setCursor(x, 0);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x + 1, 1);
lcd.write(255);
}
void custom2()
{
lcd.setCursor(x, 0);
lcd.write(6);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(7);
}
void custom3()
{
lcd.setCursor(x, 0);
lcd.write(6);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(7);
lcd.write(7);
lcd.write(5);
}
void custom4()
{
lcd.setCursor(x, 0);
lcd.write(3);
lcd.write(4);
lcd.write(2);
lcd.setCursor(x + 2, 1);
lcd.write(255);
}
void custom5()
{
lcd.setCursor(x, 0);
lcd.write(255);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(7);
lcd.write(7);
lcd.write(5);
}
void custom6()
{
lcd.setCursor(x, 0);
lcd.write(8);
lcd.write(6);
lcd.write(6);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(5);
}
void custom7()
{
lcd.setCursor(x, 0);
lcd.write(1);
lcd.write(1);
lcd.write(2);
lcd.setCursor(x + 1, 1);
lcd.write(8);
}
void custom8()
{
lcd.setCursor(x, 0);
lcd.write(8);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x, 1);
lcd.write(3);
lcd.write(7);
lcd.write(5);
}
void custom9()
{
lcd.setCursor(x, 0);
lcd.write(8);
lcd.write(6);
lcd.write(2);
lcd.setCursor(x + 2, 1);
lcd.write(255);
}
void loop() {
secondCall++;
if (secondCall == 3) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Check BTC Price....");
secondCall = 0;
http.begin(url1);
http.addHeader("accept", "application/json");
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
DeserializationError err = deserializeJson(doc, payload);
if (err) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(err.c_str());
}
else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("BTC is ");
lcd.print(doc["ticker"]["last"].as<String>());
lcd.print(" USD");
}
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
http.end();
delay(1000);
}
else {
http.begin(url);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP ");
Serial.println(httpResponseCode);
String payload = http.getString();
DeserializationError err = deserializeJson(doc, payload);
if (err) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(err.c_str());
}
else {
tampilJam(doc["hour"].as<String>(), doc["minute"].as<String>());
}
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
Serial.println(":-(");
}
http.end();
delay(1000);
}
delay(1000);
// this speeds up the simulation
}
void tampilJam(String jamS, String menitS) {
int jam, menit;
int angkaLcd[4];
jam = jamS.toInt();
menit = menitS.toInt();
angkaLcd[0] = jam / 10;
angkaLcd[1] = jam % 10;
angkaLcd[2] = menit / 10;
angkaLcd[3] = menit % 10;
x = 0;
lcd.clear();
decode(angkaLcd[0]);
x = x + 4; // sifts cursor over 4 columns
decode(angkaLcd[1]);
x = x + 5;
decode(angkaLcd[2]);
x = x + 4;
decode(angkaLcd[3]);
}
void decode(int angka) {
switch (angka) {
case 0:
custom0();
break;
case 1:
custom1();
break;
case 2:
custom2();
break;
case 3:
custom3();
break;
case 4:
custom4();
break;
case 5:
custom5();
break;
case 6:
custom6();
break;
case 7:
custom7();
break;
case 8:
custom8();
break;
case 9:
custom9();
break;
}
}