Skip to content

Commit f1b840a

Browse files
authored
Merge pull request #3 from gbr1/dev
0.0.2
2 parents a61b929 + e902302 commit f1b840a

File tree

8 files changed

+191
-6
lines changed

8 files changed

+191
-6
lines changed

examples/imu/imu.ino

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
#include "Wire.h"
12
#include "motion_fx.h"
23
#include "LSM6DSOSensor.h"
34

5+
TwoWire wire(PB7, PB8);
6+
47
#define ALGO_FREQ 100U /* Algorithm frequency 100Hz */
58
#define ALGO_PERIOD (1000U / ALGO_FREQ) /* Algorithm period [ms] */
69
#define MOTION_FX_ENGINE_DELTATIME 0.01f
@@ -37,7 +40,7 @@ int32_t gyroscope[3];
3740
int32_t magnetometer[3];
3841
int32_t MagOffset[3];
3942

40-
LSM6DSOSensor AccGyr(&Wire, LSM6DSO_I2C_ADD_L);
43+
LSM6DSOSensor AccGyr(&wire, LSM6DSO_I2C_ADD_L);
4144

4245
HardwareTimer *MyTim;
4346

@@ -54,8 +57,8 @@ void setup() {
5457
while (!Serial) yield();
5558

5659
/* Initialize I2C bus */
57-
Wire.begin();
58-
Wire.setClock(400000);
60+
wire.begin();
61+
wire.setClock(400000);
5962

6063
/* Start communication with IMU */
6164
AccGyr.begin();
@@ -94,7 +97,7 @@ void setup() {
9497
/* Get library version */
9598
LibVersionLen = (int)MotionFX_GetLibVersion(LibVersion);
9699

97-
MyTim = new HardwareTimer(TIM3);
100+
MyTim = new HardwareTimer(TIM9); //TIM3
98101
MyTim->setOverflow(ALGO_FREQ, HERTZ_FORMAT);
99102
MyTim->attachInterrupt(fusion_update);
100103
MyTim->resume();

examples/servo/servo.ino

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#include "Arduino_Robot_Firmware.h"
2+
3+
Arduino_Robot_Firmware robot;
4+
5+
void setup(){
6+
robot.begin();
7+
}
8+
9+
void loop(){
10+
for(int i=0; i<180; i++){
11+
robot.setServoA(i);
12+
robot.setServoB(i);
13+
delay(15);
14+
}
15+
delay(5000);
16+
}

examples/tof3/tof3.ino

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#include <Wire.h>
2+
#include <VL53L1X.h>
3+
#include <Wire.h>
4+
5+
TwoWire wire(PB7, PB8);
6+
const uint8_t sensorCount = 3;
7+
8+
const uint8_t xshutPins[sensorCount] = { PC5, PB0, PB1 }; //Right, Center, Left
9+
10+
VL53L1X sensors[sensorCount];
11+
12+
void setup(){
13+
while (!Serial);
14+
Serial.begin(115200);
15+
wire.begin();
16+
wire.setClock(400000);
17+
18+
for (uint8_t i = 0; i < sensorCount; i++){
19+
pinMode(xshutPins[i], OUTPUT);
20+
digitalWrite(xshutPins[i], LOW);
21+
}
22+
23+
for (uint8_t i = 0; i < sensorCount; i++){
24+
pinMode(xshutPins[i], INPUT);
25+
delay(10);
26+
sensors[i].setBus(&wire);
27+
sensors[i].setTimeout(500);
28+
if (!sensors[i].init()){
29+
Serial.print("Failed to detect and initialize sensor ");
30+
Serial.println(i);
31+
while (1);
32+
}
33+
34+
sensors[i].setAddress(0x2A + i);
35+
sensors[i].startContinuous(50);
36+
}
37+
}
38+
39+
void loop(){
40+
for (uint8_t i = 0; i < sensorCount; i++){
41+
Serial.print(sensors[i].read());
42+
if (sensors[i].timeoutOccurred()){
43+
Serial.print(" TIMEOUT");
44+
}
45+
Serial.print('\t');
46+
}
47+
Serial.print("\n");
48+
}

examples/tofM/tofM.ino

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <Arduino.h>
2+
#include <Wire.h>
3+
#include <vl53l7cx_class.h>
4+
5+
6+
TwoWire wire(PB7, PB8);
7+
#define DEV_I2C wire
8+
9+
#define SerialPort Serial
10+
11+
#define LPN_PIN PB1
12+
#define I2C_RST_PIN PB0
13+
14+
VL53L7CX sensor_vl53l7cx(&DEV_I2C, LPN_PIN, I2C_RST_PIN);
15+
16+
17+
uint8_t res = VL53L7CX_RESOLUTION_8X8; //VL53L7CX_RESOLUTION_4X4
18+
19+
20+
void setup(){
21+
SerialPort.begin(115200);
22+
DEV_I2C.begin();
23+
sensor_vl53l7cx.begin();
24+
sensor_vl53l7cx.init_sensor();
25+
sensor_vl53l7cx.vl53l7cx_set_resolution(res);
26+
sensor_vl53l7cx.vl53l7cx_start_ranging();
27+
}
28+
29+
void loop(){
30+
VL53L7CX_ResultsData Results;
31+
uint8_t NewDataReady = 0;
32+
uint8_t status;
33+
do {
34+
status = sensor_vl53l7cx.vl53l7cx_check_data_ready(&NewDataReady);
35+
} while (!NewDataReady);
36+
37+
if ((!status) && (NewDataReady != 0)) {
38+
status = sensor_vl53l7cx.vl53l7cx_get_ranging_data(&Results);
39+
for (int y=0; y<8; y++){
40+
for (int x=0; x<8; x++){
41+
Serial.print((int)Results.distance_mm[x+y*8]);
42+
Serial.print(" ");
43+
}
44+
Serial.println();
45+
}
46+
Serial.println();
47+
}
48+
delay(100);
49+
50+
}

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Arduino_Robot_Firmware
2-
version=0.0.1
2+
version=0.0.2
33
author=Arduino, Giovanni di Dio Bruno, Lucio Rossi
44
maintainer=Arduino <[email protected]>
55
sentence=Library and firmware for Arduino Robot

src/Arduino_Robot_Firmware.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ Arduino_Robot_Firmware::Arduino_Robot_Firmware(){
2121

2222
// color sensor
2323
apds9960 = new APDS9960(*wire,APDS_INT);
24+
25+
// servo
26+
servo_A = new Servo();
27+
servo_B = new Servo();
2428
}
2529

2630
int Arduino_Robot_Firmware::begin(){
@@ -44,6 +48,9 @@ int Arduino_Robot_Firmware::begin(){
4448
wire->begin();
4549

4650
beginAPDS();
51+
beginServo();
52+
beginI2Cselect();
53+
connectExternalI2C();
4754

4855
return 0;
4956
}
@@ -97,4 +104,42 @@ int Arduino_Robot_Firmware::getBlue(){
97104

98105
int Arduino_Robot_Firmware::getProximity(){
99106
return bottom_proximity;
107+
}
108+
109+
/******************************************************************************************************/
110+
/* RC Servo A & B */
111+
/******************************************************************************************************/
112+
113+
int Arduino_Robot_Firmware::beginServo(){
114+
servo_A->attach(SERVO_A);
115+
servo_B->attach(SERVO_B);
116+
return 0;
117+
}
118+
119+
void Arduino_Robot_Firmware::setServoA(int position){
120+
servo_A->write(position);
121+
}
122+
123+
void Arduino_Robot_Firmware::setServoB(int position){
124+
servo_B->write(position);
125+
}
126+
127+
/******************************************************************************************************/
128+
/* RC Servo A & B */
129+
/******************************************************************************************************/
130+
131+
int Arduino_Robot_Firmware::beginI2Cselect(){
132+
pinMode(SELECT_I2C_BUS,OUTPUT);
133+
}
134+
135+
void Arduino_Robot_Firmware::setExternalI2C(uint8_t state){
136+
digitalWrite(SELECT_I2C_BUS,state);
137+
}
138+
139+
void Arduino_Robot_Firmware::connectExternalI2C(){
140+
setExternalI2C(LOW);
141+
}
142+
143+
void Arduino_Robot_Firmware::disconnectExternalI2C(){
144+
setExternalI2C(HIGH);
100145
}

src/Arduino_Robot_Firmware.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,26 @@
88
#include "dcmotor.h"
99
#include "motor_control.h"
1010
#include "Arduino_APDS9960.h"
11+
#include <Servo.h>
1112

1213
class Arduino_Robot_Firmware{
1314
private:
1415
APDS9960 * apds9960;
1516
int bottom_red, bottom_green, bottom_blue, bottom_clear, bottom_proximity;
1617

18+
Servo * servo_A;
19+
Servo * servo_B;
20+
21+
TwoWire * wire;
22+
23+
1724
public:
1825
RGBled * led1;
1926
RGBled * led2;
2027
DCmotor * motor_left;
2128
DCmotor * motor_right;
2229
Encoder * encoder_left;
2330
Encoder * encoder_right;
24-
TwoWire * wire;
2531

2632

2733
Arduino_Robot_Firmware();
@@ -42,6 +48,20 @@ class Arduino_Robot_Firmware{
4248
int getGreen(); // green value 0-255
4349
int getBlue(); // blue value 0-255
4450
int getProximity(); // proximity value 0-127
51+
52+
53+
// Servo
54+
int beginServo(); // initialize Servo interfaces
55+
void setServoA(int position); // 0°-180° servo position
56+
void setServoB(int position); // 0°-180° servo position
57+
58+
59+
// I2C select
60+
int beginI2Cselect(); // initialize I2C bus selector
61+
void setExternalI2C(uint8_t state); // set A4,A5 connection on I2C bus 2
62+
void connectExternalI2C(); // allow A4,A5 on nano connector to be attached to I2C bus 2
63+
void disconnectExternalI2C(); // disable the connection on A4,A5
64+
4565
};
4666

4767
#endif

src/pinout_definitions.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@
4444
#define APDS_LED PB6
4545
#define APDS_INT PC10
4646

47+
// I2C ports
4748
#define I2C_1_SDA PB7
4849
#define I2C_1_SCL PB8
50+
#define SELECT_I2C_BUS PB2
51+
4952

5053

5154

0 commit comments

Comments
 (0)