0

I've done a simple aurduino sketch, I have this code, and this don't work:

#define voltageInput A0
int qntR;
float mr;
float qr;
float Distanza;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(voltageInput,INPUT);
  mr=(130-20)/float(1023-205);
  qr=20-mr*205;
  Serial.print(mr,4);
}

void loop() {
  // put your main code here, to run repeatedly:
  qntR=analogRead(voltageInput);
  Distanza=mr*qntR+qr;
  Serial.print("Distanza: ");
  Serial.print(Distanza);
  Serial.print(" cm");
  Serial.println("");
}

And the I have this code:

#define voltageInput A0
int qntR;
float mr;
float qr;
float Distanza;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(voltageInput,INPUT);
  mr=(130-20)/(1023-205);
  qr=20-mr*205;
  Serial.print(mr,4);
}

void loop() {
  // put your main code here, to run repeatedly:
  qntR=analogRead(voltageInput);
  Distanza=mr*qntR+qr;
  Serial.print("Distanza: ");
  Serial.print(Distanza);
  Serial.print(" cm");
  Serial.println("");
}

In which I have delete the float from mr=(130-20)/float(1023-205);,and if I delete the float the code stop working (mr is always equal to 0), why?

  • What is is that doesn't work? Please include the serial output – Sim Son Oct 22 at 15:44
  • it say that mr is always equal to 0 – user12258338 Oct 22 at 15:46
3

Your problem is that you are doing integer maths.

mr = (130-20)/(1023-205)

reduces to:

mr = 110/818

Which normally equates to:

mr = 0.135

But since all those numbers are integers the result is an integer, and is truncated at the decimal point, which means that mr is assigned:

mr = 0

You can force floating point maths by either including a decimal point in one of the numbers, or adding the suffux f:

mr = (130-20)/(1023-205.0)

or

mr = (130-20)/(1023-205f)

Or casting a portion of the sum to a float as your other code does.

  • but why, I have previusly said that mr is a float variable – user12258338 Oct 22 at 15:50
  • Because you have just numbers the preprocessor does the calculation, not the compiler. The compiler just gets the number 0. – Majenko Oct 22 at 16:00
  • so if I do math with integers, the preprocessor will truncate the number in an integer? – user12258338 Oct 22 at 16:17
  • If you just have literal numbers, yes. – Majenko Oct 22 at 16:17
  • 1
    @Majenko thanks a lot! – user12258338 Oct 22 at 16:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.