Advertisement
matthesinator

led controller

Jul 5th, 2019
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.86 KB | None | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266WebServer.h>
  3. #include <ArduinoOTA.h>
  4. #include <colorWheel.h>
  5. #include <web_iro_js.h>
  6.  
  7. #define RED_LED 14
  8. #define GREEN_LED 12
  9. #define BLUE_LED 5
  10.  
  11. #define BUILTIN_LED 2
  12.  
  13. const char* ssid = "---";
  14. const char* password = "---";
  15.  
  16. IPAddress ip(192,168,2,111);
  17. IPAddress gateway(192,168,2,1);
  18. IPAddress subnet(255,255,255,0);
  19. ESP8266WebServer server(80);
  20.  
  21. int brightness_red      = 0;
  22. int brightness_green    = 0;
  23. int brightness_blue     = 0;
  24.  
  25. int presets[4][3]       = {{255,119,46},{46,0,39},{0,115,23},{0,0,0}};
  26.  
  27. boolean blinking        = false;
  28. boolean fading          = false;
  29. boolean jumping         = false;
  30.  
  31. int blinkDelay[]        = {50, 145, 240, 335, 430, 525, 620, 715, 810, 905};
  32. int speedPosition       = 4;
  33.  
  34. int fadeOrder[]       = {RED_LED, GREEN_LED, BLUE_LED};
  35. int lastFade          = 0;    //0~2, refers to fadeOrder[]
  36. int thisFade          = 1;    //0~2, refers to fadeOrder[]
  37. int fadeSpeed[]       = {1, 1, 1, 2, 3, 4, 5, 5, 7, 9};
  38.  
  39. boolean blinkHelper = false;
  40.  
  41. void handleRequest();
  42. void handleGet();
  43. void setupOTA();
  44. void connectToWiFi();
  45. void turnOff();
  46. void turnOn();
  47. void applyColor();
  48. void applyPreset();
  49. void blink();
  50. void fade();
  51. void jump();
  52.  
  53. void setup() {
  54.     Serial.begin(115200);
  55.     delay(10);
  56.  
  57.     analogWriteRange(255);
  58.    
  59.     pinMode(BUILTIN_LED, OUTPUT);
  60.     digitalWrite(BUILTIN_LED, LOW);
  61.  
  62.     pinMode(RED_LED, OUTPUT);
  63.     pinMode(GREEN_LED, OUTPUT);
  64.     pinMode(BLUE_LED, OUTPUT);
  65.  
  66.     analogWrite(RED_LED, 0);
  67.     analogWrite(GREEN_LED, 0);
  68.     analogWrite(BLUE_LED, 0);
  69.  
  70.     Serial.println();
  71.     Serial.print("Connecting to ");
  72.     Serial.println(ssid);
  73.  
  74.     WiFi.begin(ssid, password);
  75.     WiFi.config(ip, gateway, subnet);
  76.  
  77.     while(WiFi.status() != WL_CONNECTED) {
  78.         delay(500);
  79.         Serial.print(".");
  80.     }
  81.     Serial.println();
  82.     Serial.println(WiFi.localIP());
  83.  
  84.     setupOTA();
  85.  
  86.     server.on("/request", handleRequest);
  87.     server.on("/get", handleGet);
  88.  
  89.     server.on("/", HTTP_GET, []() {
  90.         server.send(200, "text/html", GUI);
  91.     });
  92.  
  93.     server.on("/iro.min.js", HTTP_GET, []() {
  94.         server.send_P(200, "application/javascript", IRO_JS);
  95.     });
  96.  
  97.     server.begin();
  98.  
  99.     Serial.println("Setup done");
  100.     pinMode(BUILTIN_LED, OUTPUT);
  101.     digitalWrite(BUILTIN_LED, HIGH);    
  102. }
  103.  
  104. void loop() {
  105.     if (WiFi.status() != WL_CONNECTED) {
  106.         //Serial.println("no connection");
  107.         connectToWiFi();
  108.     }
  109.     ArduinoOTA.handle();
  110.     server.handleClient();
  111.  
  112.     if (blinking) {
  113.         blink();
  114.     }
  115.  
  116.     if (fading) {
  117.         fade();
  118.     }
  119.  
  120.     if (jumping) {
  121.         jump();
  122.     }
  123.  
  124.     if (blinking || fading || jumping) {
  125.         delay(blinkDelay[speedPosition]);
  126.     } else {
  127.         delay(20);
  128.     }
  129. }
  130.  
  131. void handleRequest() {
  132.     if (!server.hasArg("mode")) {
  133.         Serial.println("no mode specified");
  134.         server.send(400, "text/plain", "no mode specified");
  135.         return;
  136.     }
  137.  
  138.     String request = server.arg("mode");
  139.  
  140.     if (request.equals("color")) {
  141.         fading = false;
  142.         jumping = false;
  143.         applyColor();
  144.  
  145.     } else if (request.equals("preset")) {
  146.         fading = false;
  147.         jumping = false;
  148.         applyPreset();
  149.  
  150.     } else if (request.equals("blink")) {
  151.         if (blinking) {
  152.             blinking = false;
  153.         } else {
  154.             turnOff();
  155.             fading = false;
  156.             jumping = false;
  157.             blinking = true;
  158.         }
  159.         server.send(200, "text/plain", "applied blinking");
  160.     } else if (request.equals("fade")) {
  161.         if (fading) {
  162.             fading = false;
  163.         } else {
  164.             turnOff();
  165.             blinking = false;
  166.             jumping = false;
  167.             fading = true;
  168.         }
  169.         server.send(200, "text/plain", "applied fading");
  170.     } else if (request.equals("jump")) {
  171.         if (jumping) {
  172.             jumping = false;
  173.         } else {
  174.             turnOff();
  175.             blinking = false;
  176.             fading = false;
  177.             jumping = true;
  178.         }
  179.         server.send(200, "text/plain", "applied jumping");
  180.     } else if (request.equals("speed")) {
  181.         if (!server.hasArg("newSpeed")) {
  182.             server.send(400, "text/plain", "no speed specified");
  183.             return;
  184.         }
  185.         int speed = server.arg("newSpeed").toInt();
  186.         speedPosition = 9 - speed;
  187.         server.send(200, "text/plain", "applied speed");
  188.     } else {
  189.         server.send(400, "text/plain", "argument not found");
  190.     }
  191. }
  192.  
  193. void handleGet() {
  194.     if (!server.hasArg("arg")) {
  195.         Serial.println("no argument specified");
  196.         server.send(400, "text/plain", "no argument specified");
  197.         return;
  198.     }
  199.     String request = server.arg("arg");
  200.     String answer = "";
  201.  
  202.     if (request.equals("current")) {
  203.         answer += (String(brightness_red));
  204.         answer += (";" + String(brightness_green));
  205.         answer += (";" + String(brightness_blue));
  206.         answer += (";" + String(speedPosition));
  207.  
  208.     } else if (request.equals("presets")) {
  209.         for (int i = 0; i < 4; i++) {
  210.             for (int j = 0; j < 3; j++) {
  211.                 answer += String(presets[i][j]);
  212.                 answer += ";";
  213.             }
  214.         }
  215.     } else {
  216.         server.send(400, "text/plain", "argument not found");
  217.     }
  218.     server.send(200, "text/plain", answer);
  219. }
  220.  
  221. void setupOTA() {
  222.     ArduinoOTA.setHostname("ESP8266");
  223.     ArduinoOTA.setPassword("password");
  224.  
  225.     ArduinoOTA.onStart([]() {
  226.         Serial.println("Start");
  227.     });
  228.     ArduinoOTA.onEnd([]() {
  229.         Serial.println("\nEnd");
  230.     });
  231.     ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
  232.         Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  233.     });
  234.     ArduinoOTA.onError([](ota_error_t error) {
  235.         Serial.printf("Error[%u]: ", error);
  236.         if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
  237.         else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
  238.         else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
  239.         else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
  240.         else if (error == OTA_END_ERROR) Serial.println("End Failed");
  241.     });
  242.     ArduinoOTA.begin();
  243. }
  244.  
  245. void connectToWiFi() {
  246.   Serial.println("WiFi connection lost, reconnecting");
  247.   WiFi.begin(ssid, password);
  248.   WiFi.config(ip, gateway, subnet);
  249.  
  250.   while(WiFi.status() != WL_CONNECTED) {
  251.     delay(500);
  252.     Serial.print(".");
  253.   }
  254.   Serial.println("");
  255.   Serial.println("Wifi reconnected");
  256. }
  257.  
  258. void applyColor() {
  259.     Serial.println("applying new color ");
  260.     brightness_red = 0;
  261.     if (server.hasArg("red")) {
  262.         brightness_red = server.arg("red").toInt();
  263.     }
  264.  
  265.     brightness_green = 0;
  266.     if (server.hasArg("green")) {
  267.         brightness_green = server.arg("green").toInt();
  268.     }
  269.  
  270.     brightness_blue = 0;
  271.     if (server.hasArg("blue")) {
  272.         brightness_blue = server.arg("blue").toInt();
  273.     }
  274.  
  275.     turnOn();
  276.     server.send(200, "text/plain", "applied new color");
  277. }
  278.  
  279. void applyPreset() {
  280.     if (!server.hasArg("index")) {
  281.         Serial.println("no index specified");
  282.         server.send(400, "text/plain", "no index specified");
  283.         return;
  284.     }
  285.  
  286.     int index = server.arg("index").toInt();
  287.  
  288.     if (server.hasArg("save")) {
  289.         Serial.println("saving preset");
  290.         presets[index][0] = brightness_red;
  291.         presets[index][1] = brightness_green;
  292.         presets[index][2] = brightness_blue;
  293.         server.send(200, "text/plain", "preset saved");
  294.     } else {
  295.         Serial.println("applying preset");
  296.         brightness_red = presets[index][0];
  297.         brightness_green = presets[index][1];
  298.         brightness_blue = presets[index][2];
  299.  
  300.         turnOn();
  301.         server.send(200, "text/plain", "preset applied");
  302.     }
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement