Durchschnitt errechnen funktioniert nicht

Hallo, versuche nun verzweifelt den Durchschnitt zu ermitteln aber es will nicht so recht klappen.
Ich habe nun den Code abgeändert und ich bekomme einfach kein vernünftiges Ergebnis.Wenn ich mir den ldrSensor über Serial anzeigen lasse, bekomme ich einen genauen Wert (konstant) aber wenn ich lichtsum mir anzeigen lassen kommen positive und negative Zahlen. Die Funktion soll nur alle paar sekunden aufgerufen werden und dann eine Messung machen und nach x durchläufen den Durchschnitt ermitteln.

void aussenlicht()						// 20 Messungen  duchschnitt bilden und dann Licht AN oder AUS schalten
 {								
	 
		/*for (int i = 0; i < 20; i++)
		 {
			 lichtWert += analogRead(ldrSensor);
		 }
		 
		 lichtWert = lichtWert/ 20;
		 */

 static int count, lichtsum;
			
			lichtsum += analogRead(ldrSensor);
			count++;
				if (count >= 5)
				{ count = 0;
					lichtWert = lichtsum/ 5;
				}
				
		 Serial.println(lichtsum);
		 lcd.setCursor(0,2);
		 lcd.print("  ");
		 lcd.print(lichtWert);

Die Version mit der for Schleife hat funktioniert.

MfG Marco

saalesteuerung_2014.ino (4.37 KB)

beginner34: Hallo, versuche nun verzweifelt den Durchschnitt zu ermitteln aber es will nicht so recht klappen.

Du müßtest ja irgendwo auch mal die Summe zurücksetzen, aus der Du den Mittelwert berechnest und nicht immer nur draufaddieren.

if (count >= 5)
{ 
  count = 0;
  lichtWert = lichtsum/ 5;
  lichtsum=0;
}

Habe es geändert aber ohne Erfolg. Jetzt gibt der Serialmonitor das aus : 0 , 253, 503, 759, 1014, 0, usw. bei lichtsum; lichtWert ist jetzt 253 aber der LDR liefert nur 15 . Ich hatte angenommen das es einen Durchschnitt von ~ 15 geben sollte?!

static int count, lichtsum;

            lichtsum += analogRead(ldrSensor);
            count++;
                if (count >= 5)
                {   count = 0;
                    lichtWert = lichtsum/ 5;
                    lichtsum = 0;
                }

MfG Marco

Bei mir funktioniert der Sketch.

Und wenn deine Serielle Ausgabe 0 , 253, 503, 759, 1014 ist, dann scheint der Mittelwert 253 auch korrekt zu sein. (der letzte Wert fehlt ja, da vorher zu Null gesetzt wird.)

Wie kommst du auf den Wert 15, den der LDR liefern sollte?

edit: Probiers doch mal mit ein paar mehr Seriellen Ausgaben:

void aussenlicht(){  
  static int count, lichtsum, lichtWert; 
  int ADin = analogRead(ldrSensor);
  lichtsum += ADin;
  count++;  
        Serial.println();
        Serial.print(count);     Serial.print("\t"); 
        Serial.print(ADin);      Serial.print("\t"); 
        Serial.print(lichtsum);  Serial.print("\t");
  if (count >= 5)  {   
    count = 0;
    lichtWert = lichtsum/ 5;
    lichtsum = 0;
        Serial.println(lichtWert);
        Serial.print("\nCount\tADin\tsum\tMittelwert");
  }
}

Das sollte dir im Seriellen Monitor eine schöne Tabelle mit allen werten lieferen. So siehst du wirklich, was deine Funkion macht.