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
Fork of 12_10_15 by
main.cpp
- Committer:
- benparkes
- Date:
- 2015-10-13
- Revision:
- 0:aca11cc796fd
- Child:
- 1:162879c2e17c
File content as of revision 0:aca11cc796fd:
#include "mbed.h"
#define wheelc 0.1759292
//Status LED
DigitalOut led(LED1);
//Motor PWM (speed)
PwmOut PWMA(PA_8);
PwmOut PWMB(PB_4);
//Motor Direction
DigitalOut DIRA(PA_9);
DigitalOut DIRB(PB_10);
//Hall-Effect Sensor Inputs
DigitalIn HEA1(PB_2);
DigitalIn HEA2(PB_1);
DigitalIn HEB1(PB_15);
DigitalIn HEB2(PB_14);
//On board switch
DigitalIn SW1(USER_BUTTON);
//Use the serial object so we can use higher speeds
Serial terminal(USBTX, USBRX);
//Timer used for measuring speeds
Timer timer;
//Enumerated types
enum DIRECTION {FORWARD=0, REVERSE};
enum PULSE {NOPULSE=0, PULSE};
enum SWITCHSTATE {PRESSED=0, RELEASED};
//Debug GPIO
DigitalOut probe(D10);
//Duty cycles
float dutyA = 1.0f; //100%
float dutyB = 1.0f; //100%
int forward(float distance, int speed)
{
//Set motor period to 100Hz
dutyA = 5;
dutyB = 5;
PWMA.period_ms(speed);
PWMB.period_ms(speed);
//Set initial motor speed to stop
PWMA.write(dutyA); //Set duty cycle (%)
PWMB.write(dutyB); //Set duty cycle (%)
}
int turn(int degrees, bool direction)
{
//Set motor period to 100Hz
dutyA = 10;
dutyB = 10;
PWMA.period_ms(200);
PWMB.period_ms(0);
//Set initial motor speed to stop
PWMA.write(dutyA); //Set duty cycle (%)
PWMB.write(dutyB); //Set duty cycle (%)
wait(0.676);
dutyA = 0;
dutyB = 0;
PWMA.write(dutyA); //Set duty cycle (%)
PWMB.write(dutyB); //Set duty cycle (%)
}
int main()
{
//Configure the terminal to high speed
terminal.baud(115200);
//Set initial motor direction
DIRA = FORWARD;
DIRB = FORWARD;
//Set initial motor speed to stop
PWMA.write(0.0f); //0% duty cycle
PWMB.write(0.0f); //0% duty cycle
while(1) {
while (SW1 == PRESSED) {
wait(0.01);
while(SW1 == RELEASED) {
for (int i = 0; i<2; i++) {
forward(1,1);
wait(1.5);
turn(90,1);
forward(1,1);
wait(0.75);
turn(90,1);
}
sleep();
}
}
}
//Set initial motor speed to stop
PWMA.write(0); //Set duty cycle (%)
PWMB.write(0); //Set duty cycle (%)
}
