#include #include String server_url = "http://192.168.43.172:8080/api/roomlog"; int pir_pin = D6; unsigned long lastMovmentMillis; unsigned long timeGapForRelease = 1000 * 10; String sendData(boolean *success); #include // How many leds in your strip? #define NUM_LEDS 24 #define DATA_PIN 4 // Define the array of leds CRGB leds[NUM_LEDS]; // constants won't change. They're used here to set pin numbers: const int buttonPin = 5; // the number of the pushbutton pin const int ledPin = LED_BUILTIN; // the number of the LED pin // Variables will change: int ledState = LOW; // the current state of the output pin int buttonState = HIGH; // the current reading from the input pin int lastButtonState = HIGH; // the previous reading from the input pin // the following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers void setup() { Serial.begin(115200); Serial.println("System started"); pinMode(buttonPin, INPUT_PULLUP); pinMode(ledPin, OUTPUT); pinMode(pir_pin, INPUT); WiFi.begin("SSID", "PASSWORD"); Serial.print("Waiting for connection"); while (WiFi.status() != WL_CONNECTED) { //Wait for the WiFI connection completion delay(500); Serial.print("."); } Serial.println("Connected"); delay(1000); FastLED.addLeds(leds, NUM_LEDS); // GRB ordering is assumed // set initial LED state SetLeds(); } void loop() { // read the state of the switch into a local variable: int reading = digitalRead(buttonPin); // check to see if you just pressed the button // (i.e. the input went from LOW to HIGH), and you've waited long enough // since the last press to ignore any noise: // If the switch changed, due to noise or pressing: if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer than the debounce // delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is LOW if (buttonState == LOW) { Serial.println("FLIP"); ledState = !ledState; lastMovmentMillis = millis(); SetLeds(); } } } // check pir if (digitalRead(pir_pin)) { lastMovmentMillis = millis(); } // check free room mode if (ledState && lastMovmentMillis + timeGapForRelease < millis()) { ledState = !ledState; SetLeds(); } // save the reading. Next time through the loop, it'll be the lastButtonState: lastButtonState = reading; } void SetLeds() { // set the LED: digitalWrite(ledPin, ledState); // set the RGB LEDS for (byte i = 0; i < NUM_LEDS; i++) { if (ledState) { leds[i] = CRGB::Red; } else { leds[i] = CRGB::Green; } delay(50); FastLED.show(); } //ens for boolean isSuccess; String payLoad = sendData(&isSuccess); if (isSuccess) { Serial.println("Success !"); } else { Serial.println("Fail:"); Serial.println(payLoad); } } String sendData(boolean *success) { HTTPClient http; //Declare object of class HTTPClient http.begin(server_url); http.addHeader("Content-Type", "application/json"); int httpCode = http.POST("{\"state\":" + String(ledState) + "}"); //Send the request String payload = http.getString(); //Get the response payload http.end(); //Close connection if (httpCode == 200) *success = true; else *success = false; return payload; }