Arduino/MonsterMotorShield/UnoCode
Start Coding edit
You can find the original example file from Sparkfun here.
Starting Point edit
The best place to start tweaking the code is the main loop function.
void loop()
{
motorGo(0, CCW, 0); //Motor1
motorGo(1, CW, 100); //Motor2
delay(2000); //This delay determines the time(ms) the motor runs for.
//Turn 1
- The first argument passed to the function motorGo() can be either 0 or 1. It determines which motor on the pins A1:B1 and A2:B2 are being controlled.
- The second argument can be CCW, or CW. Pretty self-explanatory here, it turns the motor Clockwise(CW) or Counter-clockwise(CCW).
- The third argument that is passed to the motorGo() function represent a pwm(pulse width modulation) integer value. This number has to be between 0 and 1023. The higher this number, the faster you motor will turn.
Copy to Arduino IDE edit
Copy this code over to the Arduino IDE and tweaking things. be an engineer
#define BRAKEVCC 0
#define CW 1
#define CCW 2
#define BRAKEGND 3
#define CS_THRESHOLD 100
int inApin[2] = {7, 4}; // INA: Clockwise input
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input
int pwmpin[2] = {5, 6}; // PWM input
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin)
int statpin = 13;
void setup()
{
Serial.begin(9600);
pinMode(statpin, OUTPUT);
// Initialize digital pins as outputs
for (int i=0; i<2; i++)
{
pinMode(inApin[i], OUTPUT);
pinMode(inBpin[i], OUTPUT);
pinMode(pwmpin[i], OUTPUT);
}
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
}
/*----------------------------
pmw value has to be < 1023.
CCW=CounterClockwise
CW=ClockWise
-----------------------------*/
void loop()
{
motorGo(0, CCW, 0); //Motor1
motorGo(1, CW, 100); //Motor2
delay(2000); //This delay determines the time(ms) the motor runs for.<br><br>
//Turn 1
motorGo(0, CW, 600); // The higher the pwm value, the quicker the car turns
motorGo(1, CW, 180); // The higher the pwm value, the sharper the car turns
delay(1000);
motorGo(0, CCW, 0);
motorGo(1, CW, 100);
delay(8000);
if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD))
digitalWrite(statpin, HIGH);
}
void motorOff(int motor)
{
// Initialize braked
for (int i=0; i<2; i++)
{
digitalWrite(inApin[i], LOW);
digitalWrite(inBpin[i], LOW);
}
analogWrite(pwmpin[motor], 0);
}
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm)
{
if (motor <= 1)
{
if (direct <=4)
{
// Set inA[motor]
if (direct <=1)
digitalWrite(inApin[motor], HIGH);
else
digitalWrite(inApin[motor], LOW);
// Set inB[motor]
if ((direct==0)||(direct==2))
digitalWrite(inBpin[motor], HIGH);
else
digitalWrite(inBpin[motor], LOW);
analogWrite(pwmpin[motor], pwm);
}
}
}