GyroGearloose

ESP8266 Access Point Fastled DemoReel

Feb 15th, 2016
1,056
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*-------------------------------------------------------------------------------------
  2.    Access Point Version
  3.    http://192.168.4.1
  4.  
  5.    Works with Huzzah; other modules not tested yet.
  6.  
  7.    v01:   webserver extended to 7 on and off switches
  8.    v02:   added demo reel. Had to declare FastLED before
  9.           the webserver. Then put the complete webserver
  10.           into a void webserver() and leave in the loop
  11.           just the case statements and the FastLEDshow.
  12.           Added power control
  13.    v02.1  changed to a drop down menu    
  14.  
  15.   Usage:  after upload open the Serial Monitor in Arduino and see what
  16.           IP address is returned. In my case it is 192.168.1.252
  17.           Open this IP address in a browser (PC or phone)
  18.  
  19.  Gyro Gearloose, Feb 2016
  20.  
  21. /*-------------------------------------------------------------------------------------
  22. HTTP 1.1 Webserver for ESP8266 adapted to Arduino IDE
  23.  
  24. From Stefan Thesen 04/2015
  25. https://blog.thesen.eu/http-1-1-webserver-fuer-esp8266-als-accesspoint/
  26. https://blog.thesen.eu/stabiler-http-1-1-wlan-webserver-mit-dem-esp8266-microcontroller/
  27.  
  28. Running stable for days
  29. (in difference to all samples I tried)
  30.  
  31. Does HTTP 1.1 with defined connection closing.
  32. Reconnects in case of lost WiFi.
  33. Handles empty requests in a defined manner.
  34. Handle requests for non-exisiting pages correctly.
  35.  
  36. This demo allows to switch two functions:
  37. Function 1 creates serial output and toggels GPIO2
  38. Function 2 just creates serial output.
  39.  
  40. Serial output can e.g. be used to steer an attached
  41. Arduino, Raspberry etc.
  42. ---------------------------------------------------------------------------------------*/
  43.  
  44. // FastLED setup -----FastLED has to be declared BEFORE the Webserver-----
  45. #include "FastLED.h"
  46. FASTLED_USING_NAMESPACE
  47.  
  48. #if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
  49. #warning "Requires FastLED 3.1 or later; check github for latest code."
  50. #endif
  51.  
  52. #define DATA_PIN      13     // for Huzzah: Pins w/o special function:  #4, #5, #12, #13, #14; // #16 does not work :( //6
  53. //#define CLK_PIN     12
  54. //#define LED_TYPE    APA102
  55. //#define COLOR_ORDER BGR
  56. #define LED_TYPE      WS2811
  57. #define COLOR_ORDER   GRB
  58. #define NUM_LEDS      24    
  59. CRGB leds[NUM_LEDS];
  60.  
  61. #define BRIGHTNESS          96
  62. #define MILLI_AMPERE      1000
  63. #define FRAMES_PER_SECOND  120
  64.  
  65. int ledMode = 2;            // this is the starting animation
  66.  
  67. // Websever setup -----------------------------------------------------
  68. #include <ESP8266WiFi.h>
  69. // comes with Huzzah installation. Enter in Arduino settings:
  70. // http://arduino.esp8266.com/package_esp8266com_index.json
  71.  
  72. const char* ssid = "ESP-Accesspoint";
  73. const char* password = "123456";  // set to "" for open access point w/o password or any other pw
  74.  
  75. unsigned long ulReqcount;
  76.  
  77.  
  78. // Create an instance of the server on Port 80
  79. WiFiServer server(80);
  80.  
  81. void setup()
  82. {
  83.   // setup globals
  84.   ulReqcount=0;
  85.  
  86.   // prepare GPIO2
  87.   pinMode(2, OUTPUT);
  88.   digitalWrite(2, 0);
  89.  
  90.   // start serial
  91.   Serial.begin(9600);
  92.   delay(1);
  93.  
  94.   // AP mode
  95.   WiFi.mode(WIFI_AP);
  96.   WiFi.softAP(ssid, password);
  97.   server.begin();
  98.  
  99.   FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(DirectSunlight);
  100.   //FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(DirectSunlight);
  101.   FastLED.setBrightness(BRIGHTNESS);
  102.   set_max_power_in_volts_and_milliamps(5, MILLI_AMPERE);
  103. }
  104.  
  105. uint8_t gHue = 0; // rotating "base color" used by many of the patterns
  106.  
  107. void WiFiStart()
  108. {
  109.  
  110.   // Connect to WiFi network
  111.   Serial.println();
  112.   Serial.println();
  113.   Serial.print("Connecting to ");
  114.   Serial.println(ssid);
  115.  
  116.   WiFi.begin(ssid, password);
  117.  
  118.   while (WiFi.status() != WL_CONNECTED) {
  119.     delay(500);
  120.     Serial.print(".");
  121.   }
  122.   Serial.println("");
  123.   Serial.println("WiFi connected");
  124.  
  125.   // Start the server
  126.   server.begin();
  127.   Serial.println("Server started");
  128.  
  129.   // Print the IP address
  130.   Serial.println(WiFi.localIP());
  131. }
  132.  
  133. void loop() {
  134.   webserver();
  135.  
  136.   if (ledMode != 999) {
  137.  
  138.      switch (ledMode) {
  139.       case  1: all_off(); break;
  140.       case  2: rainbow(); break;
  141.       case  3: rainbowWithGlitter(); break;
  142.       case  4: confetti(); break;
  143.       case  5: sinelon(); break;
  144.       case  6: juggle(); break;
  145.       case  7: bpm(); break;
  146.       }
  147.       }
  148.   show_at_max_brightness_for_power();
  149.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  150. //  FastLED.show();  
  151. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  152.   EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  153.  
  154. } // end of loop *************************************************************************************
  155.  
  156. void webserver() {   /// complete web server /////////////////////////////////////////////////////////
  157.   // Check if a client has connected
  158.   WiFiClient client = server.available();
  159.   if (!client)
  160.   {
  161.     return;
  162.   }
  163.  
  164.   // Wait until the client sends some data
  165.   Serial.println("new client");
  166.   unsigned long ultimeout = millis()+250;
  167.   while(!client.available() && (millis()<ultimeout) )
  168.   {
  169.     delay(1);
  170.   }
  171.   if(millis()>ultimeout)
  172.   {
  173.     Serial.println("client connection time-out!");
  174.     return;
  175.   }
  176.  
  177.   // Read the first line of the request
  178.   String sRequest = client.readStringUntil('\r');
  179.   //Serial.println(sRequest);
  180.   client.flush();
  181.  
  182.   // stop client, if request is empty
  183.   if(sRequest=="")
  184.   {
  185.     Serial.println("empty request! - stopping client");
  186.     client.stop();
  187.     return;
  188.   }
  189.  
  190.   // get path; end of path is either space or ?
  191.   // Syntax is e.g. GET /?pin=MOTOR1STOP HTTP/1.1
  192.   String sPath="",sParam="", sCmd="";
  193.   String sGetstart="GET ";
  194.   int iStart,iEndSpace,iEndQuest;
  195.   iStart = sRequest.indexOf(sGetstart);
  196.   if (iStart>=0)
  197.   {
  198.     iStart+=+sGetstart.length();
  199.     iEndSpace = sRequest.indexOf(" ",iStart);
  200.     iEndQuest = sRequest.indexOf("?",iStart);
  201.    
  202.     // are there parameters?
  203.     if(iEndSpace>0)
  204.     {
  205.       if(iEndQuest>0)
  206.       {
  207.         // there are parameters
  208.         sPath  = sRequest.substring(iStart,iEndQuest);
  209.         sParam = sRequest.substring(iEndQuest,iEndSpace);
  210.       }
  211.       else
  212.       {
  213.         // NO parameters
  214.         sPath  = sRequest.substring(iStart,iEndSpace);
  215.       }
  216.     }
  217.   }
  218.  
  219.   ///////////////////////////////////////////////////////////////////////////////
  220.   // output parameters to serial, you may connect e.g. an Arduino and react on it
  221.   ///////////////////////////////////////////////////////////////////////////////
  222.   if(sParam.length()>0)
  223.   {
  224.     int iEqu=sParam.indexOf("=");
  225.     if(iEqu>=0)
  226.     {
  227.       sCmd = sParam.substring(iEqu+1,sParam.length());
  228.       Serial.println(sCmd);
  229.     }
  230.   }
  231.  
  232.  
  233.   ///////////////////////////
  234.   // format the html response
  235.   ///////////////////////////
  236.   String sResponse,sHeader;
  237.  
  238.   ////////////////////////////
  239.   // 404 for non-matching path
  240.   ////////////////////////////
  241.   if(sPath!="/")
  242.   {
  243.     sResponse="<html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html>";
  244.    
  245.     sHeader  = "HTTP/1.1 404 Not found\r\n";
  246.     sHeader += "Content-Length: ";
  247.     sHeader += sResponse.length();
  248.     sHeader += "\r\n";
  249.     sHeader += "Content-Type: text/html\r\n";
  250.     sHeader += "Connection: close\r\n";
  251.     sHeader += "\r\n";
  252.   }
  253.   ///////////////////////
  254.   // format the html page
  255.   ///////////////////////
  256.   else
  257.   {
  258.     ulReqcount++;
  259.     sResponse  = "<html><head><title>ESP8266 access point for DemoReel100</title></head><body>";
  260.     sResponse += "<font color=\"#FFFFF0\"><body bgcolor=\"#000000\">";  // first is background, second is font color
  261.     sResponse += "<FONT SIZE=-1>";
  262.     sResponse += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">";
  263.     sResponse += "<h1>ESP8266 access point<br>";
  264.     sResponse += " for DemoReel100</h1>";
  265.  
  266. /*  this creates a list with ON / OFF buttons
  267.     // </a>&nbsp is a non-breaking space; moves next character over
  268.     sResponse += "<p>Rainbow &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION1ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION1OFF\"><button>--OFF--</button></a><br>";
  269.     sResponse += "<p>Rainbow Glitter<a href=\"?pin=FUNCTION2ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION2OFF\"><button>--OFF--</button></a><br>";
  270.     sResponse += "<p>Confetti &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION3ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION3OFF\"><button>--OFF--</button></a><br>";
  271.     sResponse += "<p>Sinelon &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION4ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION4OFF\"><button>--OFF--</button></a><br>";
  272.     sResponse += "<p>Juggle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION5ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION5OFF\"><button>--OFF--</button></a></p>";
  273.     sResponse += "<p>BPM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION6ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION6OFF\"><button>--OFF--</button></a></p>";
  274.     sResponse += "<p>Function 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION7ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION7OFF\"><button>--OFF--</button></a></p><br>";
  275. */
  276. //  This is a nice drop down menue
  277.     sResponse += "<FONT SIZE=+1>";
  278.     sResponse += "<form>";
  279.     sResponse += "Select Animation<br>";
  280.     sResponse += "<select name=\"sCmd\" size=\"7\" >";
  281.     sResponse += "<option value=\"FUNCTION1OFF\"selected>All OFF</option>";
  282.     sResponse += "<option value=\"FUNCTION1ON\">Rainbow</option>";
  283.     sResponse += "<option value=\"FUNCTION2ON\">Rainbow Glitter</option>";
  284.     sResponse += "<option value=\"FUNCTION3ON\">Confetti</option>";
  285.     sResponse += "<option value=\"FUNCTION4ON\">Sinelon</option>";
  286.     sResponse += "<option value=\"FUNCTION5ON\">Juggle</option>";
  287.     sResponse += "<option value=\"FUNCTION6ON\">BPM</option><br>";
  288.     sResponse += "</select>";
  289.     sResponse += "<br><br>";
  290.     sResponse += "<input type= submit>";
  291.     sResponse += "</form>";
  292.     sResponse += "<FONT SIZE=-1>";
  293.  
  294.     //////////////////////
  295.     // react on parameters
  296.     //////////////////////
  297.     if (sCmd.length()>0)
  298.     {
  299.       // write received command to html page
  300.       sResponse += "Command: " + sCmd + "<BR>";
  301.      
  302.       // switch GPIO
  303.       if(sCmd.indexOf("FUNCTION1ON")>=0)
  304.       {
  305.         Serial.println("1 ON");
  306.         ledMode = 2;
  307.       }
  308.       else if(sCmd.indexOf("FUNCTION1OFF")>=0)
  309.       {
  310.         Serial.println("1 OFF");
  311.         ledMode = 1;
  312.       }
  313.  
  314.       if(sCmd.indexOf("FUNCTION2ON")>=0)
  315.       {
  316.          Serial.println("2 ON");
  317.         ledMode = 3;
  318.       }
  319.       else if(sCmd.indexOf("FUNCTION2OFF")>=0)
  320.       {
  321.         Serial.println("2 OFF");
  322.         ledMode = 1;
  323.       }
  324.  
  325.       if(sCmd.indexOf("FUNCTION3ON")>=0)
  326.       {
  327.          Serial.println("3 ON");
  328.         ledMode = 4;
  329.  
  330.       }
  331.       else if(sCmd.indexOf("FUNCTION3OFF")>=0)
  332.       {
  333.         Serial.println("3 OFF");
  334.         ledMode = 1;
  335.  
  336.       }
  337.       if(sCmd.indexOf("FUNCTION4ON")>=0)
  338.       {
  339.         Serial.println("4 ON");
  340.         ledMode = 5;
  341.  
  342.       }
  343.       else if(sCmd.indexOf("FUNCTION4OFF")>=0)
  344.       {
  345.         Serial.println("4 OFF");
  346.         ledMode = 1;
  347.  
  348.       }
  349.       if(sCmd.indexOf("FUNCTION5ON")>=0)
  350.       {
  351.          Serial.println("5 ON");
  352.         ledMode = 6;
  353.  
  354.       }
  355.       else if(sCmd.indexOf("FUNCTION5OFF")>=0)
  356.       {
  357.         Serial.println("5 OFF");
  358.         ledMode = 1;
  359.  
  360.       }
  361.  
  362.       if(sCmd.indexOf("FUNCTION6ON")>=0)
  363.       {
  364.          Serial.println("6 ON");
  365.         ledMode = 7;
  366.  
  367.       }
  368.       else if(sCmd.indexOf("FUNCTION6OFF")>=0)
  369.       {
  370.         Serial.println("6 OFF");
  371.         ledMode = 1;
  372.  
  373.       }
  374.       if(sCmd.indexOf("FUNCTION7ON")>=0)
  375.       {
  376.         Serial.println("7 ON");
  377.         ledMode = 8;
  378.  
  379.       }
  380.       else if(sCmd.indexOf("FUNCTION7OFF")>=0)
  381.       {
  382.          Serial.println("7 OFF");
  383.         ledMode = 1;
  384.  
  385.       }
  386.  
  387.     } // end sCmd.length()>0
  388.    
  389.     sResponse += "<FONT SIZE=-2>";
  390.     sResponse += "<BR>clicks on page =";
  391.     sResponse += ulReqcount;
  392.     sResponse += "<BR>";
  393.     sResponse += "Gyro Gearloose 02/2016<BR><BR>";
  394.     sResponse += "<font color=\"#FF0000\">";
  395.     sResponse += "DemoReel 100 by Mark Kriegsman<BR>";
  396.     sResponse += "Webserver by Stefan Thesen<BR>";
  397.     sResponse += "</body></html>";
  398.     sHeader  = "HTTP/1.1 200 OK\r\n";
  399.     sHeader += "Content-Length: ";
  400.     sHeader += sResponse.length();
  401.     sHeader += "\r\n";
  402.     sHeader += "Content-Type: text/html\r\n";
  403.     sHeader += "Connection: close\r\n";
  404.     sHeader += "\r\n";
  405.   }
  406.  
  407.   // Send the response to the client
  408.   client.print(sHeader);
  409.   client.print(sResponse);
  410.  
  411.  
  412.   // and stop the client
  413.   client.stop();
  414.   Serial.println("Client disonnected");  
  415.   }
  416. /// END of complete web server //////////////////////////////////////////////////////////////////
  417.  
  418. // LED animations ###############################################################################
  419. void all_off() {
  420.   fill_solid(leds, NUM_LEDS, CRGB::Black);
  421.   show_at_max_brightness_for_power();
  422.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);  
  423.   //FastLED.show();
  424.   //FastLED.delay(1000/FRAMES_PER_SECOND);
  425. }
  426.  
  427. void rainbow()
  428. {
  429.   // FastLED's built-in rainbow generator
  430.   EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  431.   fill_rainbow( leds, NUM_LEDS, gHue, 7);
  432.   show_at_max_brightness_for_power();
  433.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  434. //  FastLED.show();  
  435. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  436. }
  437.  
  438. void rainbowWithGlitter()
  439. {
  440.   // built-in FastLED rainbow, plus some random sparkly glitter
  441.   rainbow();
  442.   addGlitter(80);
  443. }
  444.  
  445. void addGlitter( fract8 chanceOfGlitter)
  446. {
  447.   if( random8() < chanceOfGlitter) {
  448.     leds[ random16(NUM_LEDS) ] += CRGB::White;
  449.   }
  450. }
  451.  
  452. void confetti()
  453. {
  454.   // random colored speckles that blink in and fade smoothly
  455.   fadeToBlackBy( leds, NUM_LEDS, 10);
  456.   int pos = random16(NUM_LEDS);
  457.   leds[pos] += CHSV( gHue + random8(64), 200, 255);
  458.   show_at_max_brightness_for_power();
  459.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  460. //  FastLED.show();  
  461. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  462. }
  463.  
  464. void sinelon()
  465. {
  466.   // a colored dot sweeping back and forth, with fading trails
  467.   fadeToBlackBy( leds, NUM_LEDS, 20);
  468.   int pos = beatsin16(13,0,NUM_LEDS);
  469.   leds[pos] += CHSV( gHue, 255, 192);
  470.   show_at_max_brightness_for_power();
  471.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  472. //  FastLED.show();  
  473. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  474. }
  475.  
  476. void bpm()
  477. {
  478.   // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
  479.   uint8_t BeatsPerMinute = 62;
  480.   CRGBPalette16 palette = PartyColors_p;
  481.   uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  482.   for( int i = 0; i < NUM_LEDS; i++) { //9948
  483.     leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10));
  484.   }
  485.   show_at_max_brightness_for_power();
  486.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  487. //  FastLED.show();  
  488. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  489. }
  490.  
  491. void juggle() {
  492.   // eight colored dots, weaving in and out of sync with each other
  493.   fadeToBlackBy( leds, NUM_LEDS, 20);
  494.   byte dothue = 0;
  495.   for( int i = 0; i < 8; i++) {
  496.     leds[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255);
  497.     dothue += 32;
  498.   }
  499.   show_at_max_brightness_for_power();
  500.   delay_at_max_brightness_for_power(1000/FRAMES_PER_SECOND);
  501. //  FastLED.show();  
  502. //  FastLED.delay(1000/FRAMES_PER_SECOND);
  503. }
  504. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  505. /*  HTML code to try changes on w3schools.com  http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_a_href
  506.  
  507. <!DOCTYPE html>
  508. <html>
  509. <font color =   #fffff0><body bgcolor=\"#000000\">   //FFFFFF0 has to be written in fffff0
  510. <FONT SIZE=-1>
  511. <h1>ESP8266 control <br>
  512. for DemoReel100</h1>
  513. <body>
  514.  
  515. <p>Rainbow &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION1ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION1OFF\"><button>--OFF--</button></a><br>
  516.  
  517. <p>Rainbow Glitter<a href=\"?pin=FUNCTION2ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION2OFF\"><button>--OFF--</button></a><br>
  518.  
  519. <p>Confetti &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION3ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION3OFF\"><button>--OFF--</button></a><br>
  520.  
  521. <p>Sinelon &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION4ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION4OFF\"><button>--OFF--</button></a><br>
  522.  
  523. <p>Juggle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION5ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION5OFF\"><button>--OFF--</button></a></p>
  524.  
  525. <p>BPM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION6ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION6OFF\"><button>--OFF--</button></a></p>
  526.  
  527. <p>Function 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"?pin=FUNCTION7ON\"><button>--ON--</button></a>&nbsp;<a href=\"?pin=FUNCTION7OFF\"><button>--OFF--</button></a></p><br>
  528.  
  529. <FONT SIZE=+1>
  530. <form>
  531. <p>Select Animation</p>
  532. <select name=\"sCmd\" size=\"7\" >
  533. <option value=\"FUNCTION1OFF\"selected>All OFF</option>
  534. <option value=\"FUNCTION1ON\">Rainbow</option>
  535. <option value=\"FUNCTION2ON\">Rainbow Glitter</option>
  536. <option value=\"FUNCTION3ON\">Confetti</option>
  537. <option value=\"FUNCTION4ON\">Sinelon</option>
  538. <option value=\"FUNCTION5ON\">Juggle</option>
  539. <option value=\"FUNCTION6ON\">BPM</option><br>
  540. </select>
  541. <br><br>
  542. <input type= submit>
  543. </form>
  544. <FONT SIZE=-1>
  545.  
  546. <FONT SIZE=-2>
  547. <BR>clicks on page =
  548.  - connections to page =
  549. <BR>
  550. Gyro Gearloose 02/2016<BR><BR>
  551. <font color= #ff0000>
  552. DemoReel 100 by Mark Kriegsman<BR>
  553. Webserver by Stefan Thesen<BR>
  554.  
  555. </body>
  556. </html>
  557.  
  558.  
  559. */
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×