FastLED 3.9.15
Loading...
Searching...
No Matches
digital_pin.cpp
Go to the documentation of this file.
1
2#include <stdint.h>
3
4#include "fl/ui.h"
5#include "fl/ptr.h"
6
7#include "fl/namespace.h"
8#include "digital_pin.h"
9
10
11
12#if !defined(USE_ARDUINO) && __has_include(<Arduino.h>)
13#define USE_ARDUINO 1
14#else
15#define USE_ARDUINO 0
16#endif
17
18
19#if USE_ARDUINO
20#include <Arduino.h> // ok include
21#else
22// Fallback
23#define FASTLED_INTERNAL
24#include "FastLED.h"
25#include "fastpin.h"
26#endif
27
28
29namespace fl {
30
31
32#if USE_ARDUINO
33class DigitalPinImpl : public Referent {
34 public:
35 DigitalPinImpl(int DigitalPin) : mDigitalPin(DigitalPin) {}
36 ~DigitalPinImpl() = default;
37
38 void setPinMode(DigitalPin::Mode mode) {
39 switch (mode) {
41 ::pinMode(mDigitalPin, INPUT);
42 break;
44 ::pinMode(mDigitalPin, OUTPUT);
45 break;
47 ::pinMode(mDigitalPin, INPUT_PULLUP);
48 break;
49 }
50 }
51 bool high() { return HIGH == ::digitalRead(mDigitalPin); }
52 void write(bool value) { ::digitalWrite(mDigitalPin, value ? HIGH : LOW); }
53
54 private:
55 int mDigitalPin;
56};
57
58#else
59class DigitalPinImpl : public Referent {
60 public:
61 DigitalPinImpl(int pin) : mPin(pin) {}
62 ~DigitalPinImpl() = default;
63
65 switch (mode) {
67 mPin.setInput();
68 break;
70 mPin.setOutput();
71 break;
73 mPin.setInputPullup();
74 break;
75 }
76 }
77
78 bool high() { return mPin.hival(); }
79 void write(bool value) { value ? mPin.hi(): mPin.lo(); }
80 // define pin
82};
83#endif
84
85
87 mImpl = DigitalPinImplPtr::New(DigitalPin);
88}
89DigitalPin::~DigitalPin() = default;
90DigitalPin::DigitalPin(const DigitalPin &other) = default;
91
92DigitalPin& DigitalPin::operator=(const DigitalPin &other) = default;
93
95 mImpl->setPinMode(mode);
96}
97
98bool DigitalPin::high() const {
99 return mImpl->high();
100}
101
102void DigitalPin::write(bool is_high) {
103 mImpl->write(is_high);
104}
105
106} // namespace fl
central include file for FastLED, defines the CFastLED class/object
Naive fallback solution for low level pin access.
Definition fastpin.h:49
void write(bool is_high)
void setPinMode(Mode mode)
DigitalPin & operator=(const DigitalPin &other)
DigitalPinImplPtr mImpl
Definition digital_pin.h:36
bool high() const
DigitalPin(int pin)
~DigitalPinImpl()=default
void setPinMode(DigitalPin::Mode mode)
void write(bool value)
Referent()
Definition ptr.cpp:7
Class base definitions for defining fast pin access.
Implements the FastLED namespace macros.
Implements a simple red square effect for 2D LED grids.
Definition crgb.h:16