Variablenübergabe klappt nicht - Zähler for-Schleife kann nicht übertragen werde

  • Loisl_der_Imker
  • Autor
  • Offline
  • Junior Member
  • Junior Member
Mehr
14 Mai 2019 19:47 #573 von Loisl_der_Imker
Loisl_der_Imker erstellte das Thema Variablenübergabe klappt nicht - Zähler for-Schleife kann nicht übertragen werde
Hallo - ich hoffe ihr könnt mir hier auch helfen auch wenn es bestimmt wieder ein Anfängerfehler ist.

Ich möchte mit einer for Schleife den Maximalwert in einen Array bestimmen und die Position für spätere Aktionen auch festhalten. Bestimmung vom Maximalwert (maxTag) klappt aber die Position im Array wird nicht übergeben bzw. der Wert steht immer auf 0

Die Position soll mir sagen wann der Maximalwert länger als 24 Std. her ist damit ich den Wert löschen kann. Den Teil vom Sketch habe ich aber im Beispielprogramm wieder raus gelöscht um den Fehler endlich zu finden.

Für die Fehlersuche habe ich schon eine Woche jeweils abends investiert - aber im komme nicht weiter. Die Variable wann ist immer auf 0

Danke für die Hilfe - und hier der Sketch dazu:

// Test Variable "wann" erhalten
long t; // erster Zeitwert
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 5000; // 60000*60;// Interval zwischen zwei Änderungen ==> auf eine Stunde gesetzt
int Gewicht[49] = {0}; // Array für vergangene Gewichtswerte für App Anzeige und Alarmmeldungen
int maxTag = 0; // größte Wert im Array
int wann = 0; // an welcher Stelle im Array steht der max wert?


void setup() {
// Poti am Eingang A0 anlegen
Serial.begin(9600); delay(10);

}

void loop() {
// put your main code here, to run repeatedly:
if (millis() > t + 250) {
float i = analogRead(A0);;
Serial.print("aktuell: ");
Serial.print(i);
Serial.print("(1-5) "); -
Serial.print (Gewicht[1]);
Serial.print(" ");
Serial.print (Gewicht[2]);
Serial.print(" ");
Serial.print (Gewicht[3]);
Serial.print(" ");
Serial.print (Gewicht[4]);
Serial.print(" ");
Serial.print (Gewicht[5]);
Serial.print(" (20-25) ");
Serial.print (Gewicht[20]);
Serial.print(" ");
Serial.print (Gewicht[21]);
Serial.print(" ");
Serial.print (Gewicht[22]);
Serial.print(" ");
Serial.print (Gewicht[23]);
Serial.print(" ");
Serial.print (Gewicht[24]);
Serial.print(" ");
Serial.print (Gewicht[25]);
Serial.print(" (48)");
Serial.print (Gewicht[48]);
Serial.print("max Wert: ");
Serial.print (maxTag);
Serial.print("vor x Std: ");
Serial.println (wann);
Gewicht[0] = i;
t = millis();
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > interval) // jeden Intervall Gewicht in Array hoch schieben
{
previousMillis = currentMillis; // aktuelle Zeit abspeichern
for (int i = 48; i > 0; i--) {
Gewicht = Gewicht; // jede Stunde den Wert um eine stelle nach oben schieben im Array
}
//Gewicht[0]= i; // aktuelles Gewicht wird weiter oben in Array übertragen, i ist temporäre Variable
// prüfen wann der max Wert war
// warum wird wann nicht übergeben? steht immer auf 0!!
for ( int counter = 0; counter < 49; counter++)
{
if (maxTag < Gewicht[counter] ) {
wann = counter;
maxTag = Gewicht[counter];
}
}
}
}

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Loisl_der_Imker
  • Autor
  • Offline
  • Junior Member
  • Junior Member
Mehr
14 Mai 2019 20:42 - 14 Mai 2019 20:48 #574 von Loisl_der_Imker
Variablenübergabe klappt nicht - Zähler for-Schleife kann nicht übertragen werde
habe jetzt mit einer Änderung einen Sketch der läuft - aber ich finde trotzdem den Fehler im vorherigen nicht.

