Forum: Mikrocontroller und Digitale Elektronik millis in Array


von Paul (Gast)


Lesenswert?

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..

von Dispol (Gast)


Lesenswert?

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"

von Dispol (Gast)


Lesenswert?

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();

von Paul (Gast)


Lesenswert?

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

von Max H. (hartl192)


Lesenswert?

Du willst die Zeit also als ASCII Codiert an den String anhängen?

von Paul (Gast)


Lesenswert?

Jap, das ist das Ziel..

von Dispol (Gast)


Lesenswert?

Gibt meherer Wege.
Ich würde es wahrscheinlich mit sprintf machen.
Ähnlich dem 1. Beispiel:
http://forum.arduino.cc/index.php?topic=149575.0

von Paul (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Dispol (Gast)


Lesenswert?

>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);

von Dispol (Gast)


Lesenswert?

@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.

von isidor (Gast)


Lesenswert?

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 ....

von Dispol (Gast)


Lesenswert?

Dann probier:
%lu als Platzhalter für unsigned long und last das (int) wieder weg.

von Paul (Gast)


Lesenswert?

Vielen Dank für die Hilfe, jetzt klappt es :)

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
Noch kein Account? Hier anmelden.