Stack Overflow over serial reading

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! :slight_smile: :slight_smile:_

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 :slight_smile: