#include <WiFi.h>
#include <HTTPClient.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <ArduinoJson.h>
// MAX7219 Pins
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define DATA_PIN 23
#define CLK_PIN 18
#define CS_PIN 17
MD_Parola matrix = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// WiFi credentials
#define WLAN_SSID "Wokwi-GUEST"
#define WLAN_PASS ""
// URL จาก Google Apps Script
const char* sheetURL = "https://script.google.com/macros/s/AKfycbyfujTFmAfix4lup3jkNN3VOaP-j2iI0MkhBAbDUEJjkEN15aduhtPZdQ68nqs5qBtB/exec"; // ต้องเป็นลิงก์เต็ม
void setup() {
Serial.begin(115200);
WiFi.begin(WLAN_SSID, WLAN_PASS);
matrix.begin();
matrix.setIntensity(5);
matrix.displayClear();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(sheetURL);
http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
int httpCode = http.GET();
if (httpCode == 200) {
String payload = http.getString();
Serial.println("Payload: " + payload);
// Parse JSON safely
StaticJsonDocument<256> doc;
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("JSON parse error: ");
Serial.println(error.f_str());
return;
}
// Get values
String message = doc["message"] | "NoMsg";
int mode = doc["mode"] | 0;
showMessage(message, mode);
} else {
Serial.println("HTTP error: " + String(httpCode));
}
http.end();
} else {
Serial.println("WiFi disconnected");
}
delay(5000); // ดึงข้อมูลทุก 5 วินาที
}
void showMessage(const String& msg, int mode) {
matrix.displayClear();
switch (mode) {
case 1: // ข้อความวิ่งจากบนลงล่าง
matrix.displayScroll(msg.c_str(), PA_CENTER, PA_SCROLL_DOWN, 100);
break;
case 2: // ข้อความวิ่งจากล่างขึ้นบน
matrix.displayScroll(msg.c_str(), PA_CENTER, PA_SCROLL_UP, 100);
break;
case 3: // ข้อความแสดงตรงกลาง
matrix.displayText(msg.c_str(), PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
break;
case 4: // ข้อความวิ่งจากซ้ายไปขวา
matrix.displayScroll(msg.c_str(), PA_LEFT, PA_SCROLL_RIGHT, 100);
break;
case 0: // ข้อความวิ่งจากขวาไปซ้าย
matrix.displayScroll(msg.c_str(), PA_RIGHT, PA_SCROLL_LEFT, 100);
break;
default:
matrix.displayText("Mode Err", PA_CENTER, 0, 0, PA_PRINT, PA_NO_EFFECT);
break;
}
while (!matrix.displayAnimate());
}