FastLED 3.9.15
Loading...
Searching...
No Matches
pir.cpp
Go to the documentation of this file.
1#define FASTLED_INTERNAL
2#include "FastLED.h"
3
4#include "fastpin.h"
5#include "fl/strstream.h"
6#include "fl/warn.h"
7#include "fl/assert.h"
8#include "sensors/pir.h"
9
10namespace fl {
11
12namespace {
13int g_counter = 0;
14Str getButtonName(const char *button_name) {
15 if (button_name) {
16 return Str(button_name);
17 }
18 int count = g_counter++;
19 if (count == 0) {
20 return Str("PIR");
21 }
22 StrStream s;
23 s << "Pir " << g_counter++;
24 return s.str();
25}
26} // namespace
27
28Pir::Pir(int pin): mPin(pin) {
29 mPin.setPinMode(DigitalPin::kInput);
30}
31
33 return mPin.high();
34}
35
36
37PirAdvanced::PirAdvanced(int pin, uint32_t latchMs, uint32_t risingTime,
38 uint32_t fallingTime, const char* button_name)
39 : mPir(pin), mRamp(risingTime, latchMs, fallingTime), mButton(getButtonName(button_name).c_str()) {
40 mButton.onChanged([this]() {
41 this->mRamp.trigger(millis());
42 });
43}
44
45bool PirAdvanced::detect(uint32_t now) {
46 bool currentState = mPir.detect();
47 if (currentState && !mLastState) {
48 mRamp.trigger(now);
49 }
50 mLastState = currentState;
51 return mRamp.isActive(now);
52}
53
54uint8_t PirAdvanced::transition(uint32_t now) {
55 // ensure detect() logic runs so we trigger on edges
56 detect(now);
57 return mRamp.update8(now);
58}
59
60} // namespace fl
central include file for FastLED, defines the CFastLED class/object
bool detect()
Definition pir.cpp:32
DigitalPin mPin
Definition pir.h:27
Pir(int pin)
Definition pir.cpp:28
bool mLastState
Definition pir.h:70
TimeRamp mRamp
Definition pir.h:69
uint8_t transition(uint32_t now)
Returns a 0–255 ramp value: • ramps 0→255 over risingTime • holds 255 until latchMs–fallingTime • ram...
Definition pir.cpp:54
UIButton mButton
Definition pir.h:71
bool detect(uint32_t now)
Returns true if the PIR is “latched on” (within latchMs of last trigger).
Definition pir.cpp:45
PirAdvanced(int pin, uint32_t latchMs=5000, uint32_t risingTime=1000, uint32_t fallingTime=1000, const char *button_name=nullptr)
Definition pir.cpp:37
Definition str.h:388
const Str & str() const
Definition strstream.h:49
Class base definitions for defining fast pin access.
Str getButtonName(const char *button_name)
Definition pir.cpp:14
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16