#include <WiFi.h>
#include <MQTT.h>
// #include <NusabotSimpleTimer.h>
WiFiClient net;
MQTTClient client;
// NusabotSimpleTimer timer;
const char ssid [] = "Wokwi-GUEST";
const char pass [] = "";
#define jumalah_ic_SR 1
#define jumlah_SR 8*jumalah_ic_SR
int data = 14;
int latch = 27;
int srclk = 26;
int dr1, dr2, dr3, dr4, dr5, dr6, dr7, dr8;
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
pinMode(data, OUTPUT);
pinMode(latch, OUTPUT);
pinMode(srclk, OUTPUT);
client.begin("naildragon11.cloud.shiftr.io", net); // broker privat
client.onMessage(subscribe);
connect();
}
void k_lampu_hidup(bool r1, bool r2, bool r3, bool r4, bool r5, bool r6, bool r7, bool r8) {
digitalWrite(latch, LOW); // UNTUK MEMBUKA SHIFTREGISTER
// mambaca data dari belakang
digitalWrite(srclk, LOW);
digitalWrite(data, r8);//8
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r7);//7
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r6);//6
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r5);//5
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r4);//4
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r3);//3
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r2);//2
digitalWrite(srclk, HIGH);
digitalWrite(srclk, LOW);
digitalWrite(data, r1);//1
digitalWrite(srclk, HIGH);
digitalWrite(latch, HIGH);// UNTUK MENUTUP SHIFTREGISTER
}
void s_lampu_hidup() {
digitalWrite(latch, LOW); // UNTUK MEMBUKA SHIFTREGISTER
// mambaca data dari belakang
for (int i = 0; i > jumlah_SR; i++) {
digitalWrite(srclk, LOW);
digitalWrite(data, HIGH);
digitalWrite(srclk, HIGH);
}
digitalWrite(latch, HIGH);// UNTUK MENUTUP SHIFTREGISTER
}
void s_lampu_mati() {
digitalWrite(latch, LOW); // UNTUK MEMBUKA SHIFTREGISTER
// mambaca data dari belakang
for (int i = 0; i > jumlah_SR; i++) {
digitalWrite(srclk, LOW);
digitalWrite(data, LOW);
digitalWrite(srclk, HIGH);
}
digitalWrite(latch, HIGH);// UNTUK MENUTUP SHIFTREGISTER
}
void connect() {
while (WiFi.status() != WL_CONNECTED) {
Serial.println("Menghubungkan WiFi");
delay(500);
}
Serial.println("Terhubung ke WiFi");
client.setWill("hhaha/status/12345678", "offline", true, 1);
while (!client.connect("perangkatIoT", "naildragon11", "gvuLV4M1gwzMRcrb")) {
Serial.println("Menghubungkan Broker");
delay(500);
}
client.publish("hhaha/status/12345678", "online", true, 1);
Serial.println("Terhubung ke Broker");
client.subscribe("hhaha/#", 1); // nama topic dan QoS
}
void subscribe(String &topic, String &data) {
if (topic == "hhaha/dr1") {
if (data == "X") {
dr1 = 1;
} else if (data == "O") {
dr1 = 0;
}
} else if (topic == "hhaha/dr2") {
if (data == "X") {
dr2 = 1;
} else if (data == "O") {
dr2 = 0;
}
} else if (topic == "hhaha/dr3") {
if (data == "X") {
dr3 = 1;
} else if (data == "O") {
dr3 = 0;
}
} else if (topic == "hhaha/dr4") {
if (data == "X") {
dr4 = 1;
} else if (data == "O") {
dr4 = 0;
}
} else if (topic == "hhaha/dr5") {
if (data == "X") {
dr5 = 1;
} else if (data == "O") {
dr5 = 0;
}
} else if (topic == "hhaha/dr6") {
if (data == "X") {
dr6 = 1;
} else if (data == "O") {
dr6 = 0;
}
} else if (topic == "hhaha/dr7") {
if (data == "X") {
dr7 = 1;
} else if (data == "O") {
dr7 = 0;
}
} else if (topic == "hhaha/dr8") {
if (data == "X") {
dr8 = 1;
} else if (data == "O") {
dr8 = 0;
}
}
k_lampu_hidup(dr1, dr2, dr3, dr4, dr5, dr6, dr7, dr8);
}
void loop() {
client.loop();
if ((WiFi.status() != WL_CONNECTED) || (!client.connected())) {
connect();
}
}