- Labornetzteil AliExpress         
Ergebnis 1 bis 3 von 3

Thema: Stopwatch in Sekunden ausgeben

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45

    Stopwatch in Sekunden ausgeben

    Anzeige

    Praxistest und DIY Projekte
    Ich wollte eine gewisse Zeit messen um die danach im Terminal ausgeben zu können. Ich habe eine Funktion geschrieben um die Werte der Stopwatches in Sekunden mit 3 Kommastellen umzurechnen.
    Mein Problem ist das ich keinen Fehler im Code finden kann, machnchmal aber Negative Werte bekomme.
    Ich kann mir nicht erklären warum, die Häufigkeit ist etwa 40%.

    Meine Funktion:
    Code:
    void ZahlMitKommaAusgeben(int Zahl, int Genauigkeit){
      Zahl_mit_Komma = Zahl / Genauigkeit;
      writeInteger(Zahl_mit_Komma,DEC);
      writeString_P(",");
      Zahl_mit_Komma = Zahl_mit_Komma * Genauigkeit;
      writeInteger(Zahl - Zahl_mit_Komma, DEC);
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    @Dasive:
    Der Typ int16_t reicht ja von -32768 bis +32767.
    Das wird auch mit writeInteger so ausgegeben.

    Wenn eine deiner Werte also > 32767 wird, wird er negativ dargestellt.

    Alternative:
    Den Typ uint16_t nehmen (0..65535).
    Den unsigned int Wert müßtest du dann aber auch mit einer geeigneten Funktion ausgeben.
    Ich hänge dir mal eine Funktion an, die (u)int16_t und int32_t darstellen kann:
    Code:
    /**
     * Write a long number (with specified base) to the UART.
     *
     * Example:
     *
     *			// Write a hexadecimal number to the UART:
     *			writeLong(0xAACC,16);
     *			// Instead of 16 you can also write "HEX" as this is defined in the
     *			// RP6uart.h :
     *			writeLong(0xAACC, HEX);
     *			// Other Formats:
     *			writeLong(1024,DEC);  	// Decimal
     *			writeLong(044,OCT);		// Octal
     *			writeLong(0b11010111,BIN); // Binary
     */
    void writeLong(int32_t number, uint8_t base)
    {char buffer[33];
    	ltoa(number, &buffer[0], base);
    	writeString(&buffer[0]);
    }
    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.07.2010
    Beiträge
    45
    Danke dir, daran häte ich nicht gedacht

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress