Zeit in Sekunden in seriellen Monitor mit Unterfunktion

Moin!

Ich bin blutiger Einsteiger und möchte ein Funktion erstellen die eine Zeit in Sekunden zurück gibt.

Zur Zeit bin ich etwas IT eingeschränkt sodass sich den Code aus der Erinnerung schreiben muss. Fehler können sich also leicht einschleichen.

unsigned long start, finished, dauer;

int T1=7; // 1. Taster #7
int T2=6; // 2. Taster #6

int cT1=-1; // Status Taster 1
int cT2=-1; // Status Taster 2

cT1=digitalRead(T1); // Auslesen TASTER - #1
cT2=digitalRead(T2); // Auslesen TASTER - #2

if (cT1==HIGH){
start=millis();
}

if (cT2==HIGH ){
finished=millis();
}

Serial.print(Dauer());
Serial.println(" Sekunden");
}

// Berechnen des Ergebnis
float Dauer(){

dauer=finished - start;
return (dauer / 1000);
}

So aus der Erinnerung - Lauffähigkeit nicht gewährleistet!

Das Problem ist nun, dass bei mir die Sekunden immer als ganze Zahl zurück gegeben werden und nicht als gebrochene Zahl!

Kann mir einer von Euch sagen, wo mein gedanklicher Fehler liegt?

Gruß Jan

Hallo,

für Kommazahlen muss man float verwenden. Ganzzahlrechnung bleibt Ganzzahlrechnung, der Rest wird einfach abgeschnitten.
Im einfachsten Fall

Serial.println(millis()/1000.0);

der Dezimalpunkt ist entscheidend.

Moin!

danke für die schnelle Rückmeldung.

Also müßte es so klappen??

Gruß Jan

Hallo,

nicht ganz, habs gerade ergänzt, die Rechnung selbst muss auch mit Fließkommawerten erfolgen. Sonst wird am Ende nur eine Ganzzahl im float Wertebereich gespeichert. Man muss mit Fließkommazahlen rechnen und notfalls noch casten. Die erste Rechnung ist dabei entscheidend.

Entweder eine 1.0 mal irgendwas hinzufügen oder eben irgendwas durch 1.0 oder hier durch 1000.0, danach ginge dann die Formel normal weiter auch mit Ganzahlen.

Moin !
sollte ich jetzt verstanden haben!

Gruß Jan

float Dauer()
{
  return( float(finished - start) / 1000.0 ;
}

Moin!

danke, alles gelöst!

Jan