diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 471d753..e220f4e 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -45,6 +45,7 @@ jobs: - examples/Portenta H7 as a USB Host/LEDKeyboardController - examples/Portenta H7 as a WiFi Access Point/SimpleWebServer - examples/Setting Up Portenta H7 For Arduino/Blink + - fqbn: arduino:mbed_portenta:envie_m4 sketch-paths: | - examples/Dual Core Processing/BlinkGreenLed_M4 @@ -53,6 +54,14 @@ jobs: sketch-paths: | - examples/Edge Control Getting Started + - fqbn: arduino:mbed_nicla:nicla_sense + sketch-paths: | + - examples/Nicla Sense ME as a MKR Shield/NiclaShieldController + + - fqbn: arduino:samd:mkrwifi1010 + sketch-paths: | + - examples/Nicla Sense ME as a MKR Shield/NiclaShieldHost + steps: - name: Checkout uses: actions/checkout@v2 @@ -70,6 +79,7 @@ jobs: - name: Arduino_EdgeControl - name: lvgl version: 7.11.0 + - name: Arduino_BHY2 sketch-paths: | # Sketches to compile for all boards diff --git a/README.adoc b/README.adoc index 14f81ae..d2a24a5 100644 --- a/README.adoc +++ b/README.adoc @@ -13,6 +13,7 @@ This library contains the complete Arduino sketches from the Arduino Pro Tutoria * https://docs.arduino.cc/hardware/portenta-h7-lite#tutorials[Arduino Portenta H7 Lite] * https://docs.arduino.cc/hardware/edge-control#tutorials[Arduino Edge Control] * https://docs.arduino.cc/hardware/portenta-vision-shield#tutorials[Arduino Portenta Vision Shield] +* https://docs.arduino.cc/hardware/nicla-sense-me#tutorials[Arduino Nicla Sense ME] diff --git a/examples/Nicla Sense ME as a MKR Shield/NiclaShieldController/NiclaShieldController.ino b/examples/Nicla Sense ME as a MKR Shield/NiclaShieldController/NiclaShieldController.ino new file mode 100644 index 0000000..f7c3abf --- /dev/null +++ b/examples/Nicla Sense ME as a MKR Shield/NiclaShieldController/NiclaShieldController.ino @@ -0,0 +1,85 @@ +#include "Nicla_System.h" +#include "Arduino_BHY2.h" +#include "Wire.h" + +SensorXYZ accel(SENSOR_ID_ACC); +SensorXYZ gyro(SENSOR_ID_GYRO); +Sensor temp(SENSOR_ID_TEMP); + +uint8_t command = 0x00; +void requestHandler(); //request event callback +void receiveEvent(int howMany); //receive event callback + +void setup(){ + BHY2.begin(); + + //Configure Sensors + accel.configure(1, 0); + gyro.configure(1, 0); + temp.configure(1, 0); + + //Give LED feedback to the user + nicla::leds.begin(); + nicla::leds.setColor(green); + + Wire.begin(0x1A); // join i2c bus with address #0x1A , do not use 0x60 nor 0x6B, the MKR board has those i2c devices + + Wire.onRequest(requestHandler); // Callback triggered from `Wire.requestFrom()` done by the Host + + Wire.onReceive(receiveEvent); // Callback triggered from `Wire.beginTransmission()` done by the Host +} + +void loop(){ + BHY2.update(10); +} + +void I2CWrite16(int16_t data){ + Wire.write((byte)(data & 0xFF)); + Wire.write((byte)((data >> 8) & 0xFF)); +} + +void receiveEvent(int howMany){ + + nicla::leds.setColor(blue); + while (Wire.available()){ + command = Wire.read(); + } + + nicla::leds.setColor(off); +} + +void requestHandler(){ + nicla::leds.setColor(green); + + int16_t dataX; + int16_t dataY; + int16_t dataZ; + + switch (command){ + + //Update readings command + case 0: + break; + + case 1: + dataX = accel.x(); + I2CWrite16(dataX); + Serial.println(accel.toString()); + break; + + case 2: + dataY = accel.y(); + I2CWrite16(dataY); + break; + + case 3: + dataZ = accel.z(); + I2CWrite16(dataZ); + break; + + default: + break; + } + + nicla::leds.setColor(off); +} diff --git a/examples/Nicla Sense ME as a MKR Shield/NiclaShieldHost/NiclaShieldHost.ino b/examples/Nicla Sense ME as a MKR Shield/NiclaShieldHost/NiclaShieldHost.ino new file mode 100644 index 0000000..7e49f23 --- /dev/null +++ b/examples/Nicla Sense ME as a MKR Shield/NiclaShieldHost/NiclaShieldHost.ino @@ -0,0 +1,55 @@ +#include "Wire.h" + +#define NICLA_I2C_ADDRESS 0x1A + +void setup(){ + Serial.begin(9600); + while (!Serial); + + Wire.begin(); // Join the I2C bus as a Host + Serial.println("Host started"); +} + +void loop(){ + + I2CWrite(1); // Request Acceleration X + int16_t acX = getData16(); + + I2CWrite(2); // Request Acceleration Y + int16_t acY = getData16(); + + I2CWrite(3); // Request Acceleration Z + int16_t acZ = getData16(); + + Serial.print("ACCELERATION :"); + Serial.print(" X: "); + Serial.print(acX); + Serial.print(" Y: "); + Serial.print(acY); + Serial.print(" Z: "); + Serial.print(acZ); + Serial.println(); + + delay(2500); +} + +void I2CWrite(int command){ + Wire.beginTransmission(NICLA_I2C_ADDRESS); + Wire.write(command); + Wire.endTransmission(); + delay(100); +} + +int16_t getData16(){ + int16_t data = 0; + + Wire.requestFrom(0x1A, 2); + + while (Wire.available()){ + for (int i = 0; i < 2; i++){ + data |= Wire.read() << (8 * i); + } + } + + return data; +} \ No newline at end of file