Hier die Änderung bzw der Sketch der auch läuft:
ich lösche die Werte vorm max wert suchen - sonnst alles gleich.
// Test Variable wann erhalten
// So klappt es!!!
long t;         // erster Zeitwert
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 5000; // 60000*60;// Interval zwischen zwei Änderungen ==> auf eine Stunde gesetzt
int Gewicht[49] = {0};      //  Array für vergangene Gewichtswerte für App Anzeige und Alarmmeldungen
int maxTag = 0;       // größte Wert im Array
int wann = 0;         // an welcher Stelle im Array steht der max wert?


void setup() {
  // Poti am Eingang A0 anlegen
  Serial.begin(9600); delay(10);

}

void loop() {
  // put your main code here, to run repeatedly:
  if (millis() > t + 250) {
    float i = analogRead(A0);;
    Serial.print("aktuell: ");
    Serial.print(i);
    Serial.print("(1-5) "); -
    Serial.print (Gewicht[1]);
    Serial.print(" ");
    Serial.print (Gewicht[2]);
    Serial.print(" ");
    Serial.print (Gewicht[3]);
    Serial.print(" ");
    Serial.print (Gewicht[4]);
    Serial.print(" ");
    Serial.print (Gewicht[5]);
    Serial.print(" (20-25) ");
    Serial.print (Gewicht[20]);
    Serial.print(" ");
    Serial.print (Gewicht[21]);
    Serial.print(" ");
    Serial.print (Gewicht[22]);
    Serial.print(" ");
    Serial.print (Gewicht[23]);
    Serial.print(" ");
    Serial.print (Gewicht[24]);
    Serial.print(" ");
    Serial.print (Gewicht[25]);
    Serial.print("  (48)");
    Serial.print (Gewicht[48]);
    Serial.print("max Wert: ");
    Serial.print (maxTag);
    Serial.print("vor x Std: ");
    Serial.println (wann);
    Gewicht[0] = i;
    t = millis();
  }
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis > interval)      // jeden Intervall Gewicht in Array hoch schieben
  {
    previousMillis = currentMillis;   // aktuelle Zeit abspeichern
    for (int i = 48; i > 0; i--) {
      Gewicht[i] = Gewicht[i - 1];    // jede Stunde den Wert um eine stelle nach oben schieben im Array
    }
    //Gewicht[0]= i;  // aktuelles Gewicht wird weiter oben in Array übertragen, i ist temporäre Variable
    // prüfen wann der max Wert war
    // warum wird wann nicht übergeben? steht immer auf 0!!
    // neuer Versuch vorher löschen und nur bis 30 zählen
    maxTag = Gewicht[0];
    wann = 0;
    
    for ( int counter = 0; counter < 25; counter++)
    {
      if (maxTag < Gewicht[counter] ) {
        wann = counter;
        maxTag = Gewicht[counter];
      } 
    }
  }
}

PS: wie kann man Zeilennummern mit bei der Kopie für Forum einfügen?
Letzte Änderung: 14 Mai 2019 20:48 von Loisl_der_Imker.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Mehr
17 Mai 2019 15:07 #575 von RedBaron
Variablenübergabe klappt nicht - Zähler for-Schleife kann nicht übertragen werde
Du hast schon noch ein wenig mehr geändert.

for (int i = 48; i > 0; i--) {
Gewicht = Gewicht; // jede Stunde den Wert um eine stelle nach oben schieben im Array
}

wurde zu

for (int i = 48; i > 0; i--) {
Gewicht = Gewicht; // jede Stunde den Wert um eine stelle nach oben schieben im Array
}

Im ersten Fall wird nichts geschoben. Damit hat dann Gewicht[0] immer den höchsten Wert. Alle anderen Einträge im Array sind 0.
Folgende Benutzer bedankten sich: Loisl_der_Imker

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Loisl_der_Imker
  • Autor
  • Offline
  • Junior Member
  • Junior Member
Mehr
19 Mai 2019 13:33 #577 von Loisl_der_Imker
Variablenübergabe klappt nicht - Zähler for-Schleife kann nicht übertragen werde
Oh ja - Danke ... jetzt sehe ich den Fehler: Vorher fehlte der da was beim Gewicht im Array verschieben ;)

Danke noch einmal für die Hilfe beim Fehler suchen @RedBaron :)

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum