Skip to content

Commit a68dd1b

Browse files
Rocketctfacchinm
authored andcommitted
initial release for rev4
1 parent 2eaa5e8 commit a68dd1b

File tree

3 files changed

+160
-52
lines changed

3 files changed

+160
-52
lines changed

src/Arduino_MKRIoTCarrier.cpp

Lines changed: 36 additions & 9 deletions
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

Lines changed: 28 additions & 43 deletions
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/MKRIoTCarrierDefines.h

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#ifndef _CARRIE_DEFINES_
2+
#define _CARRIE_DEFINES_
3+
4+
#include <Wire.h>
5+
#include <SPI.h>
6+
7+
#include <Arduino_PMIC.h> //PMIC
8+
9+
//Sensor libraries
10+
#include <Arduino_APDS9960.h> //Ambient light
11+
#include <Arduino_LPS22HB.h> //Pressure sensor
12+
#include "bsec.h"
13+
#include <Arduino_HTS221.h> // env sensor
14+
#include <Arduino_LSM6DSOX.h>
15+
#include <Arduino_LSM6DS3.h>
16+
17+
#include <Arduino_MKRIoTCarrier_Relay.h> //Relays
18+
#include <Arduino_MKRIoTCarrier_Buzzer.h>//Buzzer
19+
#include <Arduino_MKRIoTCarrier_Qtouch.h>//Buttons
20+
#include <SD.h> //SD card
21+
22+
//Display
23+
#include <Adafruit_GFX.h> // Core graphics library
24+
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
25+
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
26+
27+
28+
/* Type for getRevision functions */
29+
using getRev_t = int (*)();
30+
31+
typedef enum {
32+
BOARD_REVISION_1 = 1,
33+
BOARD_REVISION_2 = 2,
34+
} _mkr_io_carrier_board_revision;
35+
36+
37+
enum status {
38+
STATUS_ERROR,
39+
STATUS_OK,
40+
};
41+
42+
43+
namespace mkr_iot_carrier_rev1 {
44+
enum relays {
45+
RELAY1 = 14,
46+
RELAY2 = 13,
47+
};
48+
enum display {
49+
TFT_CS = 2,
50+
TFT_DC = 1,
51+
};
52+
enum touch_pads {
53+
Y0 = 0,
54+
Y1 = 8,
55+
Y2 = 9,
56+
Y3 = 2,
57+
Y4 = 3,
58+
};
59+
enum grove_pins {
60+
GROVE_AN1 = A5,
61+
GROVE_AN2 = A6,
62+
};
63+
};
64+
65+
namespace mkr_iot_carrier_rev2 {
66+
enum relays {
67+
RELAY1 = 1,
68+
RELAY2 = 2,
69+
};
70+
enum display {
71+
TFT_CS = 13,
72+
TFT_DC = 14,
73+
};
74+
enum touch_pads {
75+
Y0 = 4,
76+
Y1 = 8,
77+
Y2 = 9,
78+
Y3 = 2,
79+
Y4 = 3,
80+
};
81+
enum grove_pins {
82+
GROVE_AN1 = A0,
83+
GROVE_AN2 = A6,
84+
};
85+
};
86+
87+
#define BME_SLAVE_ADDRESS 0x76
88+
89+
#define LSM6DSOX_ADDRESS 0x6A
90+
#define LSM6DS3_ADDRESS 0x6A
91+
92+
#ifdef ARDUINO_SAMD_MKRWIFI1010
93+
#define AREF_PIN 25
94+
#endif
95+
96+
#endif

0 commit comments

Comments
 (0)