Simple Example of Program for the Sparkfun Monster Moto Shield https://www.sparkfun.com/products/10182 with the ST Nucleo F401RE Adapted by : Didier Donsez From the Arduino sketch example coded by: Jim Lindblom, SparkFun Electronics License: CC-SA 3.0, feel free to use this code however you'd like. Please improve upon it! Let me know how you've made it better. This is really simple example code to get you some basic functionality with the MonsterMoto Shield. The MonsterMote uses two VNH2SP30 high-current full-bridge motor drivers.
/media/uploads/donsez/dscn4185.jpg
Revision 0:50670948e4d6, committed 2014-08-01
- Comitter:
- donsez
- Date:
- Fri Aug 01 21:44:44 2014 +0000
- Commit message:
- Initial commit of the example for MonsterMotoShield;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 50670948e4d6 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Aug 01 21:44:44 2014 +0000 @@ -0,0 +1,167 @@ +#include "mbed.h" +/* + Example of Program for the MonsterMoto Shield on the ST Nucleo F401RE + Code by : Didier Donsez + + Based on the Arduino sketch example coded by: Jim Lindblom, SparkFun Electronics + + License: CC-SA 3.0, feel free to use this code however you'd like. + Please improve upon it! Let me know how you've made it better. + + This is really simple example code to get you some basic + functionality with the MonsterMoto Shield. The MonsterMote uses + two VNH2SP30 high-current full-bridge motor drivers. + */ + +#define LOW 0 +#define HIGH 1 + +DigitalOut statpin(D13, LOW); + +#define MAXSPEED 1.0f + +#define BRAKEVCC 0 +#define CW 1 +#define CCW 2 +#define BRAKEGND 3 +#define CS_THRESHOLD 0.5f + + +/* VNH2SP30 pin definitions */ +DigitalOut inLeftApin(D7, LOW); // INA: Clockwise input +DigitalOut inRightApin(D4, LOW); // INA: Clockwise input +DigitalOut inLeftBpin(D8, LOW); // INB: Counter-clockwise input +DigitalOut inRightBpin(D9, LOW); // INB: Counter-clockwise input +PwmOut pwmLeftpin(PB_4); // PWM input +PwmOut pwmRightpin(PB_10); // PWM input +AnalogIn csLeftpin(A2); // CS: Current sense ANALOG input +AnalogIn csRightpin(A3); // CS: Current sense ANALOG input +AnalogIn enLeftpin(A0); // EN: Status of switches output (Analog pin) +AnalogIn enRightpin(A1); // EN: Status of switches output (Analog pin) + + +void setupShield() +{ + pwmLeftpin.period_ms(10); + pwmLeftpin.pulsewidth_ms(1); + pwmLeftpin.write(0.0f); + + pwmRightpin.period_ms(10); + pwmRightpin.pulsewidth_ms(1); + pwmRightpin.write(0.0f); +} + +void checkShield() +{ + if ((csLeftpin.read_u16() < CS_THRESHOLD) && (csRightpin.read_u16() < CS_THRESHOLD)) + statpin.write(HIGH); + else + statpin.write(LOW); +} + + +void stopLeftMotor() +{ + inLeftApin.write(LOW); + inLeftBpin.write(LOW); + pwmLeftpin.write(0.0f); +} + +void stopRightMotor() +{ + inRightApin.write(LOW); + inRightBpin.write(LOW); + pwmRightpin.write(0.0f); +} + +/* + set a motor going in a specific direction + the motor will continue going in that direction, at that speed + until told to do otherwise. + + direct: Should be between 0 and 3, with the following result + 0: Brake to VCC + 1: Clockwise + 2: CounterClockwise + 3: Brake to GND + +BRAKEVCC 0 +CW 1 +CCW 2 +BRAKEGND 3 + +pwm: should be a value between 0.0f and 1.0f, higher the number, the faster it'll go + */ + +void goLeftMotor(uint8_t direct, float percent) +{ + if (direct <=4) + { + if (direct <=1) + inLeftApin.write(HIGH); + else + inLeftApin.write(LOW); + + if ((direct==0)||(direct==2)) + inLeftBpin.write(HIGH); + else + inLeftBpin.write(LOW); + + pwmLeftpin.write(percent); + } +} + +void goRightMotor(uint8_t direct, float percent) +{ + if (direct <=4) + { + if (direct <=1) + inRightApin.write(HIGH); + else + inRightApin.write(LOW); + + if ((direct==0)||(direct==2)) + inRightBpin.write(HIGH); + else + inRightBpin.write(LOW); + + pwmRightpin.write(percent); + } +} + + +void setup() +{ + setupShield(); +} + +void loop() +{ + goLeftMotor(CW, MAXSPEED); + goRightMotor(CCW, MAXSPEED); + checkShield(); + wait_ms(5000); + + stopLeftMotor(); + stopRightMotor(); + checkShield(); + wait_ms(2000); + + goLeftMotor(CCW, MAXSPEED); + goRightMotor(CW, MAXSPEED); + checkShield(); + wait_ms(5000); + + stopLeftMotor(); + stopRightMotor(); + checkShield(); + wait_ms(2000); +} + +int main() { + setup(); + while(1) { + loop(); + } +} + \ No newline at end of file
diff -r 000000000000 -r 50670948e4d6 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Aug 01 21:44:44 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/6213f644d804 \ No newline at end of file