#include <WiFi.h>
#include <TinyGPS++.h>
// GPS設定
TinyGPSPlus gps;
// LED引腳設定
const int redLED = 25;
const int yellowLED = 26;
const int greenLED = 27;
// Wi-Fi設定
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";
// 模擬的GPS NMEA數據
const char* gpsData = "$GPGGA,123456.00,3723.2475,N,12158.3416,W,1,10,0.78,7.0,M,-25.7,M,,*4A";
void setup() {
// 初始化串口
Serial.begin(115200);
// 初始化LED引腳
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
// 初始化Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void loop() {
// 模擬GPS數據輸入
for (int i = 0; i < strlen(gpsData); i++) {
gps.encode(gpsData[i]);
}
// 假設有某種邏輯判斷救護車接近
bool ambulanceApproaching = checkAmbulance();
if (ambulanceApproaching) {
changeLightsForAmbulance();
}
delay(1000); // 每秒檢查一次
}
bool checkAmbulance() {
// 處理GPS數據
if (gps.location.isUpdated()) {
double latitude = gps.location.lat();
double longitude = gps.location.lng();
Serial.print("Latitude: "); Serial.println(latitude, 6);
Serial.print("Longitude: "); Serial.println(longitude, 6);
// 判斷是否接近特定位置
// 模擬返回true表示救護車接近
return true;
}
return false;
}
void changeLightsForAmbulance() {
// 設置其他方向紅燈
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
// 5秒後切換救護車方向綠燈
delay(5000);
digitalWrite(redLED, LOW);
digitalWrite(greenLED, HIGH);
}