Loom 4 v4.5
Arduino library for Internet of Things Rapid Prototyping in environmental sensing
Loading...
Searching...
No Matches
Loom_Analog.h
1#pragma once
2
3#include <vector>
4#include <map>
5
6#include "Module.h"
7#include "Loom_Manager.h"
8
9/* Contain all the information regarding the analog pin that we want to use*/
11 int pinNumber;
12 const char* name;
13 float analog;
14 float analog_mv;
15
16 /* Construct a new analog mapping */
17 AnalogMapping(int pinNumber, const char* name, float analog, float analog_mv){
18 this->pinNumber = pinNumber;
19 this->name = name;
20 this->analog = analog;
21 this->analog_mv = analog_mv;
22 }
23};
24
30class Loom_Analog : public Module{
31 protected:
32 /* These aren't used by Analog */
33 void power_up() override {};
34 void power_down() override {};
35 void initialize() override {};
36
37
38 public:
39
40 void measure() override;
41 void package() override;
42
49 template<typename T, typename... Args>
50 Loom_Analog(Manager& man, T firstPin , Args... additionalPins) : Module("Analog"){
51 get_variadic_parameters(firstPin, additionalPins...);
52 pinMappings.push_back(new AnalogMapping(A7, "Vbat", getBatteryVoltage(), getBatteryVoltage() * 1000));
53 manInst = &man;
54
55 // Set 12-bit analog read resolution
56 analogReadResolution(12);
57
58 // Register the module with the manager
59 manInst->registerModule(this);
60 };
61
67 template<typename T>
68 Loom_Analog(Manager& man, T firstPin) : Module("Analog"){
69 pinMappings.push_back(new AnalogMapping(firstPin, pinNumberToName(firstPin), 0, 0));
70 pinMappings.push_back(new AnalogMapping(A7, "Vbat", getBatteryVoltage(), getBatteryVoltage() * 1000));
71 manInst = &man;
72
73 // Set 12-bit analog read resolution
74 analogReadResolution(12);
75
76 // Register the module with the manager
77 manInst->registerModule(this);
78 };
79
84 Loom_Analog(Manager& man) : Module("Analog"){
85 manInst = &man;
86 pinMappings.push_back(new AnalogMapping(A7, "Vbat", getBatteryVoltage(), getBatteryVoltage() * 1000));
87
88 // Set 12-bit analog read resolution
89 analogReadResolution(12);
90
91 // Register the module with the manager
92 manInst->registerModule(this);
93 };
94
98 float getBatteryVoltage();
99
104 float getMV(int pin);
105
110 float getAnalog(int pin);
111
112 private:
113
119 template<typename T>
120 T get_variadic_parameters(T v) {
121 /* Push the pin number to vector */
122 pinMappings.push_back(new AnalogMapping(v, pinNumberToName(v), 0, 0));
123 return v;
124 };
125
126 template<typename T, typename... Args>
127 T get_variadic_parameters(T first, Args... args) {
128 pinMappings.push_back(new AnalogMapping(first, pinNumberToName(first), 0, 0));
129 return get_variadic_parameters(args...);
130 };
131
132 float analogToMV(int analog); // Convert the analog voltage to mV
133 char* pinNumberToName(int pin); // Convert the given to a name with the style "A0"
134
135 Manager* manInst; // Instance of the manager
136 std::vector<AnalogMapping*> pinMappings; // Contains a struct for each pin we are monitoring
137
138
139};
Definition: Loom_Analog.h:30
float getAnalog(int pin)
Definition: Loom_Analog.cpp:82
Loom_Analog(Manager &man)
Definition: Loom_Analog.h:84
float getBatteryVoltage()
Definition: Loom_Analog.cpp:45
Loom_Analog(Manager &man, T firstPin)
Definition: Loom_Analog.h:68
Loom_Analog(Manager &man, T firstPin, Args... additionalPins)
Definition: Loom_Analog.h:50
float getMV(int pin)
Definition: Loom_Analog.cpp:72
Definition: Loom_Manager.h:18
void registerModule(Module *module)
Definition: Loom_Manager.cpp:13
Definition: Module.h:30
Definition: Loom_Analog.h:10