Skip to content

Marqdevx/nicla sense me/shield tutorial #18

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Sep 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/compile-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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]



Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -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;
}