-
-
Save OSDDQD/575b3270baeeceda3c9d058701cda1b7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define FASTLED_ALLOW_INTERRUPTS 0 | |
//#include <ESP8266WiFi.h> | |
//#include <WiFiUdp.h> | |
#include <ESP8266httpUpdate.h> | |
#include "FastLED.h" | |
#include "FlexTimer.h" | |
#include "FastFX.h" | |
#include "FFXCoreEffects.h" | |
#define PIR_PIN 14 | |
#define LED_PIN 6 | |
#define COB_PIN 2 | |
#define NUM_LEDS 500 | |
#define LEVELS 6 | |
#define IP 40 // адрес станции, уникальный для каждого | |
#define NEXT_IP 41 | |
#define PREV_IP 45 | |
#define WIFI_SSID "LEDSTATE" | |
#define WIFI_PASS "123456789" | |
#define UDP_PORT 4210 | |
// UDP | |
//WiFiUDP UDP; | |
char packet[255]; | |
char reply[] = "Packet received!"; | |
// Set your Static IP address | |
//IPAddress local_IP(192, 168, 1, IP); | |
//// Set your Gateway IP address | |
//IPAddress gateway(192, 168, 1, 1); | |
// | |
//IPAddress subnet(255, 255, 255, 0); | |
int level = 1; | |
int brightness = 0; | |
uint16_t PIRState = LOW; | |
boolean cooldown = false; | |
boolean endAnimation = false; | |
// This is an array of leds. One item for each led in your strip. | |
CRGB leds[NUM_LEDS]; | |
FFXController fxctrlr = FFXController(); | |
StepTimer PIRTimer( 5000 ); | |
StepTimer CoolDownTimer( 10000 ); | |
class FirstLightFX : public FFXBase { | |
public: | |
FirstLightFX(uint16_t initSize) : FFXBase( initSize,/* interval */ 15UL, | |
/* min interval */ 15UL, | |
/* max interval */ 30UL ) { | |
getFXColor().setColorMode( FFXColor::FFXColorMode::singleCRGB ); | |
getFXColor().setCRGB( CRGB::White ); | |
} | |
virtual void initLeds( CRGB *bufLeds ) override { | |
fill_solid( bufLeds, numLeds, CRGB::Black ); | |
} | |
virtual void writeNextFrame( CRGB *bufLeds ) override { | |
Serial.print("CYCLE: "); | |
Serial.println(getCurrCycle()); | |
Serial.print("PHASE: "); | |
Serial.println(getMovementPhase()); | |
fadeToBlackBy( bufLeds, numLeds, 25 ); | |
if(!endAnimation) { | |
bufLeds[getMovementPhase() - 1] = currColor.getCRGB(); | |
} | |
if (getMovementPhase() > numLeds) { | |
endAnimation = true; | |
} | |
} | |
}; | |
void setup() { | |
// sanity check delay - allows reprogramming if accidently blowing power w/leds | |
delay(1000); | |
// initialize serial communication at 115200 | |
Serial.begin(115200); | |
// if (!WiFi.config(local_IP, gateway, subnet)) { | |
// Serial.println("STA Failed to configure"); | |
// } | |
// | |
// // Begin WiFi | |
// WiFi.begin(WIFI_SSID, WIFI_PASS); | |
// | |
// // Connecting to WiFi... | |
// Serial.print("Connecting to "); | |
// Serial.print(WIFI_SSID); | |
// // Loop continuously while WiFi is not connected | |
// while (WiFi.status() != WL_CONNECTED) | |
// { | |
// delay(100); | |
// Serial.print("."); | |
// } | |
// | |
// // Connected to WiFi | |
// Serial.println(); | |
// Serial.print("Connected! IP address: "); | |
// Serial.println(WiFi.localIP()); | |
// | |
// // Begin listening to UDP port | |
// UDP.begin(UDP_PORT); | |
// Serial.print("Listening on UDP port "); | |
// Serial.println(UDP_PORT); | |
Serial.println("DEBUG LINE PRE COB"); | |
// COB Output | |
pinMode(COB_PIN, OUTPUT); // define the COB pin as output pin | |
analogWriteRange(255); | |
analogWriteFreq(80000); | |
Serial.println("DEBUG LINE PRE FASTLED"); | |
// pinMode(LED_PIN, OUTPUT); | |
FastLED.addLeds<WS2811, LED_PIN, RBG>(leds, NUM_LEDS); | |
FastLED.clear(); | |
Serial.println("DEBUG LINE"); | |
fxctrlr.initialize( new FFXFastLEDPixelController( leds, NUM_LEDS ) ); | |
fxctrlr.getPrimarySegment()->setFX( new FirstLightFX( NUM_LEDS ) ); | |
fxctrlr.getPrimarySegment()->setBrightness(200); | |
// fxctrlr.getPrimarySegment()->getFrameView()->setCrossFade(false); | |
fxctrlr.getPrimarySegment()->getFX()->setInterval( 5 ); | |
fxctrlr.getPrimarySegment()->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
// fxctrlr.getPrimarySegment()->getFX()->getFXColor().setColorMode( FFXColor::FFXColorMode::palette16 ); | |
// fxctrlr.getPrimarySegment()->getFX()->getFXColor().setPalette( NamedPalettes::getInstance()["multi"] ); | |
// fxctrlr.getPrimarySegment()->getFX()->getFXColor().setPaletteRange( 6 ); | |
fxctrlr.getPrimarySegment()->getFX()->getFXColor().setColorMode( FFXColor::FFXColorMode::singleCRGB ); | |
fxctrlr.getPrimarySegment()->getFX()->getFXColor().setCRGB( CRGB::Black ); | |
// Setup segments... | |
FFXSegment *seg; | |
seg = fxctrlr.addSegment( "RAY_1", 0, 32 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY__1_B", 33, 65 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_2", 66, 118 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_2_B", 119, 171 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_3", 171, 200 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_3_B", 201, 230 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_4", 231, 274 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_4_B", 275, 315 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_5", 316, 365 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_5_B", 366, 415 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_6", 416, 445 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_FORWARD ); | |
seg->setOpacity(255); | |
seg = fxctrlr.addSegment( "RAY_6_B", 446, 475 ); | |
seg->setFX( new FirstLightFX( seg->getLength() ) ); | |
seg->getFX()->getFXColor().setCRGB( CRGB::Aqua ); // для дебага, после подсчётов изменить на White | |
seg->getFX()->setMovement( FFXBase::MovementType::MVT_BACKWARD ); | |
seg->setOpacity(255); | |
pinMode(PIR_PIN, INPUT); | |
digitalWrite(PIR_PIN, LOW); | |
PIRTimer.start(); | |
} | |
void loop() { | |
PIRRead(); | |
fxctrlr.update(); | |
// Serial.println(PIRState); | |
// If packet received... | |
// int packetSize = UDP.parsePacket(); | |
// if (packetSize) { | |
// Serial.print("Received packet! Size: "); | |
// Serial.println(packetSize); | |
// | |
// int len = UDP.read(packet, 255); | |
// if (len > 0) | |
// { | |
// packet[len] = '\0'; | |
// } | |
// Serial.print("Packet received: "); | |
// Serial.println(packet); | |
// | |
// // Send return packet | |
// UDP.beginPacket(UDP.remoteIP(), UDP.remotePort()); | |
// UDP.write(reply); | |
// UDP.endPacket(); | |
// } | |
} | |
void cobLight() | |
{ | |
// we have just turned on | |
analogWrite(COB_PIN, 255); | |
for (int i = 255; i >= 0; i = i - 1) { | |
Serial.print("COB BRIGHT: "); | |
Serial.println(i); | |
analogWrite(COB_PIN, i); | |
delay(5); | |
} | |
} | |
void PIRRead() { | |
if (PIRTimer.isUp()) { | |
PIRAction(); | |
PIRTimer.step(); | |
} | |
} | |
void PIRAction() { | |
PIRsetValue(digitalRead(PIR_PIN)); | |
} | |
void PIRsetValue( uint16_t newPIRStateValue ) { | |
Serial.print("PIR VALUE: "); | |
Serial.println(newPIRStateValue); | |
if (newPIRStateValue != PIRState) { | |
PIRState = newPIRStateValue; | |
} | |
if (PIRState == HIGH) { | |
fxctrlr.getPrimarySegment()->getFX()->setInterval( 5 * level ); | |
fxctrlr.getPrimarySegment()->setBrightness(brightness); | |
if (level >= LEVELS) { | |
// cobLight(); | |
level = 1; | |
CoolDownTimer.start(); | |
} | |
if (CoolDownTimer.isUp()) { | |
if (level < LEVELS) { | |
level++; | |
brightness = (180 / LEVELS) * level; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment