INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
14.05.2015, 20:48
Beitrag #1
Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
Hallo zusammen,

Ich bin etwas ratlos bei einer eigentlich einfach scheinenden Problemstellung.

Eine Float-Zahl wandle ich in eine Integer um, möchte diesen Wert dann aber auf maximal drei Zeichen begrenzen bzw. auffüllen.

Zum Beispiel: Anstatt 0 soll stehen: 000,
anstatt 10 soll stehen: 010 usw. bis maximal 999.

Diesen Integerwert wandle ich gleich darauf in einen String um, um ihn in einer Java-Anwendung darzustellen. Gibt es vielleicht für Strings eine Möglichkeit das Ganze umzusetzen?

Vielen Dank im Voraus für Eure Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.05.2015, 21:10 (Dieser Beitrag wurde zuletzt bearbeitet: 14.05.2015 21:19 von HaWe.)
Beitrag #2
RE: Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
Idee in C:

Code:
char sbuf[6];
float f;

if(f>999) f=999;

sprintf(sbuf, "%03d", (int) f );

Serial.println(sbuf);
Läuft ohne Patch auf dem Due,
läuft mit lib.c float-Patch auf allen anderen Arduinos -

es muss nur sichergestellt sein, dass int (f) nicht größer als 999 ist,
und negative Zahlen brauchen eine Sonderbehandlung (Minuszeichen zählt auch als Zeichen):


Angehängte Datei(en)
.zip  libc float patch.zip (Größe: 2 MB / Downloads: 39)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 09:52
Beitrag #3
RE: Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
(14.05.2015 21:10)HaWe schrieb:  läuft mit lib.c float-Patch auf allen anderen Arduinos -
Hi,
das müsste eigentlich auch ohne libc-Patch gehen. Du verwendest ja in sprintf nicht wirklich ein float, sondern wandelst vorher in einen int um.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.05.2015, 09:57
Beitrag #4
RE: Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
stimmt, hast ja recht! da war ich wieder mal zu über-bedenklich... Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2015, 15:02
Beitrag #5
RE: Zahlenwert auf 3 Zeichen begrenzen bzw. auffüllen
Super funktioniert einwandfrei, dankeschön für eure Hilfe!

Ich brauche diese Funktion zur Geschwindigkeitsmessung mittels zweier Lichtschranken, den Sketch habe ich unten angehängt (Runden der Werte ist dabei noch nicht berücksichtigt, auch die Weitergabe an Java nicht). Die Geschwindigkeit wird in m/s ausgegeben, die Lichtschranken stehen dabei 0.2 m auseinander (später 1.0m).
Mit Arduino ist es ja möglich auf 4 us bzw. auf 0.5 us genau die Zeit zu erfassen, bin mir aktuell nur nicht sicher ob ich irgendwo noch ein Denkfehler drinnen habe!?!

Zitat: // Variablendeklaration
byte li_start = 2; // Pin Lichtschranke Start
byte li_ende = 3; // Pin Lichtschranke Ende
unsigned long start = 0;
unsigned long ende = 0;
unsigned int zeit_signaldauer = 0;
boolean zeitmessung_aktiv = false;

double v = 0;


void setup() {
Serial.begin(9600);
pinMode(2, INPUT); // Lichtschranke Beginn
pinMode(3, INPUT); // Lichtschranke Ende
attachInterrupt(0, startabfrage, FALLING);
attachInterrupt(1, zeitmessung, FALLING);
}

void loop(){

v = (0.2 / (zeit_signaldauer * pow(10, -6) ) ); // Durchschnittsgeschwindigkeit

Serial.print("Startzeit: ");
Serial.println(start);

Serial.print("Zeitdifferenz: ");
Serial.println(zeit_signaldauer);

Serial.print("Geschwindigkeit: ");
Serial.println(v);

Serial.print("\n");
delay(0);
}

void startabfrage(){
if(digitalRead(li_start) == LOW && zeitmessung_aktiv == false){
start = micros(); // Aktueller Zeitwert
zeitmessung_aktiv = true;
}
}
void zeitmessung(){
if(digitalRead(li_ende) == LOW && zeitmessung_aktiv == true){
//ende = micros(); // Aktueller Zeitwert
zeit_signaldauer = micros() - start ; // Berechnung Zeitdifferenz
zeitmessung_aktiv = false;
}
}

Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Empfange nur "Geister"zeichen vom BT-Modul dabbamonkeyyy 2 128 23.10.2016 11:34
Letzter Beitrag: Harry Hirsch
  LCD Display plötzlich komische Zeichen Jessi97 2 240 28.07.2016 11:34
Letzter Beitrag: Bitklopfer
  Hexzahl immer mit 2 Zeichen ausgeben. arduinofan 11 786 12.01.2016 09:00
Letzter Beitrag: arduinofan
Sad atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe) aepfelbirnen 3 2.094 10.01.2015 13:55
Letzter Beitrag: aepfelbirnen
  Auf serielles Zeichen warten und dann Variable schreiben nico2506 1 660 19.11.2014 08:07
Letzter Beitrag: rkuehle
  Grad - Zeichen Georg 3 2.330 07.10.2014 20:34
Letzter Beitrag: Stefan
  Bei float Nachkommastellen begrenzen OldMan 7 3.238 10.05.2014 17:58
Letzter Beitrag: rkuehle
  DFR0154(LCD2004)-Org. DFROBOT-keine Zeichen anne2 6 4.043 17.02.2013 12:01
Letzter Beitrag: anne2

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste