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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.