I'm trying to read the analog value of the light sensor and print its percentage but for unknown reasons I'm getting negative values when I'm printing the value.
void setup() {
Serial.begin(9600);
}
void loop() {
// Let's say 1002 is the analogValue
int analogValue = (int) analogRead(0);
// get the percentage
int value = 100 * analogValue / 1023;
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~");
Serial.println(analogValue); // print the analog value 0...1023
Serial.println(100 * analogValue); // just for test
Serial.println(value); // The percentage
Serial.println("~~~~~~~~~~~~~~~~~~~~~~~~~");
delay(500);
}
I don't know what's going in background, but I'm getting negative values when I try to print the percentage:
~~~~~~~~~~~~~~~~~~~~~~~~~
1002
-30772
-30
~~~~~~~~~~~~~~~~~~~~~~~~~
asked Jun 24, 2017 at 14:24
1 Answer 1
Max value for int
is 32,767. But 100 * 1002 = 100,200. You are overflowing the int
. Use unsigned long
. Or float
and cast to int
when printing.
-
Simplest would be to replace
100
by100L
.Edgar Bonet– Edgar Bonet2017年06月24日 14:48:27 +00:00Commented Jun 24, 2017 at 14:48 -
Yes, but OP would have to be sure to do that on both lines - the original calculation as well as the
Serial.println
line (even though it's "just for test"). Either way works, though.001– 0012017年06月24日 14:54:58 +00:00Commented Jun 24, 2017 at 14:54
lang-cpp