Skip to content

Instantly share code, notes, and snippets.

@OSDDQD

OSDDQD/seg.ino Secret

Created April 19, 2021 09:56
Show Gist options
  • Save OSDDQD/575b3270baeeceda3c9d058701cda1b7 to your computer and use it in GitHub Desktop.
Save OSDDQD/575b3270baeeceda3c9d058701cda1b7 to your computer and use it in GitHub Desktop.
#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