FastLED 3.10.8
Loading...
Searching...
No Matches
pir.cpp.hpp
Go to the documentation of this file.
1#ifndef FASTLED_INTERNAL
2#define FASTLED_INTERNAL
3#endif
4
5#include "fl/system/fastled.h"
6
7#include "fl/system/fastpin.h"
8#include "fl/stl/strstream.h"
9#include "fl/log/log.h"
10#include "fl/stl/assert.h"
11#include "fl/stl/singleton.h"
12#include "fl/sensors/pir.h"
13#include "fl/stl/noexcept.h"
14
15namespace fl {
16
17namespace {
18// Auto-naming counter for unnamed PIR buttons. Behind Singleton<T> so
19// --gc-sections can drop the storage with the accessor when a sketch never
20// constructs a PIR (FastLED#3488).
22 int value = 0;
23};
24
25string getButtonName(const char *button_name) FL_NO_EXCEPT {
26 if (button_name) {
27 return string(button_name);
28 }
29 int count = fl::Singleton<PirNameCounter>::instance().value++;
30 if (count == 0) {
31 return string("PIR");
32 }
33 sstream s;
34 s << "PirLowLevel " << fl::Singleton<PirNameCounter>::instance().value++;
35 return s.str();
36}
37} // namespace
38
42
44 return mPin.high();
45}
46
47
48Pir::Pir(int pin, u32 latchMs, u32 risingTime,
49 u32 fallingTime, const char* button_name)
50 FL_NO_EXCEPT : mPir(pin), mRamp(risingTime, latchMs, fallingTime), mButton(getButtonName(button_name).c_str()) {
51 mButton.onChanged([this](UIButton&) {
52 this->mRamp.trigger(fl::millis());
53 });
54}
55
57 bool currentState = mPir.detect();
58 if (currentState && !mLastState) {
59 // Use smart retrigger to avoid resetting brightness when already active
60 mRamp.trigger(now);
61 }
62 mLastState = currentState;
63 return mRamp.isActive(now);
64}
65
67 // ensure detect() logic runs so we trigger on edges
68 detect(now);
69 return mRamp.update8(now);
70}
71
72} // namespace fl
PirLowLevel mPir
Definition pir.h:65
UIButton mButton
Definition pir.h:68
TimeRamp mRamp
Definition pir.h:66
Pir(int pin, u32 latchMs=5000, u32 risingTime=1000, u32 fallingTime=1000, const char *button_name=nullptr) FL_NO_EXCEPT
Definition pir.cpp.hpp:48
bool mLastState
Definition pir.h:67
u8 transition(u32 now) FL_NO_EXCEPT
Returns a 0–255 ramp value: • ramps 0→255 over risingTime • holds 255 until latchMs–fallingTime • ram...
Definition pir.cpp.hpp:66
bool detect(u32 now) FL_NO_EXCEPT
Returns true if the PIR is “latched on” (within latchMs of last trigger).
Definition pir.cpp.hpp:56
DigitalPin mPin
Definition pir.h:24
bool detect() FL_NO_EXCEPT
Definition pir.cpp.hpp:43
PirLowLevel(int pin) FL_NO_EXCEPT
Definition pir.cpp.hpp:39
static T & instance() FL_NO_EXCEPT
Definition singleton.h:41
string str() const FL_NO_EXCEPT
Definition strstream.h:43
Internal FastLED header for implementation files.
Centralized logging categories for FastLED hardware interfaces and subsystems.
string getButtonName(const char *button_name) FL_NO_EXCEPT
Definition pir.cpp.hpp:25
unsigned char u8
Definition stdint.h:131
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
fl::u32 millis() FL_NO_EXCEPT
Universal millisecond timer - returns milliseconds since system startup.
Base definition for an LED controller.