// Code generated by Arduino IoT Cloud
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>
#include <IRremote.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
IRrecv receiver(35);
const char DEVICE_LOGIN_NAME[] = "c686b1f7-1fda-466e-b7c8-607a534d8efc";
const char SSID[] = "Wokwi-GUEST";
const char PASS[] = "";
const char DEVICE_KEY[] = "JAiurY3sdtWqPqmOJvbG7FOiB";
void onSelect1Change();
void onSelect2Change();
void onScheduleChange();
void onControlChange();
void onSetChange();
time_t UnixTime;
unsigned long skr = 0;
String waktu;
int select_1;
int select_2;
CloudSchedule schedule;
bool control;
bool set;
bool rly_sched[6] = {false, false, false, false, false, false};
bool rly_onoff[12];
char rly_name[13] = {"ABCDEFGHIJKL"};
CloudSchedule R1, R2, R3, R4, R5, R6;
int count[6] = {0, 0, 0, 0, 0, 0};
int pin_sched[6] = {23, 19, 18, 5, 17, 16};
int pin_onoff[12] = {32, 33, 25, 26, 27, 14, 12, 13, 15, 2, 0, 4};
void initProperties() {
ArduinoCloud.setBoardId(DEVICE_LOGIN_NAME);
ArduinoCloud.setSecretDeviceKey(DEVICE_KEY);
ArduinoCloud.addProperty(select_1, READWRITE, ON_CHANGE, onSelect1Change);
ArduinoCloud.addProperty(select_2, READWRITE, ON_CHANGE, onSelect2Change);
ArduinoCloud.addProperty(schedule, READWRITE, ON_CHANGE, onScheduleChange);
ArduinoCloud.addProperty(control, READWRITE, ON_CHANGE, onControlChange);
ArduinoCloud.addProperty(set, READWRITE, ON_CHANGE, onSetChange);
}
WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for (;;);
}
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
for (int i = 0; i < 6; i++) {
pinMode(pin_sched[i], OUTPUT);
}
for (int i = 0; i < 12; i++) {
pinMode(pin_onoff[i], OUTPUT);
}
receiver.enableIRIn();
}
void loop() {
while (ArduinoCloud.connected() == 0) {
if (receiver.decode()) {
translateIR();
receiver.resume();
}
ArduinoCloud.update();
}
ArduinoCloud.update();
if (set) {
if (select_1 == 0) R1 = schedule;
if (select_1 == 1) R2 = schedule;
if (select_1 == 2) R3 = schedule;
if (select_1 == 3) R4 = schedule;
if (select_1 == 4) R5 = schedule;
if (select_1 == 5) R6 = schedule;
}
rly_sched[0] = R1.isActive();
rly_sched[1] = R2.isActive();
rly_sched[2] = R3.isActive();
rly_sched[3] = R4.isActive();
rly_sched[4] = R5.isActive();
rly_sched[5] = R6.isActive();
if (control) {
for (int i = 0; i < 12; i++) {
if (select_2 == i) {
digitalWrite(pin_onoff[i], HIGH);
rly_onoff[i] = true;
}
}
} else {
for (int i = 0; i < 12; i++) {
if (select_2 == i) {
digitalWrite(pin_onoff[i], LOW);
rly_onoff[i] = false;
}
}
}
if (millis() - skr > 1000) {
UnixTime = ArduinoCloud.getLocalTime();
waktu = ctime(&UnixTime);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print(waktu.substring(0, 11));
display.print(waktu.substring(20));
display.print(" ");
display.println(waktu.substring(11, 19));
for (int i = 0; i < 6; i++) {
display.print("R");
display.print(i + 1);
display.print(":");
if (rly_sched[i]) {
digitalWrite(pin_sched[i], true);
display.print("ON.");
if (count[i] < 10) display.print(".");
if (count[i] < 100) display.print(".");
if (count[i] < 1000) display.print(".");
display.print(count[i]);
count[i]++;
} else {
digitalWrite(pin_sched[i], false);
count[i] = 0;
display.print("OFF....");
}
if ((i + 1) % 2 == 0) display.println();
}
for (int i = 0; i < 12; i++) {
display.print(rly_name[i]);
if (rly_onoff[i]) display.print(":1, ");
else display.print(":0, ");
if ((i + 1) % 4 == 0) display.println();
}
display.display();
skr = millis();
}
}
void translateIR() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Connection lost.....");
display.println("....................");
switch (receiver.decodedIRData.command) {
case 162:
display.println("POWER=>All Relays:ON");
for (int i = 0; i < 6; i++) {
digitalWrite(pin_sched[i], HIGH);
rly_sched[i] = true;
}
for (int i = 0; i < 12; i++) {
digitalWrite(pin_onoff[i], HIGH);
rly_onoff[i] = true;
}
break;
case 226:
display.println("MENU=>All Relays:OFF");
for (int i = 0; i < 6; i++) {
digitalWrite(pin_sched[i], LOW);
rly_sched[i] = false;
}
for (int i = 0; i < 12; i++) {
digitalWrite(pin_onoff[i], LOW);
rly_onoff[i] = false;
}
break;
case 34:
display.println("TEST=>Relay A:ON....");
digitalWrite(32, HIGH);
rly_onoff[0] = true;
break;
case 2:
display.println("PLUS=>Relay B:ON....");
digitalWrite(33, HIGH);
rly_onoff[1] = true;
break;
case 194:
display.println("BACK=>Relay C:ON....");
digitalWrite(25, HIGH);
rly_onoff[2] = true;
break;
case 224:
display.println("PREV=>Relay D:ON....");
digitalWrite(26, HIGH);
rly_onoff[3] = true;
break;
case 168:
display.println("PLAY=>Relay E:ON....");
digitalWrite(27, HIGH);
rly_onoff[4] = true;
break;
case 144:
display.println("NEXT=>Relay F:ON....");
digitalWrite(14, HIGH);
rly_onoff[5] = true;
break;
case 104:
display.println("num:0=>Relay G:ON...");
digitalWrite(12, HIGH);
rly_onoff[6] = true;
break;
case 152:
display.println("MINUS=>Relay H:ON...");
digitalWrite(13, HIGH);
rly_onoff[7] = true;
break;
case 176:
display.println("key:C=>Relay I:ON...");
digitalWrite(15, HIGH);
rly_onoff[8] = true;
break;
case 48:
display.println("num:1=>Relay J:ON...");
digitalWrite(2, HIGH);
rly_onoff[9] = true;
break;
case 24:
display.println("num:2=>Relay K:ON...");
digitalWrite(0, HIGH);
rly_onoff[10] = true;
break;
case 122:
display.println("num:3=>Relay L:ON...");
digitalWrite(4, HIGH);
rly_onoff[11] = true;
break;
case 16:
display.println("num:4=>Relay R1:ON..");
digitalWrite(23, HIGH);
rly_sched[0] = true;
break;
case 56:
display.println("num:5=>Relay R2:ON..");
digitalWrite(19, HIGH);
rly_sched[1] = true;
break;
case 90:
display.println("num:6=>Relay R3:ON..");
digitalWrite(18, HIGH);
rly_sched[2] = true;
break;
case 66:
display.println("num:7=>Relay R4:ON..");
digitalWrite(5, HIGH);
rly_sched[3] = true;
break;
case 74:
display.println("num:8=>Relay R5:ON..");
digitalWrite(17, HIGH);
rly_sched[4] = true;
break;
case 82:
display.println("num:9=>Relay R6:ON..");
digitalWrite(16, HIGH);
rly_sched[5] = true;
break;
}
for (int i = 0; i < 12; i++) {
display.print(rly_name[i]);
if (rly_onoff[i]) display.print(":1, ");
else display.print(":0, ");
if ((i + 1) % 4 == 0) display.println();
}
for (int i = 0; i < 6; i++) {
display.print("R");
display.print(i + 1);
display.print(":");
if (rly_sched[i]) display.print(":1, ");
else display.print(":0, ");
if ((i + 1) % 3 == 0) display.println();
}
display.display();
}
void onSetChange() {
}
void onScheduleChange() {
}
void onSelect1Change() {
}
void onSelect2Change() {
}
void onControlChange() {
}
R1:Scheduled
R2:Scheduled
R3:Scheduled
R4:Scheduled
A:On/Off
B:On/Off
C:On/Off
D:On/Off
E:On/Off
F:On/Off
G:On/Off
H:On/Off
I:On/Off
J:On/Off
K:On/Off
L:On/Off
R5:Scheduled
R6:Scheduled