Skip to content

Commit d8e0105

Browse files
authored
Merge pull request #58 from Rocketct/master
support to new board revision
2 parents 2eaa5e8 + e66ce54 commit d8e0105

15 files changed

+676
-60
lines changed

.github/workflows/Compile Examples.yml

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ jobs:
5757
- name: Adafruit GFX Library
5858
- name: Adafruit ST7735 and ST7789 Library
5959
- name: Arduino_MCHPTouch
60+
- name: BSEC Software Library
61+
- name: Arduino_LSM6DSOX
6062
- name: TFT_eSPI
6163
sketch-paths: |
6264
# Ignoring Display/AnimatedGif compiling the rest of them

library.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ category=Sensors
88
url=https://github.com/arduino-libraries/Arduino_MKRIoTCarrier
99
architectures=samd
1010
precompiled=false
11-
depends=Arduino_APDS9960,Arduino_BQ24195,Arduino_HTS221,Arduino_LPS22HB,Arduino_LSM6DS3,Adafruit BusIO,Adafruit DotStar,Adafruit GFX Library,Adafruit ST7735 and ST7789 Library,Arduino_MCHPTouch,TFT_eSPI
11+
depends=Arduino_APDS9960,Arduino_BQ24195,Arduino_HTS221,Arduino_LPS22HB,Arduino_LSM6DS3,Arduino_LSM6DSOX,BSEC Software Library,Adafruit BusIO,Adafruit DotStar,Adafruit GFX Library,Adafruit ST7735 and ST7789 Library,Arduino_MCHPTouch,TFT_eSPI

src/Arduino_MKRIoTCarrier.cpp

+36-9
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,37 @@ bool CARRIER_CASE = false;
2727
MKRIoTCarrier::MKRIoTCarrier() {
2828
}
2929

