Go Down

Topic: Why am I getting negative numbers? (Read 619 times) previous topic - next topic

dedokta

This is my first Arduino project and I've never programmed before so some help would be much appreciated...

I'm reading three AC voltages and trying to average them out. The code below should only return positive numbers as I have used the ABS command, but I'm still getting negative numbers in the mix. What am I doing wrong?

Code: [Select]

const int numReadings = 50;
int bluetotal = 0;                  // the running total
int redtotal = 0;                  // the running total
int greentotal = 0;                  // the running total

int red = A0;
int green = A1;
int blue = A2;
void setup()
{
  // initialize serial communication with computer:
  Serial.begin(9600);                   

}

void loop() {
  // Take average of red blue and green                   
for (int count = 0; count < numReadings; count++) {
  bluetotal += abs(analogRead(blue));
  greentotal += abs(analogRead(green));
  redtotal += abs(analogRead(red));
}
 
  // send it to the computer as ASCII digits
  Serial.print(bluetotal/numReadings);   
   Serial.print("        "); 
  Serial.print(redtotal/numReadings);
   Serial.print("        "); 
  Serial.println(greentotal/numReadings);
 
}

MarkT

You need to use the long type for your redtotal/greentotal/bluetotal variables, they are overflowing.

The output of analogRead is in the range 0..1023 inclusive and cannot be negative anyway.
[ I won't respond to messages, use the forum please ]

James C4S

You might want to pay attention to this part of the abs() reference page (http://arduino.cc/en/Reference/Abs):
"Because of the way the abs() function is implemented, avoid using other functions inside the brackets, it may lead to incorrect results."

I believe analogRead() would qualify as a function...
Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

dedokta

Thanks for the quick response, Can you explain what you mean by Long Type?
I still find it unusual that I am getting negative numbers in the output, especially if the readings are all positive number.

dedokta

Thanks guys, Figured it out. Moved the Long initialiser into the main loop as well and am getting correct readings now!

Go Up