Loading...
  Show Posts
Pages: [1]
1  Using Arduino / Programming Questions / Re: error on my sketch on: February 14, 2013, 03:49:48 am

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 ?

Code:
#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 smiley-sad
2  Using Arduino / Project Guidance / need suggestion and advice on: February 13, 2013, 10:00:11 am
Code:
// map motor poles to Arduino pins
#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 max_speed 100

long sensors_average;
int sensors_sum;
int position;
long sensors[] = {
  0, 0, 0, 0, 0}; // Array used to store 5 readings for 5
int proportional;
int integral;
int derivative;
int last_proportional;
int Kp;
int Ki;
int Kd;
//int max_speed;
int left_speed;
int right_speed;
int error_value;
int threshold;
int readings;
int set_point;
int motor_right;
int motor_left;
void setup()
{
  // set mapped L293D motor1 and motor 2 enable pins on Arduino to output (to turn on/off motor1 and motor2 via L293D)
  pinMode(motor_right, OUTPUT);
  pinMode(motor_left, OUTPUT);

  // set mapped motor poles to Arduino pins (via L293D)
  pinMode( motor1pole1 , OUTPUT);
  pinMode( motor1pole2, OUTPUT);
  pinMode( motor2pole1, OUTPUT);
  pinMode( motor2pole2 , OUTPUT);
}

void loop()
{
  sensors_read(); //Reads sensor values and computes sensor sum and weighted average
  pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd
  calc_turn(); //Computes the error to be corrected
  motor_drive(right_speed, left_speed); //Sends PWM signals to the motors
}

void pid_calc()
{
  position = int(sensors_average / sensors_sum);
  proportional = position - set_point; // Replace set_point by your set point
  integral = integral + proportional;
  derivative = proportional - last_proportional;
  last_proportional = proportional;
  error_value = int(proportional * Kp + integral * Ki + derivative * Kd);
}

void sensors_read()
{
  sensors_average = 0;
  sensors_sum = 0;
  for (int i = 0; i < 5; i++)
  {
    sensors[i] = analogRead(i);
    // Readings less than threshold are filtered out for noise
    if (sensors[i] < threshold)
      sensors[i] = 0;
    sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor
    //readings
    sensors_sum += int(sensors[i]); //Calculating sum of sensor readings
  }
}

void calc_turn()
{ //Restricting the error value between +256.
  if (error_value < -256)
  {
    error_value = -256;
  }
  if (error_value > 256)
  {
    error_value = 256;
  }
  // If error_value is less than zero calculate right turn speed values
  if (error_value < 0)
  {
    right_speed = max_speed + error_value;
    left_speed = max_speed;
  }
  // If error_value is greater than zero calculate left turn values
  else
  {
    right_speed = max_speed;
    left_speed = max_speed - error_value;
  }
}

void motor_drive(int right_speed, int left_speed)
{ // Drive motors according to the calculated values for a turn
analogWrite(motor_right, right_speed);
analogWrite(motor_left, left_speed);
delay(50); // Optional
}

above its my line tracer PID project i have burned and no error but maybe all of you can give advice or suggest because im nood:D
3  Using Arduino / Programming Questions / Re: error on my sketch on: February 13, 2013, 09:36:16 am
No.  You declared motor_drive as an int then tried to use it as a function
Code:
int motor_drive;
Code:
motor_drive(right_speed, left_speed); //Sends PWM signals to the motors
Declaring it as another type will not solve the problem.
Should there be a function in your code that causes both motors to run ?
yeah i want both motors run sir and i make a functian and ^^ no errors thx sir
4  Using Arduino / Programming Questions / Re: error on my sketch on: February 13, 2013, 04:08:17 am
@nick
gosh its diffrent thx for help me nick

@awol
so i must use double not int?
5  Using Arduino / Programming Questions / Re: error on my sketch on: February 13, 2013, 02:49:08 am
cant see sir
i dont know looks the code is same

now i enable driver motor and got the prob


Code:
// map motor poles to Arduino pins
#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

long sensors_average;
int sensors_sum;
int position;
long sensors[] = {
  0, 0, 0, 0, 0}; // Array used to store 5 readings for 5
int proportional;
int integral;
int derivative;
int last_proportional;
int Kp;
int Ki;
int Kd;
int max_speed;
int left_speed;
int right_speed;
int error_value;
int threshold;
int readings;
int set_point;
int motor_drive;
void setup()
{
  // 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);
}

void loop()
{
  sensors_read(); //Reads sensor values and computes sensor sum and weighted average
  pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd
  calc_turn(); //Computes the error to be corrected
  motor_drive(right_speed, left_speed); //Sends PWM signals to the motors
}

void pid_calc()
{
  position = int(sensors_average / sensors_sum);
  proportional = position - set_point; // Replace set_point by your set point
  integral = integral + proportional;
  derivative = proportional - last_proportional;
  last_proportional = proportional;
  error_value = int(proportional * Kp + integral * Ki + derivative * Kd);
}

void sensors_read()
{
  sensors_average = 0;
  sensors_sum = 0;
  for (int i = 0; i < 5; i++)
  {
    sensors[i] = analogRead(i);
    // Readings less than threshold are filtered out for noise
    if (sensors[i] < threshold)
      sensors[i] = 0;
    sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor
    //readings
    sensors_sum += int(sensors[i]); //Calculating sum of sensor readings
  }
}

void calc_turn()
{ //Restricting the error value between +256.
  if (error_value < -256)
  {
    error_value = -256;
  }
  if (error_value > 256)
  {
    error_value = 256;
  }
  // If error_value is less than zero calculate right turn speed values
  if (error_value < 0)
  {
    right_speed = max_speed + error_value;
    left_speed = max_speed;
  }
  // If error_value is greater than zero calculate left turn values
  else
  {
    right_speed = max_speed;
    left_speed = max_speed - error_value;
  }
}








sketch_feb13a.ino: In function 'void loop()':
sketch_feb13a:55: error: 'motor_drive' cannot be used as a function
6  Using Arduino / Programming Questions / Re: error on my sketch on: February 13, 2013, 02:07:07 am
thans Nick and crossroads
@liudr thats whay im ask to this topic smiley-sad

oke now i want to try on my bot smiley-grin thanks
7  Using Arduino / Programming Questions / Re: error on my sketch on: February 13, 2013, 01:08:31 am
thanks now i will fix the code
Code:
long sensors_average;
int sensors_sum;
int position;
long sensors[] = {0, 0, 0, 0, 0}; // Array used to store 5 readings for 5
int proportional;
int integral;
int derivative;
int last_proportional;
int Kp;
int Ki;
int Kd;
int max_speed;
int left_speed;
int right_speed;
int error_value;
int threshold;
int readings;







void setup()
{
  
}
void loop()
{
sensors_read(); //Reads sensor values and computes sensor sum and weighted average
pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd
calc_turn(); //Computes the error to be corrected
//motor_drive(right_speed, left_speed); //Sends PWM signals to the motors
}


void pid_calc()
{
position = int(sensors_average / sensors_sum);
proportional = position – set_point; // Replace set_point by your set point
integral = integral + proportional;
derivative = proportional - last_proportional;
last_proportional = proportional;
error_value = int(proportional * Kp + integral * Ki + derivative * Kd);
}

void sensors_read()
{ sensors_average = 0;
sensors_sum = 0;
for (int i = 0; i < 5; i++)
{
sensors[i] = analogRead(i);
// Readings less than threshold are filtered out for noise
if (sensors[i] < threshold)
sensors[i] = 0;
sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor
//readings
sensors_sum += int(sensors[i]); //Calculating sum of sensor readings
}
}

void calc_turn()
{ //Restricting the error value between +256.
if (error_value < -256)
{
error_value = -256;
}
if (error_value > 256)
{
error_value = 256;
}
// If error_value is less than zero calculate right turn speed values
if (error_value < 0)
{
right_speed = max_speed + error_value;
left_speed = max_speed;
}
// If error_value is greater than zero calculate left turn values
else
{
right_speed = max_speed;
left_speed = max_speed - error_value;
}
}


errors:










sketch_feb13a:42: error: stray '\' in program
sketch_feb13a.ino: In function 'void pid_calc()':
sketch_feb13a:42: error: expected `;' before 'u2013'
8  Using Arduino / Programming Questions / error on my sketch on: February 13, 2013, 12:36:42 am
i cant fix this error can someone help me?this project i have copied from buildautomnous line follower

Code:
long sensors_average;
int sensors_sum;
int position;
long sensors[] = {0, 0, 0, 0, 0}; // Array used to store 5 readings for 5
sensors.
int proportional;
int integral;
int derivative;
int last_proportional;
int Kp;
int Ki;
int Kd;
int max_speed;
int left_speed;
int right_speed;
int error_value;








void setup()
{
  
}
void loop()
sensors_read(); //Reads sensor values and computes sensor sum and weighted average
pid_calc(); //Calculates position[set point] and computes Kp,Ki and Kd
calc_turn(); //Computes the error to be corrected
motor_drive(right_speed, left_speed); //Sends PWM signals to the motors
}


void pid_calc()
{ position = int(sensors_average / sensors_sum);
proportional = position – set_point; // Replace set_point by your set point
integral = integral + proportional;
derivative = proportional - last_proportional;
last_proportional = proportional;
error_value = int(proportional * Kp + integral * Ki + derivative * Kd);
}

void sensors_read()
{
sensors_average = 0;
sensors_sum = 0;
for (int i = 0; i < 5; i++)
{
sensors[i] = analogRead(i);
sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean of the sensor
readings
sensors_sum += int(sensors[i]); //Calculating sum of sensor readings
}
}

void calc_turn()
{ //Restricting the error value between +256.
if (error_value < -256)
{
error_value = -256;
}
if (error_value > 256)
{
error_value = 256;
}
// If error_value is less than zero calculate right turn speed values
if (error_value < 0)
{
right_speed = max_speed + error_value;
left_speed = max_speed;
}
// If error_value is greater than zero calculate left turn values
else
{
right_speed = max_speed;
left_speed = max_speed - error_value;
}
}

the error:











sketch_feb13a:40: error: stray '\' in program
sketch_feb13a:6: error: expected constructor, destructor, or type conversion before '.' token
sketch_feb13a:31: error: expected initializer before 'sensors_read'
sketch_feb13a:32: error: expected constructor, destructor, or type conversion before ';' token
sketch_feb13a:33: error: expected constructor, destructor, or type conversion before ';' token
sketch_feb13a:34: error: expected constructor, destructor, or type conversion before '(' token
sketch_feb13a:35: error: expected declaration before '}' token
9  Using Arduino / Programming Questions / Re: PID library on: February 12, 2013, 08:27:25 pm
up
10  Using Arduino / Programming Questions / PID library on: February 12, 2013, 01:44:36 pm
i want to make PID linefollower so i use the library of PID_V1 http://playground.arduino.cc/Code/PIDLibrary
make an PID linefollower i must make a formula for PID count like
KP KD KI
for example:
void pid_calc()
{ position = int(sensors_average / sensors_sum);
proportional = position – set_point; // Replace set_point by your set point
integral = integral + proportional;
derivative = proportional - last_proportional;
last_proportional = proportional;
void calc_turn()
{ //Restricting the error value between +256.
if (error_value < -256)
{
error_value = -256;
}
if (error_value > 256)
{
error_value = 256;
}
// If error_value is less than zero calculate right turn speed values
if (error_value < 0)
{
right_speed = max_speed + error_value;
left_speed = max_speed;
}
// If error_value is greater than zero calculate left turn values
else
{
right_speed = max_speed;
left_speed = max_speed - error_value;
}
}

the code i have copied from pdf build auto linefollower PID ,its famous PDF arduino but i cant use it and understand it because itus very complicated with too many errors

now i wanna use PID_V1 library but i dont understand what the function mean it eventhough i read from the arduino playround but i cant applicated to code above

can some one help to me?sorry if my english noob
Pages: [1]