30+
int MKRIoTCarrier::_revision = -1;
31+
3032
int MKRIoTCarrier::begin() {
33+
34+
pinMode(AREF_PIN,INPUT_PULLUP);
35+
if (digitalRead(AREF_PIN) == LOW) {
36+
MKRIoTCarrier::_revision = BOARD_REVISION_2;
37+
} else {
38+
MKRIoTCarrier::_revision = BOARD_REVISION_1;
39+
}
40+
41+
if (!CARRIER_CASE) {
42+
Buttons.updateConfig(200);
43+
}
44+
3145
//Display
46+
if (_revision == BOARD_REVISION_2){
47+
Adafruit_ST7789 _display = Adafruit_ST7789(mkr_iot_carrier_rev2::TFT_CS, mkr_iot_carrier_rev2::TFT_DC, -1);
48+
display = _display;
49+
} else {
50+
Adafruit_ST7789 _display = Adafruit_ST7789(mkr_iot_carrier_rev1::TFT_CS, mkr_iot_carrier_rev1::TFT_DC, -1);
51+
display = _display;
52+
}
53+
3254
display.init(240, 240);//.begin(true); // Initialize ST7789 screen
3355
pinMode(3,INPUT_PULLUP); // RESET fix
3456

3557
//Default rotation to align it with the carrier
3658
display.setRotation(2);
3759
display.fillScreen(ST77XX_BLACK);
3860

39-
if (!CARRIER_CASE) {
40-
Buttons.updateConfig(200);
41-
}
42-
4361
Buttons.begin(); //init buttons
4462

4563
//init LEDs
@@ -50,9 +68,13 @@ int MKRIoTCarrier::begin() {
5068
//PMIC init
5169
PMIC.begin();
5270
PMIC.enableBoostMode();
71+
72+
Relay1.begin();
73+
Relay2.begin();
5374

5475
//Sensors
55-
uint8_t sensorsOK = !Light.begin() << 0 | !Pressure.begin() << 1 | !IMUmodule.begin() << 2 | !Env.begin() << 3;
76+
uint8_t sensorsOK = !Light.begin() << 0 | !Pressure.begin() << 1 | !IMUmodule.begin() << 2 | !Env.begin() << 3;
77+
5678

5779
//If some of the sensors are not connected
5880
if(sensorsOK > 0 ){
@@ -66,16 +88,21 @@ int MKRIoTCarrier::begin() {
6688
if(sensorsOK & 0b0100){
6789
Serial.println("IMU is not connected");
6890
}
69-
if(sensorsOK & 0b1000){
70-
Serial.println("Environmental sensor is not connected!");
91+
if (MKRIoTCarrier::_revision != BOARD_REVISION_2) {
92+
if(sensorsOK & 0b1000){
93+
Serial.println("Environmental sensor is not connected!");
94+
}
7195
}
7296
return false;
7397
}
74-
Relay1.begin();
75-
Relay2.begin();
98+
7699
if(!SD.begin(SD_CS)) {
77100
Serial.println("Sd card not detected");
78101
}
79102

80103
return true;
81104
}
105+
106+
int MKRIoTCarrier::getBoardRevision() {
107+
return MKRIoTCarrier::_revision;
108+
}

src/Arduino_MKRIoTCarrier.h

+28-43
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,11 @@
2222
#define ARDUINO_MKRIoTCarrier_h
2323

2424
#include <Arduino.h>
25-
#include <Wire.h>
25+
#include <MKRIoTCarrierDefines.h>
2626

27-
#include <Arduino_PMIC.h> //PMIC
28-
29-
//Sensor libraries
30-
#include <Arduino_APDS9960.h> //Ambient light
31-
#include <Arduino_LPS22HB.h> //Pressure sensor
32-
#include <Arduino_LSM6DS3.h> //IMU
33-
#include <Arduino_HTS221.h> // env sensor
34-
35-
#include <Arduino_MKRIoTCarrier_Relay.h> //Relays
36-
#include <Arduino_MKRIoTCarrier_Buzzer.h>//Buzzer
37-
#include <Arduino_MKRIoTCarrier_Qtouch.h>//Buttons
38-
#include <SD.h> //SD card
39-
40-
//Display
41-
#include <Adafruit_GFX.h> // Core graphics library
42-
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
43-
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
44-
#include <SPI.h>
27+
#include <IMUClass.h> //IMU
28+
#include <PressureClass.h> //IMU
29+
#include <EnvClass.h> //IMU
4530

4631
//RGB LEDs
4732
#include <Adafruit_DotStar.h>
@@ -50,29 +35,18 @@
5035
#define CLOCKPIN 4
5136

5237
//Taken from the carrier schematics
53-
#define RELAY_1 14
54-
#define RELAY_2 13
38+
5539
#define BUZZER 7
5640

57-
#define GROVE_AN1 A5
58-
#define GROVE_AN2 A6
5941

6042
#define SD_CS 0
6143

62-
#define Y0 A0
63-
#define Y1 A1
64-
#define Y2 A2
65-
#define Y3 A3
66-
#define Y4 A4
67-
6844
#define INT 6 //Every sensor interrupt pin , PULL-UP
6945

7046
#define LED_CKI 4
7147
#define LED_SDI 5
7248

73-
#define TFT_CS 2
7449
#define TFT_RST -1 // Or set to -1 and connect to Arduino RESET pin
75-
#define TFT_DC 1
7650
#define TFT_BACKLIGHT 3
7751

7852
//Touch pads values for using the case or just directly on the board
@@ -88,43 +62,54 @@ enum {
8862
RIGHT = 0
8963
};
9064

65+
typedef enum {
66+
RELAY_1 = 1,
67+
RELAY_2
68+
} Relay_t;
69+
9170
class MKRIoTCarrier{
9271
public:
9372
MKRIoTCarrier();
9473
int begin();
74+
static int getBoardRevision();
9575

9676
// Case
9777
void withCase() { CARRIER_CASE = true; };
9878
void noCase() { CARRIER_CASE = false; };
9979

10080
//Sensors
10181
APDS9960& Light = APDS;
102-
LPS22HBClass& Pressure = BARO;
103-
LSM6DS3Class& IMUmodule = IMU;
104-
HTS221Class& Env = HTS;
82+
PressureClass Pressure{MKRIoTCarrier::getBoardRevision};
83+
IMUClass IMUmodule{MKRIoTCarrier::getBoardRevision};
84+
EnvClass Env{MKRIoTCarrier::getBoardRevision};
10585

10686
//Misc
10787
//Relays
108-
MKRIoTCarrier_Relay Relay1 = MKRIoTCarrier_Relay(RELAY_1); //Relay 1 , pin 14
109-
MKRIoTCarrier_Relay Relay2 = MKRIoTCarrier_Relay(RELAY_2); //Relay 2 , pin 13
88+
MKRIoTCarrier_Relay Relay1 = MKRIoTCarrier_Relay{RELAY_1,MKRIoTCarrier::getBoardRevision};
89+
MKRIoTCarrier_Relay Relay2 = MKRIoTCarrier_Relay{RELAY_2,MKRIoTCarrier::getBoardRevision};
11090

11191
//Buzzer
11292
MKRIoTCarrier_Buzzer Buzzer = MKRIoTCarrier_Buzzer(BUZZER); //Buzzer, pin 6
11393

11494
//Buttons
115-
MKRIoTCarrierQtouch Buttons = MKRIoTCarrierQtouch();
95+
MKRIoTCarrierQtouch Buttons{MKRIoTCarrier::getBoardRevision};
11696

11797

118-
MKRIoTCarrierQtouch Button0 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH0);
119-
MKRIoTCarrierQtouch Button1 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH1);
120-
MKRIoTCarrierQtouch Button2 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH2);
121-
MKRIoTCarrierQtouch Button3 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH3);
122-
MKRIoTCarrierQtouch Button4 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH4);
98+
MKRIoTCarrierQtouch Button0 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH0,MKRIoTCarrier::getBoardRevision);
99+
MKRIoTCarrierQtouch Button1 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH1,MKRIoTCarrier::getBoardRevision);
100+
MKRIoTCarrierQtouch Button2 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH2,MKRIoTCarrier::getBoardRevision);
101+
MKRIoTCarrierQtouch Button3 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH3,MKRIoTCarrier::getBoardRevision);
102+
MKRIoTCarrierQtouch Button4 __attribute__((deprecated)) = MKRIoTCarrierQtouch(TOUCH4,MKRIoTCarrier::getBoardRevision);
123103

