This code enables our mouse to go round the track using the two error methods.
Dependencies: Nucleo_blink_led mbed
Fork of Nucleo_blink_led by
driveFunc.cpp
- Committer:
- JamieBignell
- Date:
- 2018-04-28
- Revision:
- 7:11dd5581c763
- Parent:
- 6:a652deaae134
File content as of revision 7:11dd5581c763:
#include <mbed.h> #include <funcdef.h> void driveFunc() { //USE TEMPORARY VARIABLES TO WORK OUT A PULSE LENGTH FOR THE MOTORS, DICTATED BY ERROR OFFSET leftMotorValTemp=initialMotorspeed-newPIDs; rightMotorValTemp=initialMotorspeed+newPIDs; //rightMotorValTemp=53.9*exp(2.89*0.001*rightMotorValTemp); //leftMotorValTemp=53.9*exp(2.89*0.001*leftMotorValTemp); //IF THE MOTOR SPEED GOES OUTSIDE POSSIBLE BOUNDARIES, CLAMP if (leftMotorValTemp>=1000) { leftMotorValTemp=999; } if (rightMotorValTemp>=1000) { rightMotorValTemp=999; } if (leftMotorValTemp<0) { leftMotorValTemp=0; } if (rightMotorValTemp<0) { rightMotorValTemp=0; } for (int i=0;i<=10;i++) { if ((leftMotorValTemp>=motorLookup[i][0]) && (leftMotorValTemp<motorLookup[i+1][0])) { leftMotorValTemp=motorLookup[i][1]+(leftMotorValTemp-motorLookup[i][0])*((motorLookup[i+1][1]-motorLookup[i][1])/(motorLookup[i+1][0]-motorLookup[i][0])); break; } } for (int i=0;i<=10;i++) { if ((rightMotorValTemp>=motorLookup[i][0]) && (rightMotorValTemp<motorLookup[i+1][0])) { rightMotorValTemp=motorLookup[i][1]+(rightMotorValTemp-motorLookup[i][0])*((motorLookup[i+1][1]-motorLookup[i][1])/(motorLookup[i+1][0]-motorLookup[i][0])); break; } } if (!stopMotors) { leftMotorVal.pulsewidth_us(leftMotorValTemp); rightMotorVal.pulsewidth_us(rightMotorValTemp); } else { //leftMotorVal.pulsewidth_us(0); //rightMotorVal.pulsewidth_us(0); //for(;;){} } return; }