From 73a8a38d83102eba742ec2ecd8d373c4ffff2fe1 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 22 Nov 2021 16:38:35 +0100 Subject: [PATCH] PoC for automatic AIoT integration Works agains this version of AIoTCloud lib: https://github.com/facchinm/ArduinoIoTCloud/pull/new/weak_properties_handler --- src/AIoTCloudIntegration.cpp | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/AIoTCloudIntegration.cpp diff --git a/src/AIoTCloudIntegration.cpp b/src/AIoTCloudIntegration.cpp new file mode 100644 index 0000000..57dfbea --- /dev/null +++ b/src/AIoTCloudIntegration.cpp @@ -0,0 +1,52 @@ +#if defined __has_include +# if __has_include () +# include + +#include "Arduino_MachineControl.h" + +static int analog_inputs[3]; +static int analog_outputs[4]; + +static void read_inputs() { + while (1) { + analog_inputs[0] = machinecontrol::analog_in[0].read_u16(); + analog_inputs[1] = machinecontrol::analog_in[1].read_u16(); + analog_inputs[2] = machinecontrol::analog_in[2].read_u16(); + delay(1000); + } +} + +static void onAnalogOutChange() { + + // Frequency must be set by the user; this only configures the duty cycle + machinecontrol::analog_out.write(0, analog_outputs[0]); + machinecontrol::analog_out.write(1, analog_outputs[1]); + machinecontrol::analog_out.write(2, analog_outputs[2]); + machinecontrol::analog_out.write(3, analog_outputs[3]); +} + +static void aiot_integration() { + ArduinoCloud.addProperty(analog_inputs[0], Permission::Read).publishOnChange(1); + ArduinoCloud.addProperty(analog_inputs[1], Permission::Read).publishOnChange(1); + ArduinoCloud.addProperty(analog_inputs[2], Permission::Read).publishOnChange(1); + ArduinoCloud.addProperty(analog_outputs[0], Permission::Write).onUpdate(onAnalogOutChange); + ArduinoCloud.addProperty(analog_outputs[1], Permission::Write).onUpdate(onAnalogOutChange); + ArduinoCloud.addProperty(analog_outputs[2], Permission::Write).onUpdate(onAnalogOutChange); + ArduinoCloud.addProperty(analog_outputs[3], Permission::Write).onUpdate(onAnalogOutChange); +} + +class AIoTIntegration { +public: + AIoTIntegration() { + ArduinoCloud.initializeBoardSpecificProperties(aiot_integration); + th.start(read_inputs); + } + +private: + rtos::Thread th; +}; + +AIoTIntegration pmc_integration; + +# endif +#endif \ No newline at end of file