124104
//Display
125-
Adafruit_ST7789 display = Adafruit_ST7789(TFT_CS, TFT_DC, -1);
105+
Adafruit_ST7789 display = Adafruit_ST7789(-1, -1, -1);
126106

127107
//RGB LEDs
128108
Adafruit_DotStar leds = Adafruit_DotStar(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BGR);
109+
private:
110+
static int _revision;
111+
int _relay1_pin;
112+
int _relay2_pin;
129113
};
114+
130115
#endif

src/Arduino_MKRIoTCarrier_Qtouch.cpp

+25-1
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,16 @@ MKRIoTCarrierQtouch::MKRIoTCarrierQtouch() {
2626
}
2727

2828
//Individual pad
29-
MKRIoTCarrierQtouch::MKRIoTCarrierQtouch(touchButtons padIndex) {
29+
MKRIoTCarrierQtouch::MKRIoTCarrierQtouch(touchButtons padIndex,getRev_t getRevision) {
3030
_padID = padIndex;
31+
board_revision = getRevision;
32+
}
33+
34+
// sets function called on slave write
35+
MKRIoTCarrierQtouch::MKRIoTCarrierQtouch(getRev_t getRevision)
36+
{
37+
//If board_revision = 0, IMU module is LSM6DSOX, otherwise is LSM6DS3
38+
board_revision = getRevision;
3139
}
3240

3341
bool MKRIoTCarrierQtouch::getTouch(touchButtons padIndex) {
@@ -93,6 +101,22 @@ void MKRIoTCarrierQtouch::updateConfig(int newSens, touchButtons padIndex) {
93101

94102
//Manager
95103
bool MKRIoTCarrierQtouch::begin() {
104+
// FIXME: TODO: check that passing revision makes sense
105+
_revision = board_revision();
106+
if (_revision == BOARD_REVISION_2){
107+
TOUCH.setTouchPad(mkr_iot_carrier_rev2::Y0,
108+
mkr_iot_carrier_rev2::Y1,
109+
mkr_iot_carrier_rev2::Y2,
110+
mkr_iot_carrier_rev2::Y3,
111+
mkr_iot_carrier_rev2::Y4);
112+
113+
} else {
114+
TOUCH.setTouchPad(mkr_iot_carrier_rev1::Y0,
115+
mkr_iot_carrier_rev1::Y1,
116+
mkr_iot_carrier_rev1::Y2,
117+
mkr_iot_carrier_rev1::Y3,
118+
mkr_iot_carrier_rev1::Y4);
119+
}
96120
return TOUCH.begin();
97121
}
98122

src/Arduino_MKRIoTCarrier_Qtouch.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "Arduino.h"
2525
#include "Arduino_MCHPTouch.h"
26+
#include <MKRIoTCarrierDefines.h>
2627

2728
static bool _available = false;
2829

@@ -37,7 +38,8 @@ typedef enum {
3738
class MKRIoTCarrierQtouch{
3839
public:
3940
MKRIoTCarrierQtouch();
40-
MKRIoTCarrierQtouch(touchButtons padIndex);
41+
MKRIoTCarrierQtouch(int (*)(void));
42+
MKRIoTCarrierQtouch(touchButtons padIndex,int (*)(void));
4143
bool begin();
4244
bool update();
4345

@@ -59,6 +61,8 @@ class MKRIoTCarrierQtouch{
5961
touchButtons _padID;
6062
int _padIndex;
6163

64+
int (*board_revision)(void);
65+
int _revision;
6266

6367
bool _touchesPrev[5] = {0, 0, 0, 0, 0}; //To know last touches
6468

src/Arduino_MKRIoTCarrier_Relay.cpp

+25-3
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,34 @@
1919

2020

2121
#include "Arduino_MKRIoTCarrier_Relay.h"
22+
#include "MKRIoTCarrierDefines.h"
2223

23-
MKRIoTCarrier_Relay::MKRIoTCarrier_Relay(int pin):_pin{pin}
24+
MKRIoTCarrier_Relay::MKRIoTCarrier_Relay(int index, getRev_t getRev):_index{index}
2425
{
26+
board_revision = getRev;
2527
}
2628
void MKRIoTCarrier_Relay::begin(){
29+
30+
_revision = board_revision();
31+
32+
if(_revision == BOARD_REVISION_1)
33+
{
34+
if(_index == 1) {
35+
_pin = mkr_iot_carrier_rev1::RELAY1;
36+
}
37+
else if(_index == 2) {
38+
_pin = mkr_iot_carrier_rev1::RELAY2;
39+
}
40+
}
41+
else {
42+
/*carrier's revision 2 with pull down on AREF */
43+
if(_index == 1) {
44+
_pin = mkr_iot_carrier_rev2::RELAY1;
45+
}
46+
else if(_index == 2) {
47+
_pin = mkr_iot_carrier_rev2::RELAY2;
48+
}
49+
}
2750
pinMode(_pin ,OUTPUT);
2851
close();
2952
}
@@ -44,7 +67,6 @@ void MKRIoTCarrier_Relay::open(){
4467
}
4568

4669
int MKRIoTCarrier_Relay::getStatus(){
47-
//Serial.println("status");
48-
//Serial.println(_status , BIN);
70+
4971
return (int)_status;
5072
}

src/Arduino_MKRIoTCarrier_Relay.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,23 @@
2222
#define ARDUINO_MKRIoTCarrier_Relay
2323

2424
#include "Arduino.h"
25+
using getRev_t = int (*)();
2526

2627
class MKRIoTCarrier_Relay{
2728
public:
28-
MKRIoTCarrier_Relay(int pin);
29+
MKRIoTCarrier_Relay(int index, getRev_t getRev);
2930
void begin();
3031
void open();
3132
void close();
3233
int getPin();
3334
int getStatus();
3435

3536
private:
36-
const int _pin;
37+
int _pin;
3738
int _status;
39+
int _index;
40+
int (*board_revision)(void);
41+
int _revision;
3842
};
3943

4044
#endif

0 commit comments

Comments
 (0)