0

It seems that I can't get the DC Motor function to work while also having servos driven off the other ports :(

#include "Arduino.h"
#include <Servo.h>
int pinI1=8;//define I1 interface
int pinI2=11;//define I2 interface 
int speedpinA=9;//enable motor A
int pinI3=12;//define I3 interface 
int pinI4=13;//define I4 interface 
int speedpinB=10;//enable motor 
int spead =220;//define the spead of motor
Servo SteeringServo; // create servo object to control a servo 
void setup()
{
 // Steering servo pin setup
 SteeringServo.attach(5); // attaches the servo on pin 9 to the servo object
 pinMode(pinI1,OUTPUT);
 pinMode(pinI2,OUTPUT);
 pinMode(speedpinA,OUTPUT);
 pinMode(pinI3,OUTPUT);
 pinMode(pinI4,OUTPUT);
 pinMode(speedpinB,OUTPUT);
 Serial.begin(9600);
}
void forward()
{
 analogWrite(speedpinA,spead);//input a simulation value to set the speed
 analogWrite(speedpinB,spead);
 digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
 digitalWrite(pinI3,LOW);
 digitalWrite(pinI2,LOW);//turn DC Motor A move anticlockwise
 digitalWrite(pinI1,HIGH);
}
void backward()//
{
 analogWrite(speedpinA,spead);//input a simulation value to set the speed
 analogWrite(speedpinB,spead);
 digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
 digitalWrite(pinI3,HIGH);
 digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
 digitalWrite(pinI1,LOW);
}
void left()//
{
 analogWrite(speedpinA,spead);//input a simulation value to set the speed
 analogWrite(speedpinB,spead);
 digitalWrite(pinI4,HIGH);//turn DC Motor B move clockwise
 digitalWrite(pinI3,LOW);
 digitalWrite(pinI2,HIGH);//turn DC Motor A move clockwise
 digitalWrite(pinI1,LOW);
}
void right()//
{
 analogWrite(speedpinA,spead);//input a simulation value to set the speed
 analogWrite(speedpinB,spead);
 digitalWrite(pinI4,LOW);//turn DC Motor B move anticlockwise
 digitalWrite(pinI3,HIGH);
 digitalWrite(pinI2,LOW);//turn DC Motor A move clockwise
 digitalWrite(pinI1,HIGH);
}
void stop()//
{
 digitalWrite(speedpinA,LOW);// Unenble the pin, to stop the motor. this should be done to avid damaging the motor. 
 digitalWrite(speedpinB,LOW);
 delay(1000);
}
void loop()
{
 left();
 delay(15000); 
 stop();
 right();
 delay(1000);
 stop();
 // delay(2000); Already commented out
 //forward();
 // delay(2000);
 // stop();
// backward();
 delay(12000); 
 stop(); 
}
Nick Gammon
38.9k13 gold badges69 silver badges125 bronze badges
asked Aug 10, 2015 at 4:44

1 Answer 1

1

Your code:

int speedpinA=9;//enable motor A
...
int speedpinB=10;//enable motor 
...
 analogWrite(speedpinA,spead);//input a simulation value to set the speed
 analogWrite(speedpinB,spead);

See https://www.arduino.cc/en/reference/servo

On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins.

(My emphasis).

So, you can't do that, exactly. Perhaps choose other pins for the analogWrite, pins that analogWrite supports, that are not 9 and 10.

answered Aug 10, 2015 at 5:51

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.