xulingxuling23:
yeah i want both motors run sir and i make a functian and ^^ no errors thx sir
Do you know how to make one motor run, either way will do to start with ?
You are probably using a motor shield (which one ?) Are there any example programs for it ?
xulingxuling23:
yeah i want both motors run sir and i make a functian and ^^ no errors thx sir
Do you know how to make one motor run, either way will do to start with ?
You are probably using a motor shield (which one ?) Are there any example programs for it ?
#define motor1pole1 2
#define motor1pole2 3
#define motor2pole1 7
#define motor2pole2 8
// map L293d motor enable pins to Arduino pins
#define enablePin1 9
#define enablePin2 10
#define M1_MAX_SPEED 100
#define M2_MAX_SPEED 100
#define motordelay 30
#define debugmotorsec 3000
void setup() {
Serial.begin(9600);
// set mapped L293D motor1 and motor 2 enable pins on Arduino to output (to turn on/off motor1 and motor2 via L293D)
pinMode(enablePin1, OUTPUT);
pinMode(enablePin2, OUTPUT);
// set mapped motor poles to Arduino pins (via L293D)
pinMode( motor1pole1 , OUTPUT);
pinMode( motor1pole2, OUTPUT);
pinMode( motor2pole1, OUTPUT);
pinMode( motor2pole2 , OUTPUT);
motorspeed(0, 0);
}
int mspeed = 100; // pick a starting speed up to 255
void loop() {
// set speed of motor 1 and 2 to same speed
motorspeed(mspeed, mspeed);
// spin motor 1 only in one direction
Serial.print("MOTOR 1 FORWARD @ SPEED: ");
Serial.println(mspeed);
motorforward(1);
delay(debugmotorsec);
motorstop(1);
// spin motor 2 only in one direction
Serial.print("MOTOR 2 FORWARD @ SPEED: ");
Serial.println(mspeed);
motorforward(2);
delay(debugmotorsec);
motorstop(2);
// spin motor 1 only in opposite direction
Serial.print("MOTOR 1 BACK @ SPEED: ");
Serial.println(mspeed);
motorback(1);
delay(3000);
motorstop(1);
// spin motor 2 only in opposite direction
Serial.print("MOTOR 2 BACK @ SPEED: ");
Serial.println(mspeed);
motorback(2);
delay(debugmotorsec);
motorstop(2);
// stop both motors 1 and 2
Serial.println("BOTH MOTORS STOP FOR 2 SEC.");
motorstop(1);
motorstop(2);
delay(2000);
// spin both motors in one direction
Serial.print("BOTH MOTORS FORWARD @ SPEED: ");
Serial.println(mspeed);
motorforward(1);
motorforward(2);
delay(debugmotorsec);
// stop both motors
Serial.println("BOTH MOTORS STOP FOR 2 SEC.");
motorstop(1);
motorstop(2);
delay(2000);
// spin both motors in opposite direction
Serial.print("BOTH MOTORS BACK @ SPEED: ");
Serial.println(mspeed);
motorback(1);
motorback(2);
delay(debugmotorsec);
// stop both motors
Serial.println("BOTH MOTORS STOP FOR 2 SEC.");
motorstop(1);
motorstop(2);
delay(2000);
// spin both motors but in opposite directions
Serial.print("MOTOR1 FORWARD | MOTOR2 BACK @ SPEED: ");
Serial.println(mspeed);
motorforward(1);
motorback(2);
delay(debugmotorsec);
// stop both motors
Serial.println("BOTH MOTORS STOP FOR 2 SEC.");
motorstop(1);
motorstop(2);
delay(2000);
// spin both motors in the other opposite direction
Serial.print("MOTOR1 BACK | MOTOR2 FORWARD @ SPEED: ");
Serial.println(mspeed);
motorback(1);
motorforward(2);
delay(debugmotorsec);
// stop both motors
Serial.println("BOTH MOTORS STOP FOR 2 SEC.");
motorstop(1);
motorstop(2);
delay(2000);
mspeed += 50; // add 50 to speed of motor spin. Max speed 255
// set speed of motor 1 and 2 to same new speed
motorspeed(mspeed,mspeed);
}
// MOTOR FUNCTIONS
void motorstop(int motornum){
delay(motordelay);
if (motornum == 1) {
digitalWrite(motor1pole1, LOW);
digitalWrite(motor1pole2, LOW);
}
else if (motornum == 2) {
digitalWrite(motor2pole1, LOW);
digitalWrite(motor2pole2, LOW);
}
delay(motordelay);
}
void motorforward(int motornum){
if (motornum == 1) {
digitalWrite(motor1pole1, HIGH);
digitalWrite(motor1pole2, LOW);
}
else if (motornum == 2) {
digitalWrite(motor2pole1, LOW);
digitalWrite(motor2pole2, HIGH);
}
delay(motordelay);
}
void motorback(int motornum){
if (motornum == 1) {
digitalWrite(motor1pole1, LOW);
digitalWrite(motor1pole2, HIGH);
}
else if (motornum == 2) {
digitalWrite(motor2pole1, HIGH);
digitalWrite(motor2pole2, LOW);
}
delay(motordelay);
}
void motorspeed(int motor1speed, int motor2speed) {
if (motor1speed > M1_MAX_SPEED ) motor1speed = M1_MAX_SPEED; // limit top speed
if (motor2speed > M2_MAX_SPEED ) motor2speed = M2_MAX_SPEED; // limit top speed
if (motor1speed < 0) motor1speed = 0; // keep motor above 0
if (motor2speed < 0) motor2speed = 0; // keep motor speed above 0
analogWrite(enablePin1, motor1speed);
analogWrite(enablePin2, motor2speed);
}
here the code is succes working but i cant use on my PID program
here the code is succes working but i cant use on my PID program
Since you didn't volunteer, I'll drag it out of you. Why can't you? PID computes an output based on an input and a setup, with the objective of moving the input closer to the setpoint, by changing the output.
If the setpoint is the desired speed, and the input is the actual speed, the output would be the required change in speed/pwm setting/etc. to get the current speed closer to the desired speed.
It isn't clear what your inputs, outpoints, or setpoints would be, though.