Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Motor LSM9DS1_Library_cal PinDetect HC_SR04_Ultrasonic_Library
main.cpp
- Committer:
- cbrice6
- Date:
- 2018-11-19
- Revision:
- 0:9e014841f2b7
- Child:
- 1:92f6242c0196
File content as of revision 0:9e014841f2b7:
#include "mbed.h"
#include "LSM9DS1.h" // IMU
#include "ultrasonic.h" // Ultrasonic Sensor
#include "Motor.h" // Motor Drivers
//---------------------|
// PIN INITIALIZATIONS |
//---------------------|
// Setup IMU pins:
LSM9DS1 IMU(p28, p27, 0xD6, 0x3C); // SDA to p28, SCL to p27..
// Setup Motor Driver pins:
Motor Lfront(p21, p6, p5); // PWM to p21, forward to p6, reverse to p5...
Motor Lback(p22, p8, p7); // PWM to p22, forward to p8, reverse to p7...
Motor Rfront(p23, p10, p9); // PWM to p23, forward to p10, reverse to p9...
Motor Rback(p24, p12, p11); // PWM to p24, forward to p12, reverse to p11...
Timer t;
//-----------------------|
// CLASS INITIALIZATIONS |
//-----------------------|
class mctrl {
public:
void stop(void);
void fwd(float s);
void rev(float s);
void turnLeft(float s);
void turnRight(float s);
private:
float tcurr;
float turntime
};
//------------------|
// HELPER FUNCTIONS |
//------------------|
void mctrl::stop(void)
{
Lfront.speed(0);
Lback.speed(0);
Rfront.speed(0);
Rback.speed(0);
wait(0.02);
}
void mctrl::fwd(float s)
{
mctrl.stop();
Lfront.speed(s);
Lback.speed(s);
Rfront.speed(s);
Rback.speed(s);
wait(0.02);
}
void mctrl::rev(float s)
{
mctrl.stop();
Lfront.speed(-s);
Lback.speed(-s);
Rfront.speed(-s);
Rback.speed(-s);
wait(0.02);
}
void mctrl::turnLeft(float s)
{
mctrl.stop();
tcurr = t.read();
while ((t.read() - tcurr) < turntime) {
Lfront.speed(-s);
Lback.speed(-s);
Rfront.speed(s);
Rback.speed(s);
}
mctrl.stop();
wait(0.02);
}
void mctrl::turnRight(float s)
{
mctrl.stop();
tcurr = t.read();
while ((t.read() - tcurr) < turntime) {
Lfront.speed(s);
Lback.speed(s);
Rfront.speed(-s);
Rback.speed(-s);
}
mctrl.stop();
wait(0.02);
}
void dist(int distance) // NOTE: by default "distance" is in mm...
{
if (distance < 150) {
// PUT CODE HERE TO TRIGGER WHEN DISTANCE READS LESS THAN 15cm
// 1) Turn right.
// 2) Go forward __ seconds.
// 3) Turn right.
// 4) Continue forward until wall.
}
}
//------------------------------|
// PIN INITIALIZATIONS (cont'd) |
//------------------------------|
// Setup Ultrasonic Sensor pins:
ultrasonic usensor(p13, p14, .07, 1, &dist); // trigger to p13, echo to p14...
// update every .07 secs w/ timeout after 1 sec...
// call "dist" when the distance changes...
//---------------|
// MAIN FUNCTION |
//---------------|
int main() {
// Initialize and calibrate the IMU:
IMU.begin();
if (!IMU.begin()) {
pc.printf("Failed to communicate with LSM9DS1.\n");
}
IMU.calibrate();
// Initialize the Ultrasonic Sensor:
usensor.startUpdates();
// Initialize the Timer:
t.start();
while(1) {
// Read IMU gyro:
while(!IMU.gyroAvailable());
IMU.readGyro();
// X - IMU.calcGyro(IMU.gx)
// Y - IMU.calcGyro(IMU.gx)
// Z - IMU.calcGyro(IMU.gz)
// Read Ultrasonic Sensor:
usensor.checkDistance();
// ...
wait(0.1);
}
}