Pages: [1]   Go Down
Author Topic: Maximalen Differenzwert zeitabhängig ausgeben  (Read 72 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo User,

mit meinem Datalogger bin ich dank Hilfe dieses Forums schon weitergekommen. Meine Werte sind auch recht vernünftig und das Speichern auf MicroSD-Karte funktioniert (zumindest phasenweise smiley-wink wo da das Problem hängt, versuche ich jedoch noch eigenständig zulösen).

Wo ich leider als Laie nicht weiterkomme ist, wie ich meinen maximalen Differenzwert zeitabhängig ausgebe.
Ich habe einen Beschleunigungssensor, der sollte in x und y-Richtung 512 und in z-Richtung 615 ausgeben.

Mit meinen laienhaften Programmierkenntnisse habe ich mir folgenden Code überlegt, der mir jedoch nur den Maximalwert ausgibt (dies ist mein Testcode für den Beschleunigungssensor. Tempsensor und schreiben auf MicroSD habe ich rausgelassen):
Code:
int pinX = A0;     // X-Achse
int pinY = A1;     // Y-Achse
int pinZ = A2;     // Z-Achse
int altX = 0;
int altY = 0;
int altZ = 0;
int x;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int altX = 0;
  int altY = 0;
  int altZ = 0;
 
  for(x=0; x<=20; x++)
  {
    delay(200);
    if (analogRead(pinX) > altX, analogRead(pinY) > altY, analogRead(pinZ) > altZ)
    {
      altX = analogRead(pinX);
      altY = analogRead(pinY);
      altZ = analogRead(pinZ);
    }
  }

  Serial.print(altX);
  Serial.print(";");
  Serial.print(altY);
  Serial.print(";");
  Serial.print(altZ);
  Serial.print(";");
  Serial.println();
}

1. Frage: Wenn ich jetzt nur den Maximalwert betrachten würde, wäre der Code sinnvoll oder ist dies zu umständlich?
2. Frage: Wie kann ich mir die maximale Differenz ausgeben lassen? Schließlich habe ich ja nicht nur einen Maximal- sondern auch je nach Belastung einen Minimalwert.

Warum ich das so mache?
Ich möchte letztlich über mehrere Stunden bis hin zu 1-2 Tagen loggen und daher möchte ich mein Datenvolumen minimieren indem ich nicht alle 200ms einen Wert auf meine SD-Karte speicher, sondern nur alle 5 Sekunden und dies sollte dann eben der Minimal- bzw. Maximalwert dieser Zeitspanne sein
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2743
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Meinst du sowas?
Code:
void loop()
{
 unsigned int maxX=0;
 unsigned int minX=1023;
 for (int  i = 0; i < 50; i++)
 {
    unsigned int aktX = analogRead(pinX);
    if (aktX > maxX) maxX = aktX;
    if (aktX < minX) minX = aktX;
    delay(200);   // 50 * 200 ms = 10 sec
 }
 Serial.print(minX); Serial.print(" ... "); Serial.print(maxX); Serial.println (" X ");
}

Hier dauert ein loop Durchlauf 10 Sekunden, und ermittelt alle 10 Sekunden das jeweilige Max- und Minimum.
Erweitern für y und z genauso ...

Differenz zwischen Max und Min sollte auch nicht das Problem sein, das hab ich evtl. nicht verstanden.

Geht natürlich auch ohne delay, aber das soll jetzt und hier mal egal sein.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für den Tipp.
Jap so funktionierts. Das er mir Max- und Minwert ausgibt ist für die Nachbetrachtung echt wichtig.
Habe das nun auch auf alle meine Analogeingänge programmiert - läuft.
danke smiley-wink
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2743
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
dauert ein loop Durchlauf 10 Sekunden
Auf Dauer, wenn da jemals was interaktives dazu soll, blamierst du dich natürlich damit  smiley-wink
Keiner drückt eine Taste 10 Sekunden lang, ohne dass was passiert.
Logged

Pages: [1]   Go Up
Jump to: