Drehzahl / Geschwindigkeit

Gast #3616173
Lesenswert?

Hallo Leute,

anbei mein Programm für die Berechnung der Geschwindigkeit und Drehzahl 
mittels eines induktiven Näherungsschalters bei einem Heimtrainer 
Fahrrad.

Es funktioniert soweit alles wunderbar.....
Nur bei der Ausgabe hab ich ein kleines Problemchen. Ich denke es hat 
was mit dem math.error zu tun !!! Wenn ich das Rad noch nicht drehe, 
dann gibt er mir den wert "inf" aus.

Das liegt warscheinlich daran das bei den Berechnungen in Ausgabe() am 
Anfang eben noch kein Wert in der Variable "Zeit_sek_Umdrehung" steht, 
da das rad eben noch nicht dreht.

Meine Frage ist...... wie kann ich es Ausgeben das eben nicht "inf" dort 
steht sondern einfach "0.00".

------------------------------------------------------------------------ 
-
1
#include "TimerOne.h" 
2

3
const int inputPin = 2;                                     
4
int alle_x_sekunden=1;                                      
5
double Drehzahl;                                             
6
double Umfang_km = 0.000942477;                              
7
double Geschwindigkeit;                                      
8
volatile int Umdrehungen;                                    
9
volatile double lastTime;
10
volatile double Zeit_sek_Umdrehung;
11
volatile double now;
12

13

14

15
void setup() 
16
{                
17
  pinMode(inputPin, INPUT);                                  
18
  Serial.begin(9600); 
19
  
20
  Timer1.initialize(alle_x_sekunden*1000000);                
21
  Timer1.attachInterrupt(Ausgabe);                           
22
  attachInterrupt(0, keyPressed, RISING);                   
23
  attachInterrupt(0, Zeit, RISING);
24
  
25
}
26

27
void keyPressed()                 
28
{       
29
    Umdrehungen++;                                          
30
}
31

32
void Zeit()
33
{
34
  now = millis();                                            
35
  Zeit_sek_Umdrehung = (now - lastTime)/1000;                
36

37
  lastTime=now;                                             
38
}
39

40
void Ausgabe()
41
{ 
42

43
  Drehzahl = 1 / Zeit_sek_Umdrehung;                         
44
  Drehzahl = Drehzahl * 60;                                 
45
  Serial.println("Drehzahl in U/min");
46
  Serial.println(Drehzahl);
47
  
48
  Geschwindigkeit = Umfang_km / Zeit_sek_Umdrehung;          
49
  Geschwindigkeit = Geschwindigkeit * 3600;                  
50
  Serial.println("Geschwindigkiet in km/h");
51
  Serial.println(Geschwindigkeit);                                       
52
}
53

54

55

56
void loop()
57
{
58
  
59
}
------------------------------------------------------------------------
#3616183
Lesenswert?

> Nur bei der Ausgabe hab ich ein kleines Problemchen. Ich denke es hat
> was mit dem math.error zu tun !!! Wenn ich das Rad noch nicht drehe,
> dann gibt er mir den wert "inf" aus.

inf steht für 'infinity'. Also unendlich.

Und das ist das Ergebnis, wenn man in
1
  Drehzahl = 1 / Zeit_sek_Umdrehung;
durch 0 dividiert.


> Das liegt warscheinlich daran das bei den Berechnungen in Ausgabe() am
> Anfang eben noch kein Wert in der Variable "Zeit_sek_Umdrehung" steht,
> da das rad eben noch nicht dreht.

Es gibt nicht 'kein Wert'.
Eine numerische Variable hat immer einen Wert. Und wenn der 0 ist, dann 
ist der eben 0.
#3616199
Lesenswert?

Sari schrieb:
> ja .... Haste auch ne Idee wie man den Fehler beheben kann ?

Indem man den Wert abfrägt und die Berechnung nur dann macht, wenn der 
WErt nicht 0 (oder da es sich um Floating Point handelt, größer als ein 
sehr kleiner Wert) ist?
Das if ist schon erfunden!
1
  if( Zeit_sek_Umdrehung > 0.0001 )
2
    Drehzahl = 1 / Zeit_sek_Umdrehung;
3
  else
4
    Drehzahl = 0;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren