Integerwerte trotz float definition

Hi!

Ich habe ein kleines Problem bei einem Sketch.
Und zwar zähle ich die Impulse per Interrupt.
Bei jeder steigenden Flanke wird eine Variable inkrementiert.
Mit der Funktion Millis wird nach 2 Sekunden geschaut, wie viele Impulse in den 2 Sekunden gezählt wurden, damit wird ein Wert (Durchfluss) berechnet und die Impulse werden auf 0 gesetzt → für die nächsten 2 Sekunden Messung.

Trotzdem erhalte ich als Ergebnis der Durchflussberechnung keine Kommawerte, sondern abgerundete Werte.

Da der Durchflusssensor 450 Impulse / Liter ausgibt und 2 Sekunden lang die Impulse gezählt werden, ist die Berechnung wie folgt:

Durchfluss in l/min = (Impulse / 2 Sekunden) * (60 Sekunden / 1Minute) * (1 Liter / 450 Impulse)

kurz:

Durchfluss = Impulse * 30 /450

Hier der ganze Programmcode:

#include <math.h>               
#include <Wire.h>                
#include <LiquidCrystal_I2C.h>   

LiquidCrystal_I2C lcd(0x27,20,4);  

long int Impuls=0.0;  //Zählt die Anzahl der steigenden Flanken zur Messung der Durchflussmenge
float Durchfluss;     //Variable Durchfluss
long vorherigeMillisekunden = 0;     //Millisekunden 
long Intervall = 2000;               //Zeit zwischen Durchflussmessung


void setup()     
{  
    attachInterrupt(0, Impulszaehler, RISING);  
    lcd.init();            
    lcd.backlight();      
    Wire.begin();          
    Serial.begin(9600);   
   
}

void loop(){
    unsigned long derzeitigeMillisekunden = millis();
    
    if(derzeitigeMillisekunden - vorherigeMillisekunden >= Intervall) {   //Wenn der Millisekundenzähler - vorherige Millisekunden > Intervall
        vorherigeMillisekunden = derzeitigeMillisekunden;                 //vorherige Millisekunden = derzeitige Millisekunden setzen
        Durchfluss = Impuls * 30 / 450;				          //Anzahl der Impulse in 2 Sekunden * 60 Sekunden / 450Impulse/liter
        Serial.println(Durchfluss);
		Serial.println(Impuls);
		Serial.println("------");
		
        Impuls=0;                                                         //Impuls auf 0 setzen
    }
      
      lcd.setCursor(0,2);                 //Cursor auf 0,2
      lcd.print("Durchfluss:");           //"Durchfluss" schreiben
      lcd.setCursor(12,2);                //Cursor auf 12,2
      lcd.print (Durchfluss);             //Durchflussmenge anzeigen in l/min
      lcd.setCursor(15,2);                //Cursor auf 15,2
      lcd.print("l/min");                 //"l/min" hinter Wert schreiben
     
      delay(1000);
  }
  
  

  
void Impulszaehler(){      //Hilfsfunktion Impulszählen bei steigender Flanke
  Impuls++;                //Variable Impuls inkrementieren    
}

Bei der Konfiguration steht im seriellen Fenster:

0.00
7

Eigentlich müsste man bei 7 Impulsen ja die Zahl 0,6666 erhalten und nicht 0.

Wenn ich statt “Impuls” in der Durchflussrechnung die Zahl 100 schreibe, müsste ja auf jeden Fall 6.66 raus kommen.
Angezeigt wird 6:

6.00
7

Woran kann das liegen?

Gruß
Morris

maeckes: Durchfluss = Impulse * 30 /450

Wenn Du auf der rechten Seite des Gleichheitszeichens nur im Integer rechnest, dann ist und bleibt das Ergebnis Integer.

Wenn Du eine Gleitkommarechnung möchtest, müßte mindestens eine der Zahlen eine Gleitkommazahl sein, z.B, Durchfluss = Impulse * 30 /450.0; oder Durchfluss = Impulse * 30.0 /450; oder Durchfluss = (float)Impulse * 30 /450

hi,

wenn Du nur mit ganzen zahlen arbeitest, kommen auch nur ganze zahlen raus (seltsam? find ich auch). dividier mal durch 450,0. oder nimm 30,0.

gruß stefan