前回まで。
最近、ちょっとだけバグフィックスしたのでメモ。
バグフィックス①:運休に対応
レアな運行情報として、遅延はしないが運休があるパターンが有ったので、その場合は遅延と同じく黄色い点滅をさせるようにした。
バグフィックス②:光り方を増やす
遅延と大幅な乱れは区別がつきそうなので、遅延は黄色い点滅、大幅な乱れは黄色と赤の点滅に変更。
クソコードはこちら
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <Adafruit_NeoPixel.h> char ssid[] = "xxx"; char password[] = "yyy"; char unkopage[] = "unkou.keikyu.co.jp"; int intervalSec = 10 * 60; #define PIN 4 #define NUMLED 4 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMLED, PIN, NEO_RGB + NEO_KHZ800); void setup() { Serial.begin(115200); Serial.println(""); pixels.begin(); pixels.setBrightness(60); } void loop() { connectWifi(); String result = getPageSource(); Serial.println(result); disconnectWifi(); if (result.indexOf("受託") > 0) { Serial.println("振替輸送受託!"); ledExtreme(intervalSec); return; } if (result.indexOf("見合わせ") > 0) { Serial.println("運転見合わせ!"); ledStopped(intervalSec); return; } if (result.indexOf("乱れ") > 0) { Serial.println("大幅に乱れている!"); ledBad(intervalSec); return; } if (result.indexOf("遅れ") > 0 || result.indexOf("運休") > 0) { Serial.println("遅延!"); ledDelayed(intervalSec); return; } Serial.println("たぶん平常通り運転!"); delay(intervalSec * 1000); return; } void connectWifi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); ledConnecting(3); } Serial.println("connected!"); } void disconnectWifi() { WiFi.disconnect(); Serial.println("disconnected!"); } String getPageSource() { WiFiClient client; if ( !client.connect(unkopage, 80) ) { return String(""); } client.print(String("GET ") + "/" + " HTTP/1.1\r\n" + "Host: " + unkopage + "\r\n" + "Range: bytes=8000-9000\r\n" + "Connection: close\r\n\r\n"); client.println(); delay(1000); String body = ""; String unko = "<!-- ======================== 運行情報 =================================== -->"; while (client.available()) { body += client.readStringUntil('\r'); } body = body.substring(body.indexOf(unko) + unko.length()); body = body.substring(0, body.indexOf(unko)); return body; } // 白い点滅 void ledConnecting(int sec) { int count = 0; while (count < sec) { for (int i = 0; i < 256; i += 5) { setColor( i, i, i); } for (int i = 255; i >= 0; i -= 5) { setColor( i, i, i); } count++; } } // 黄色い点滅 void ledDelayed(int sec) { int count = 0; while (count < sec) { for (int i = 0; i < 256; i += 5) { setColor( i, i, 0); } for (int i = 255; i >= 0; i -= 5) { setColor( i, i, 0); } count++; } } // 黄色と赤の点滅 void ledBad(int sec) { int count = 0; while (count < sec) { for (int i = 0; i < 256; i += 5) { setColor( i, 0, 0); } for (int i = 255; i >= 0; i -= 5) { setColor( i, 0, 0); } for (int i = 0; i < 256; i += 5) { setColor( i, i, 0); } for (int i = 255; i >= 0; i -= 5) { setColor( i, i, 0); } count++; count++; } } // 赤い点滅 void ledStopped(int sec) { int count = 0; while (count < sec) { for (int i = 0; i < 256; i += 5) { setColor( i, 0, 0); } for (int i = 255; i >= 0; i -= 5) { setColor( i, 0, 0); } count++; } } // パリピ void ledExtreme(int sec) { int count = 0; while (count < sec) { for (int i = 0; i < 20; i++) { setRandomColor(); delay(50); } count++; } } void setColor(int r, int g, int b) { for (int i = 0 ; i < NUMLED; i++) { pixels.setPixelColor(i, pixels.Color(r, g, b)); pixels.show(); } delay(10); } void setRandomColor() { for (int i = 0 ; i < NUMLED; i++) { pixels.setPixelColor(i, pixels.Color(64 * random(1, 5) - 1 , 64 * random(1, 5) - 1 , 64 * random(1, 5) - 1 )); pixels.show(); } delay(10); }