Hallo, ich würde gerne mit millis(); die Zeit vom Arduino nehmen und in ein char-Array speichern. Google liefert mir leider keine Ergebnisse die ich verstehe wie ich eine Variable in ein Array speichere.. Wäre toll wenn mir da jemand weiterhelfen könnte..
Hier steht: http://arduino.cc/en/pmwiki.php?n=Reference/Millis >Returns > >Number of milliseconds since the program started (unsigned long) Es wird also ein "unsigned long" zurückgeliefert. Das ist ein 32Bit Wert. Char ist nur 8 Bit. Du brauchst also ein Array mit Elementen vom Typ "unsigned long"
Hier ein Beispiel:
1 | unsigned long myArray[10]; |
1 | myArray[0] = millis(); |
2 | // mach hier was, das etwas länger geht ...
|
3 | myArray[1] = millis(); |
4 | // mach hier was, das etwas länger geht ...
|
5 | myArray[2] = millis(); |
6 | // mach hier was, das etwas länger geht ...
|
7 | myArray[3] = millis(); |
In dem char Array befinden sich aber bereits Buchstaben und ich möchte die Zeit dranhängen, wie stelle ich das am besten an? Danke für deine Hilfe
Gibt meherer Wege. Ich würde es wahrscheinlich mit sprintf machen. Ähnlich dem 1. Beispiel: http://forum.arduino.cc/index.php?topic=149575.0
1 | /* sprintf example */
|
2 | #include <stdio.h> |
3 | |
4 | int main () |
5 | {
|
6 | char buffer [50]; |
7 | int n, a=5, b=3; |
8 | n=sprintf (buffer, "%d plus %d is %d", a, b, a+b); |
9 | printf ("[%s] is a string %d chars long\n",buffer,n); |
10 | return 0; |
11 | }
|
1 | Output:
|
2 | [5 plus 3 is 8] is a string 13 chars long |
Ist es richtig das n die Anzahl der Zeichen beinhaltet und das Array buffer den umgewandelten String? Was bedeutet "%d plus %d is %d" ? Für was steht %d & %s?
Paul schrieb: > In dem char Array befinden sich aber bereits Buchstaben und ich > möchte die Zeit dranhängen, wie stelle ich das am besten an? Du machst dich mit einem Buch oder Tutorial zum Thema "Datentypen in C" und "Zeichenketten in C" schlau...
>Ist es richtig das n die Anzahl der Zeichen beinhaltet und das Array >buffer den umgewandelten String? Ja. Und Du musst buffer so groß wählen, dass später alle Zeichen rein passen. Im Beispiel: 50 Zeichen. &d ist ein Platzhalter für Ganzzahlen. Hier kommt später das "a", das "b" und das "a+b" rein. %s ist ein Platzhalter für einen String gibt auch noch %f Platzhalter für Float. und weitere. Wichtig, da millis() ein unsigned long(32bit) liefert, %d aber nur ein Platzhalter für int (16bit) ist: Du musst das casten. Sieht bei Dir dann etwa so aus:
1 | char buffer [50]; |
2 | unsigned long zeit; |
3 | zeit = millis(); |
4 | sprintf (buffer, "Die Zeit in Mllisekunden war: %d", (int)zeit); |
@Lothar. Oder er frägt einfach hier. Das geht schneller. Bis man bei den C-Büchern das Wissen zusammen hat, das man für ein konkretes Problem braucht ist Weihnachten rum.
Dispol schrieb: > sprintf (buffer, "Die Zeit in Mllisekunden war: %d", (int)zeit); .... und nach 32.767 Sekunden hast einen Overflow, na toll ..... ... negative Zeiten sind auch nicht gerade sinnvoll ....
Dann probier: %lu als Platzhalter für unsigned long und last das (int) wieder weg.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.