Arduino/MonsterMotorShield/UnoCode
Appearance
Start Coding
[edit | edit source]You can find the original example file from Sparkfun here.
Starting Point
[edit | edit source]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 | edit source]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);
}
}
}