micro-ELC
RelaysDriverBasic.h
Go to the documentation of this file.
1#ifndef RELAYS_DRIVER_BASIC_H
2#define RELAYS_DRIVER_BASIC_H
3#include "RelaysDriver.h"
4#include <Arduino.h>
11template <uint8_t N>
13 static_assert(N <= 16, "relaysDriverBasic only supports 16 or fewer relays."); // enforce number of relays
14
15protected:
16 uint8_t pin[N];
17 bool active;
18
19public:
25 template <typename T, size_t n>
26 RelaysDriverBasic(bool _active, const T (&pins)[n])
27 {
28 // https://stackoverflow.com/a/38679907
29 static_assert(n == N, "error: please provide the correct number of pins");
30 for (int pinNumber = 0; pinNumber < N; pinNumber++) {
31 pin[pinNumber] = pins[pinNumber];
32 }
33
34 active = _active;
35 }
36
37 void begin()
38 {
39 for (int i = 0; i < N; i++) {
40 pinMode(pin[i], OUTPUT);
41 digitalWrite(pin[i], !active); // deactivate
42 }
43 }
44 void set(uint16_t bits)
45 {
46 for (byte relay = 0; relay < N; relay++) {
47 bool setState = ((bits >> (relay)) & 1);
48 write(relay, setState);
49 }
50 }
51
52protected:
58 void write(byte relay, bool setState)
59 {
60 digitalWrite(pin[relay], setState == active);
61 }
62};
63#endif
This class controls an array of relays in a simple way.
Definition: RelaysDriverBasic.h:12
void begin()
this function should be called on startup. It sets up pinmodes.
Definition: RelaysDriverBasic.h:37
RelaysDriverBasic(bool _active, const T(&pins)[n])
constructor.
Definition: RelaysDriverBasic.h:26
uint8_t pin[N]
Definition: RelaysDriverBasic.h:13
bool active
Definition: RelaysDriverBasic.h:17
void write(byte relay, bool setState)
set a specific relay to a state, just to keep the code that actually drives a relay separate
Definition: RelaysDriverBasic.h:58
void set(uint16_t bits)
activate relays corresponding to a bit that's 1.
Definition: RelaysDriverBasic.h:44
This class defines an interface for any class that can control an array of relays.
Definition: RelaysDriver.h:8