- 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

    LiFePo4 Akku selber bauen - Video
    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
  •  

LiFePO4 Speicher Test