unsigned long sensors_average = 0;
unsigned long sensors_sum = 0;
int integral, differential, proportional, last_proportional;
int derivative;
int error_value;
int Ki=1;
int Kd=1;
int Kp=1;
int set_point = 1465;
int position2;
int sensor1, sensor2, sensor3;
long sensors[] = { 0, 0, 0} ;
int i;void setup()
{Serial.begin(9600); //Necessary to set up Serial port
}void loop() {
Sum_average_IR();
reading_IR();
//pid_calc();
Serial.println();
i=0;
delay(1000);
}void Sum_average_IR()
{
for ( i=0; i<3; i++) {
sensors = analogRead(i);
sensors_average += sensors * i * 10; //Calculating the weighted mean
sensors_sum += sensors ;
* }** position2 = (int) (sensors_average/ sensors_sum ) ;*
* Serial.print("Calculation: ");*
* Serial.print(sensors_average);
_ Serial.print(' ');_
Serial.print(sensors_sum);
_ Serial.print(' ');
Serial.print(position2);
Serial.print(' ');
Serial.println();
}
void pid_calc()
{
proportional = position2 - 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);
Serial.print("Lproportional: ");
Serial.print(last_proportional);
Serial.print(' ');
Serial.println();
}
void reading_IR() {
Serial.print("Reading: ");
Serial.print(analogRead(0));
Serial.print(' ');
Serial.print(analogRead(2));
Serial.print(' ');
Serial.print(analogRead(4));
Serial.println(' ');
//delay(100); //Set the number to change frequency of readings.
}[/quote]*
Hi Guys, im having problem in variable type, what to use, etc, because every reading from the serial, the sum and average increases until such time it reaches negative (when i used long, float) would you like to help me figure out what to do with my variable types? Thanks! _
unsigned long sensors_average = 0;
unsigned long sensors_sum = 0;
int integral, differential, proportional, last_proportional;
int derivative;
int error_value;
int Ki=1;
int Kd=1;
int Kp=1;
int set_point = 1465;
int position2;
int sensor1, sensor2, sensor3;
long sensors[] = { 0, 0, 0} ;
int i;
void setup()
{
Serial.begin(9600); //Necessary to set up Serial port
}
void loop() {
Sum_average_IR();
reading_IR();
//pid_calc();
Serial.println();
i=0;
delay(1000);
}
void Sum_average_IR()
{
for ( i=0; i<3; i++) {
sensors[i] = analogRead(i);
sensors_average += sensors [i] * i * 10; //Calculating the weighted mean
sensors_sum += sensors [i];
}
position2 = (int) (sensors_average/ sensors_sum ) ;
Serial.print("Calculation: ");
Serial.print(sensors_average);
Serial.print(' ');
Serial.print(sensors_sum);
Serial.print(' ');
Serial.print(position2);
Serial.print(' ');
Serial.println();
}
void pid_calc()
{
proportional = position2 - 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);
Serial.print("Lproportional: ");
Serial.print(last_proportional);
Serial.print(' ');
Serial.println();
}
void reading_IR() {
Serial.print("Reading: ");
Serial.print(analogRead(0));
Serial.print(' ');
Serial.print(analogRead(2));
Serial.print(' ');
Serial.print(analogRead(4));
Serial.println(' ');
//delay(100); //Set the number to change frequency of readings.
}
Post your serial results that has positive and then negative results. Which value turns negative? Sum?
Where do you reset sensors_average? I only see you adding to it. You never remove anything from it or set it back to 0.
oh yes ill try it! i only put reset on i, how about the variable declarations? are they okay?
are they okay?
They look OK.
hey dude, the error_value continues to go up until it gets negative, i have added this 'error_value = 0' to reset it
error_value=0;
proportional = position2 - 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);
OOPs i have solved it, i out reset on everything