mirror of
https://gitlab.com/wirelos/sprocket-plugin-gpio.git
synced 2025-12-14 13:26:48 +01:00
add digital input plugin
This commit is contained in:
@@ -7,6 +7,7 @@ struct GpioConfig
|
|||||||
int threshold;
|
int threshold;
|
||||||
int updateInterval;
|
int updateInterval;
|
||||||
const char *topic;
|
const char *topic;
|
||||||
|
int pinMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "Sprocket.h"
|
#include "Sprocket.h"
|
||||||
#include "inputs/rotary/RotaryPlugin.h"
|
#include "inputs/rotary/RotaryPlugin.h"
|
||||||
#include "inputs/analog/AnalogInputPlugin.h"
|
#include "inputs/analog/AnalogInputPlugin.h"
|
||||||
|
#include "inputs/digital/DigitalInputPlugin.h"
|
||||||
|
|
||||||
Sprocket *sprocket;
|
Sprocket *sprocket;
|
||||||
RotaryPlugin *r1;
|
RotaryPlugin *r1;
|
||||||
@@ -22,6 +23,14 @@ void addAnalogInput(Sprocket* s, int pin, const char* topic)
|
|||||||
}, topic, _1));
|
}, topic, _1));
|
||||||
s->addPlugin(new AnalogInputPlugin({pin, POT_THRESHOLD, POT_POLL_INTERVAL, topic}));
|
s->addPlugin(new AnalogInputPlugin({pin, POT_THRESHOLD, POT_POLL_INTERVAL, topic}));
|
||||||
}
|
}
|
||||||
|
void addDigitalInput(Sprocket* s, int pin, const char* topic)
|
||||||
|
{
|
||||||
|
s->subscribe(topic, bind([](String label, String val){
|
||||||
|
PRINT_MSG(Serial, label.c_str(), val.c_str());
|
||||||
|
}, topic, _1));
|
||||||
|
s->addPlugin(new DigitalInputPlugin({pin, POT_THRESHOLD, POT_POLL_INTERVAL, topic, INPUT}));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
@@ -33,6 +42,7 @@ void setup()
|
|||||||
addAnalogInput(sprocket, 37, "pot2");
|
addAnalogInput(sprocket, 37, "pot2");
|
||||||
addAnalogInput(sprocket, 38, "pot3");
|
addAnalogInput(sprocket, 38, "pot3");
|
||||||
addAnalogInput(sprocket, 39, "pot4");
|
addAnalogInput(sprocket, 39, "pot4");
|
||||||
|
addDigitalInput(sprocket, 21, "btn");
|
||||||
sprocket->activate();
|
sprocket->activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
27
src/inputs/digital/DigitalInputPlugin.cpp
Normal file
27
src/inputs/digital/DigitalInputPlugin.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#include "DigitalInputPlugin.h"
|
||||||
|
|
||||||
|
DigitalInputPlugin::DigitalInputPlugin(GpioConfig cfg)
|
||||||
|
{
|
||||||
|
config = cfg;
|
||||||
|
if (config.pinMode)
|
||||||
|
{
|
||||||
|
pinMode(config.pin, config.pinMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void DigitalInputPlugin::activate(Scheduler *userScheduler)
|
||||||
|
{
|
||||||
|
inputTask.set(TASK_MILLISECOND * config.updateInterval, TASK_FOREVER, std::bind(&DigitalInputPlugin::checkInput, this));
|
||||||
|
userScheduler->addTask(inputTask);
|
||||||
|
inputTask.enable();
|
||||||
|
PRINT_MSG(Serial, "PLUGIN", "DigitalInputPlugin activated");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalInputPlugin::checkInput()
|
||||||
|
{
|
||||||
|
int newVal = digitalRead(config.pin);
|
||||||
|
if (newVal != currentVal)
|
||||||
|
{
|
||||||
|
publish(config.topic, String(newVal));
|
||||||
|
currentVal = newVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/inputs/digital/DigitalInputPlugin.h
Normal file
29
src/inputs/digital/DigitalInputPlugin.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef __DIGITAL_INPUT__PLUGIN_H__
|
||||||
|
#define __DIGITAL_INPUT__PLUGIN_H__
|
||||||
|
|
||||||
|
#define _TASK_SLEEP_ON_IDLE_RUN
|
||||||
|
#define _TASK_STD_FUNCTION
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <vector>
|
||||||
|
#include <FS.h>
|
||||||
|
#include <TaskSchedulerDeclarations.h>
|
||||||
|
#include <Plugin.h>
|
||||||
|
#include <utils/print.h>
|
||||||
|
#include <utils/misc.h>
|
||||||
|
#include <GpioConfig.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace std::placeholders;
|
||||||
|
|
||||||
|
class DigitalInputPlugin : public Plugin {
|
||||||
|
public:
|
||||||
|
Task inputTask;
|
||||||
|
int currentVal = 0;
|
||||||
|
GpioConfig config;
|
||||||
|
DigitalInputPlugin(GpioConfig cfg);
|
||||||
|
void activate(Scheduler* userScheduler);
|
||||||
|
void checkInput();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user