From 72a6a8e80b4d18b28c8a9391860489d3e751f9d0 Mon Sep 17 00:00:00 2001 From: Silvio Navaretti <49733745+navalog@users.noreply.github.com> Date: Thu, 20 Jun 2024 14:45:55 +0200 Subject: [PATCH 1/8] Example TemperatureHumidityMatrix Creation of the example TemperatureHumidityMatrix, tested on HW --- .../TemperatureHumidityMatrix.ino | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino diff --git a/examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino b/examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino new file mode 100644 index 0000000..20335f3 --- /dev/null +++ b/examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino @@ -0,0 +1,48 @@ +#include "Modulino.h" +#include "ArduinoGraphics.h" +#include "Arduino_LED_Matrix.h" + +ModulinoThermo thermo; +ArduinoLEDMatrix matrix; + +float temperature = -273.15; +float humidity = 0.0; + +void setup() { + Serial.begin(9600); + + Modulino.begin(); + thermo.begin(); + + matrix.begin(); + delay(100); +} + +void loop() { + //Acquire temperature and humidity + temperature = thermo.getTemperature(); + humidity = thermo.getHumidity(); + + //Convert the temperature float to a string with 1 decimal point shown + //and add °C at the end + String temperature_text = String(temperature, 1) + "°C"; + + //Convert the humidity float to a string with no decimal points shown + //and add % at the end + String humidity_text = String(humidity, 0) + "%"; + + //Print each of the sensor values on serial + Serial.print(temperature_text + " "); + Serial.println(humidity_text); + + //Show on the UNO R4 WiFi LED matrix the data + + matrix.beginDraw(); + matrix.stroke(0xFFFFFFFF); + matrix.textScrollSpeed(75); + matrix.textFont(Font_5x7); + matrix.beginText(0, 1, 0xFFFFFF); + matrix.println(" " + temperature_text + " " + humidity_text + " "); + matrix.endText(SCROLL_LEFT); + matrix.endDraw(); +} From 95ec7f60c1d17a48cc7c13b536d643ba3e6fe618 Mon Sep 17 00:00:00 2001 From: Carlos Mario Rodriguez Perdomo Date: Tue, 25 Jun 2024 15:00:02 +0200 Subject: [PATCH 2/8] new examples and folder structure --- examples/Modulino_Buttons/Basic/Basic.ino | 28 ++++++++++++ .../Button2Integration/Button2Integration.ino | 0 examples/Modulino_Buzzer/Basic/Basic.ino | 20 +++++++++ .../Simple_melody/Simple_melody.ino | 21 +++++++++ examples/Modulino_Distance/Basic/Basic.ino | 15 +++++++ examples/Modulino_Knob/Basic/Basic.ino | 22 ++++++++++ .../EncoderSetter/EncoderSetter.ino | 1 + examples/Modulino_Movement/Basic/Basic.ino | 29 +++++++++++++ examples/Modulino_Pixels/Basic/Basic.ino | 18 ++++++++ .../Simple_Animation/Simple_Animation.ino | 43 +++++++++++++++++++ examples/Modulino_Thermo/Basic/Basic.ino | 31 +++++++++++++ .../TemperatureHumidityMatrix.ino | 0 .../AddressChanger/AddressChanger.ino | 0 .../FirmwareUpdater/FirmwareUpdater.ino | 0 .../Modulino_PlugNPlay/Modulino_PlugNPlay.ino | 0 15 files changed, 228 insertions(+) create mode 100644 examples/Modulino_Buttons/Basic/Basic.ino rename examples/{ => Modulino_Buttons}/Button2Integration/Button2Integration.ino (100%) create mode 100644 examples/Modulino_Buzzer/Basic/Basic.ino create mode 100644 examples/Modulino_Buzzer/Simple_melody/Simple_melody.ino create mode 100644 examples/Modulino_Distance/Basic/Basic.ino create mode 100644 examples/Modulino_Knob/Basic/Basic.ino rename examples/{ => Modulino_Knob}/EncoderSetter/EncoderSetter.ino (91%) create mode 100644 examples/Modulino_Movement/Basic/Basic.ino create mode 100644 examples/Modulino_Pixels/Basic/Basic.ino create mode 100644 examples/Modulino_Pixels/Simple_Animation/Simple_Animation.ino create mode 100644 examples/Modulino_Thermo/Basic/Basic.ino rename examples/{ => Modulino_Thermo}/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino (100%) rename examples/{ => Utilities}/AddressChanger/AddressChanger.ino (100%) rename examples/{ => Utilities}/FirmwareUpdater/FirmwareUpdater.ino (100%) rename examples/{ => Utilities}/Modulino_PlugNPlay/Modulino_PlugNPlay.ino (100%) diff --git a/examples/Modulino_Buttons/Basic/Basic.ino b/examples/Modulino_Buttons/Basic/Basic.ino new file mode 100644 index 0000000..c40209b --- /dev/null +++ b/examples/Modulino_Buttons/Basic/Basic.ino @@ -0,0 +1,28 @@ +#include + +ModulinoButtons buttons; + +bool button_a = false; +bool button_b = false; +bool button_c = false; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + buttons.begin(); + //function to control the LEDs on top of each button + buttons.setLeds(true, true, true); +} +void loop() { + //request new data from the Modulino buttons + if (buttons.update()) { + //Check if the buttons has been pressed + if (buttons.isPressed(0)) { + Serial.println("Button A pressed!"); + } else if (buttons.isPressed(1)) { + Serial.println("Button B pressed!"); + } else if (buttons.isPressed(2)) { + Serial.println("Button C pressed!"); + } + } +} \ No newline at end of file diff --git a/examples/Button2Integration/Button2Integration.ino b/examples/Modulino_Buttons/Button2Integration/Button2Integration.ino similarity index 100% rename from examples/Button2Integration/Button2Integration.ino rename to examples/Modulino_Buttons/Button2Integration/Button2Integration.ino diff --git a/examples/Modulino_Buzzer/Basic/Basic.ino b/examples/Modulino_Buzzer/Basic/Basic.ino new file mode 100644 index 0000000..b66e419 --- /dev/null +++ b/examples/Modulino_Buzzer/Basic/Basic.ino @@ -0,0 +1,20 @@ +#include + +ModulinoBuzzer buzzer; + +int frequency = 440; +int duration = 1000; + +void setup(){ + Modulino.begin(); + buzzer.begin(); +} + +void loop(){ + + buzzer.tone(frequency, duration); + delay(1000); + buzzer.tone(0, duration); + delay(1000); + +} \ No newline at end of file diff --git a/examples/Modulino_Buzzer/Simple_melody/Simple_melody.ino b/examples/Modulino_Buzzer/Simple_melody/Simple_melody.ino new file mode 100644 index 0000000..25c01cf --- /dev/null +++ b/examples/Modulino_Buzzer/Simple_melody/Simple_melody.ino @@ -0,0 +1,21 @@ +#include + +ModulinoBuzzer buzzer; + +int melody[] = { 262, 196, 196, 220, 196, 0, 247, 262 }; + +void setup() { + Modulino.begin(); + buzzer.begin(); +} + +void loop() { + + for (int i = 0; i < 8; i++) { + int note = melody[i]; + + buzzer.tone(note, 250); + delay(250); + + } +} \ No newline at end of file diff --git a/examples/Modulino_Distance/Basic/Basic.ino b/examples/Modulino_Distance/Basic/Basic.ino new file mode 100644 index 0000000..6d4d3e1 --- /dev/null +++ b/examples/Modulino_Distance/Basic/Basic.ino @@ -0,0 +1,15 @@ +#include "Modulino.h" + +ModulinoDistance distance; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + distance.begin(); +} + +void loop() { + int measure = distance.get(); + Serial.println(measure); + delay(10); +} \ No newline at end of file diff --git a/examples/Modulino_Knob/Basic/Basic.ino b/examples/Modulino_Knob/Basic/Basic.ino new file mode 100644 index 0000000..879c940 --- /dev/null +++ b/examples/Modulino_Knob/Basic/Basic.ino @@ -0,0 +1,22 @@ +#include + +ModulinoKnob knob; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + knob.begin(); +} + +void loop(){ + int position = knob.get(); + bool click = knob.isPressed(); + + Serial.print("Current position is: "); + Serial.println(position); + + if(click){ + Serial.println("Clicked!"); + } + +} \ No newline at end of file diff --git a/examples/EncoderSetter/EncoderSetter.ino b/examples/Modulino_Knob/EncoderSetter/EncoderSetter.ino similarity index 91% rename from examples/EncoderSetter/EncoderSetter.ino rename to examples/Modulino_Knob/EncoderSetter/EncoderSetter.ino index 9fe4f44..f130a63 100644 --- a/examples/EncoderSetter/EncoderSetter.ino +++ b/examples/Modulino_Knob/EncoderSetter/EncoderSetter.ino @@ -15,6 +15,7 @@ void setup() { void loop() { int value = encoder.get(); + //Reset the position of the encoder with the set function if (value > 100 || value < 0) { encoder.set(0); } diff --git a/examples/Modulino_Movement/Basic/Basic.ino b/examples/Modulino_Movement/Basic/Basic.ino new file mode 100644 index 0000000..956ae54 --- /dev/null +++ b/examples/Modulino_Movement/Basic/Basic.ino @@ -0,0 +1,29 @@ +#include "Modulino.h" + +ModulinoMovement movement; + +float x; +float y; +float z; + +void setup() { + Serial.begin(9600); + Modulino.begin(); + movement.begin(); +} + +void loop() { + movement.update(); + + x = movement.getX(); + y = movement.getY(); + z = movement.getZ(); + + Serial.print("Movement data: "); + Serial.print("x "); + Serial.print(x, 3); + Serial.print(" y "); + Serial.print(y, 3); + Serial.print(" z "); + Serial.println(z, 3); +} \ No newline at end of file diff --git a/examples/Modulino_Pixels/Basic/Basic.ino b/examples/Modulino_Pixels/Basic/Basic.ino new file mode 100644 index 0000000..88099a5 --- /dev/null +++ b/examples/Modulino_Pixels/Basic/Basic.ino @@ -0,0 +1,18 @@ +#include + +ModulinoPixels leds; + +int brightness = 25; + +void setup(){ + Modulino.begin(); + leds.begin(); +} + +void loop(){ + //Set all LEDs blue + for (int i = 0; i < 8; i++) { + leds.set(i, BLUE, brightness); + leds.show(); + } +} \ No newline at end of file diff --git a/examples/Modulino_Pixels/Simple_Animation/Simple_Animation.ino b/examples/Modulino_Pixels/Simple_Animation/Simple_Animation.ino new file mode 100644 index 0000000..addec14 --- /dev/null +++ b/examples/Modulino_Pixels/Simple_Animation/Simple_Animation.ino @@ -0,0 +1,43 @@ +#include + +ModulinoPixels leds; + +ModulinoColor OFF(0, 0, 0); + +int brightness = 25; + +void setup() { + Modulino.begin(); + leds.begin(); +} + +void loop() { + + for (int i = 0; i < 8; i++) { + if (i == 0 || i == 1) { + setPixel(i, RED); + } else if (i == 2 || i == 3) { + setPixel(i, BLUE); + } else if(i == 4 || i == 5){ + setPixel(i, GREEN); + } else if(i == 6 || i == 7){ + setPixel(i, VIOLET); + } else if (i == 7 || i == 8) { + setPixel(i, WHITE); + } + + delay(25); + + } + + for (int i = 0; i < 8; i++) { + setPixel(i, OFF); + delay(25); + } + +} + +void setPixel(int pixel, ModulinoColor color) { + leds.set(pixel, color, brightness); + leds.show(); +} \ No newline at end of file diff --git a/examples/Modulino_Thermo/Basic/Basic.ino b/examples/Modulino_Thermo/Basic/Basic.ino new file mode 100644 index 0000000..74894c2 --- /dev/null +++ b/examples/Modulino_Thermo/Basic/Basic.ino @@ -0,0 +1,31 @@ +#include + +// Create object instance +ModulinoThermo thermo; + +void setup(){ + Serial.begin(9600); + + // Call all necessary .begin() function + Modulino.begin(); + thermo.begin(); +} + +void loop(){ + + float celsius = thermo.getTemperature(); + + float fahrenheit = (celsius * 9 / 5) + 32; + + float humidity = thermo.getHumidity(); + + Serial.print("Temperature (C) is: "); + Serial.println(celsius); + + Serial.print("Temperature (F) is: "); + Serial.println(fahrenheit); + + Serial.print("Humidity (rH) is: "); + Serial.println(humidity); + +} \ No newline at end of file diff --git a/examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino b/examples/Modulino_Thermo/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino similarity index 100% rename from examples/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino rename to examples/Modulino_Thermo/TemperatureHumidityMatrix/TemperatureHumidityMatrix.ino diff --git a/examples/AddressChanger/AddressChanger.ino b/examples/Utilities/AddressChanger/AddressChanger.ino similarity index 100% rename from examples/AddressChanger/AddressChanger.ino rename to examples/Utilities/AddressChanger/AddressChanger.ino diff --git a/examples/FirmwareUpdater/FirmwareUpdater.ino b/examples/Utilities/FirmwareUpdater/FirmwareUpdater.ino similarity index 100% rename from examples/FirmwareUpdater/FirmwareUpdater.ino rename to examples/Utilities/FirmwareUpdater/FirmwareUpdater.ino diff --git a/examples/Modulino_PlugNPlay/Modulino_PlugNPlay.ino b/examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino similarity index 100% rename from examples/Modulino_PlugNPlay/Modulino_PlugNPlay.ino rename to examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino From a2f4a9522802c937ddc909a9a59a8c8b45313009 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 3 Jul 2024 13:07:21 +0200 Subject: [PATCH 3/8] Compatibility with Nano ESP32 --- src/Modulino.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Modulino.h b/src/Modulino.h index 3bd53fc..ab33e13 100644 --- a/src/Modulino.h +++ b/src/Modulino.h @@ -9,6 +9,11 @@ #include //#include // need to provide a way to change Wire object +#ifndef ARDUINO_API_VERSION +#define PinStatus uint8_t +#define HardwareI2C TwoWire +#endif + class ModulinoClass { public: void begin(HardwareI2C& wire = Wire1) { @@ -145,13 +150,13 @@ class ModulinoBuzzer : public Module { public: ModulinoBuzzer(uint8_t address = 0xFF) : Module(address, "BUZZER") {} - void tone(size_t freq, size_t len_ms) { + void (tone)(size_t freq, size_t len_ms) { uint8_t buf[8]; memcpy(&buf[0], &freq, 4); memcpy(&buf[4], &len_ms, 4); write(buf, 8); } - void noTone() { + void (noTone)() { uint8_t buf[8]; memset(&buf[0], 0, 8); write(buf, 8); From 2c671b1f5fc06654392ad2dc96e34450151d0c57 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 3 Jul 2024 13:07:46 +0200 Subject: [PATCH 4/8] Default to Wire for all boards except UNO R4 --- src/Modulino.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Modulino.h b/src/Modulino.h index ab33e13..9d47e30 100644 --- a/src/Modulino.h +++ b/src/Modulino.h @@ -16,7 +16,12 @@ class ModulinoClass { public: +#ifdef ARDUINO_UNOR4_WIFI void begin(HardwareI2C& wire = Wire1) { +#else + void begin(HardwareI2C& wire = Wire) { +#endif + #ifdef ARDUINO_UNOR4_WIFI // unlock Wire1 bus at begin since we don't know the state of the system pinMode(WIRE1_SCL_PIN, OUTPUT); From 84c98f3cfffa044e76ad4e82b1e9810640f72a8b Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Wed, 3 Jul 2024 13:07:57 +0200 Subject: [PATCH 5/8] Remove unused variables warnings --- src/Modulino.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modulino.h b/src/Modulino.h index 9d47e30..95a406e 100644 --- a/src/Modulino.h +++ b/src/Modulino.h @@ -417,7 +417,7 @@ class ModulinoDistance : public Module { return NAN; } uint8_t NewDataReady = 0; - uint8_t status = tof_sensor->VL53L4CD_CheckForDataReady(&NewDataReady); + tof_sensor->VL53L4CD_CheckForDataReady(&NewDataReady); if (NewDataReady) { tof_sensor->VL53L4CD_ClearInterrupt(); tof_sensor->VL53L4CD_GetResult(&results); From 08d2495bf8844ad2dfbdb465c673c003152da8be Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 28 Jun 2024 17:25:07 +0200 Subject: [PATCH 6/8] ModulinoDistance: add available() API available() returns true is the distance is retrieved and is valid; get() returns now the last value read. --- src/Modulino.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Modulino.h b/src/Modulino.h index 95a406e..0aacfbc 100644 --- a/src/Modulino.h +++ b/src/Modulino.h @@ -412,10 +412,11 @@ class ModulinoDistance : public Module { operator bool() { return (tof_sensor != nullptr); } - float get() { + bool available() { if (tof_sensor == nullptr) { - return NAN; + return false; } + float ret = internal; uint8_t NewDataReady = 0; tof_sensor->VL53L4CD_CheckForDataReady(&NewDataReady); if (NewDataReady) { @@ -423,15 +424,17 @@ class ModulinoDistance : public Module { tof_sensor->VL53L4CD_GetResult(&results); } if (results.range_status == 0) { - return results.distance_mm; + internal = results.distance_mm; } else { - return NAN; + internal = NAN; } + return !isnan(internal); } - bool isValid(float distance) { - return !isnan(distance); + float get() { + return internal; } private: VL53L4CD* tof_sensor = nullptr; VL53L4CD_Result_t results; + float internal = NAN; }; \ No newline at end of file From 4f15175f16bd4b4f067fdea8cb75f76bd8760c44 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Jul 2024 09:55:06 +0200 Subject: [PATCH 7/8] ModulinoDistance: fix examples for new API --- examples/Modulino_Distance/Basic/Basic.ino | 6 ++++-- .../Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/examples/Modulino_Distance/Basic/Basic.ino b/examples/Modulino_Distance/Basic/Basic.ino index 6d4d3e1..eed3bbf 100644 --- a/examples/Modulino_Distance/Basic/Basic.ino +++ b/examples/Modulino_Distance/Basic/Basic.ino @@ -9,7 +9,9 @@ void setup() { } void loop() { - int measure = distance.get(); - Serial.println(measure); + if (distance.available()) { + int measure = distance.get(); + Serial.println(measure); + } delay(10); } \ No newline at end of file diff --git a/examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino b/examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino index 792c170..bf9ba8d 100644 --- a/examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino +++ b/examples/Utilities/Modulino_PlugNPlay/Modulino_PlugNPlay.ino @@ -40,7 +40,7 @@ void loop() { skip = (skip + 1) % 5; } - pitch = encoder.get() + distance.get(); + pitch = encoder.get() + (distance.available() ? distance.get() : 0); if (Serial.available() && Serial.read() == 's') { imu.update(); From 3772433d9b119441b7d9801b48fefa6c07524d85 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 8 Jul 2024 17:07:05 +0200 Subject: [PATCH 8/8] Release 0.4.0 --- library.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library.properties b/library.properties index d0cfb87..8d0b1b0 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Modulino -version=0.3.0 +version=0.4.0 author=Arduino maintainer=Arduino sentence=Arduino Library for Modulinos