INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
27.06.2016, 15:58 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2016 17:05 von TimeMen.)
Beitrag #1
Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
Hallo Community,

Hab hier einen Ausschnitt aus einem Sketch, bei dem ich den Fehler nicht finde.
Code:
if (wert == LOW) {
    for (int i = 0; i <= messungen; i++) {    // 20 Messungen
      //Spannungswert einlesen
      float spannungswert = analogRead(IRPin);

      //Umrechnen in cm
      float entfernung = (6787 / (spannungswert - 3)) - 4;

      myArray[i] = entfernung;
      durchschnitt = durchschnitt + myArray[i];
      
      delay(20);
    }
    // Summe durch Anzahl
    float Endwert = durchschnitt / messungen;
    Serial.println(Endwert);
  }

Es wird ein Spannungswert aus einem IR-Sensor ausgelesen. Das soll 20x passieren.
Diese Spannungswerte werden in eine Entfernung in cm (Nach Formel im Datenblatt) umgewandelt.
Die 20 Werte werden nacheinander in ein Array geschrieben (Dabei hilft mir das "i" aus der For-Schleife).
Direkt danach soll in jedem Schritt schonmal der jetzige Insgesamt-Wert der Werte aus dem Array berechnet werden.
Nach der Schleife teile ich den Insgesamt-Wert (durchschnitt) durch die Anzahl der Messungen (In meinem Falle 20).

Danach soll der Durchschnittswert auf dem Seriellen Monitor ausgegeben werden, damit ich den Wert mit PuTTY auf den PC übertragen kann.
Doch wenn ich das jetzt überprüfe kommen folgende Werte zustande (Es sollte nur einer ausgegeben werden, stattdessen kommen pro Druck auf den Taster auf dem Breadbord 2 Werte hinzu.)

Ausgabe:
Code:
11.94
23.83
35.77
47.67
59.56
71.41
83.26
95.16
107.09
118.97
130.86
142.73
usw...

Wo liegt der Fehler im Sketchausschnitt?

LG
TimeMen
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:22
Beitrag #2
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
In deinem Ausschnitt kann ich keinen Fehler entdecken.

Ich vermute dein Taster prellt und er läuft 2 mal durch.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:23
Beitrag #3
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
Hey hotsystems,

Das habe ich berücksichtigt, aber vielleicht ist der Interval (entpreller.interval(5)) falsch.
Dann probiere ich die Werte mal durch.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:25
Beitrag #4
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
(27.06.2016 17:23)TimeMen schrieb:  Das habe ich berücksichtigt, aber vielleicht ist der Interval (entpreller.interval(5)) falsch.
Dann probiere ich die Werte mal durch.

Das könnte zu kurz sein, nimm ruhig einen größeren Wert dafür.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2016 17:28 von TimeMen.)
Beitrag #5
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
Stimmt. Daran könnte es liegen.
Hab mir gerade eine LED mit reingebaut, die pro einzelner Messung an und ausgeht, und jetzt sehe ich auch dass es 40 Messungen gibt ...

Hab deinen Beitrag nicht gesehen, sorry,
Wieviel größer? Bei 20 hat sich nichts geändert.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2016 17:35 von Pit.)
Beitrag #6
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
[quote='TimeMen' pid='30371' dateline='1467039500']
Hallo Community,

Hab hier einen Ausschnitt aus einem Sketch, bei dem ich den Fehler nicht finde.
Code:
if (wert == LOW) {
    for (int i = 0; i <= messungen; i++) {    // 20 Messungen
      //Spannungswert einlesen
      float spannungswert = analogRead(IRPin);

      //Umrechnen in cm
      float entfernung = (6787 / (spannungswert - 3)) - 4;

      myArray[i] = entfernung;
      durchschnitt = durchschnitt + myArray[i];
      
      delay(20);
    }
    // Summe durch Anzahl
    float Endwert = durchschnitt / messungen;
    Serial.println(Endwert);
  }

Es wird ein Spannungswert aus einem IR-Sensor ausgelesen. Das soll 20x passieren.
Diese Spannungswerte werden in eine Entfernung in cm (Nach Formel im Datenblatt) umgewandelt.
Die 20 Werte werden nacheinander in ein Array geschrieben (Dabei hilft mir das "i" aus der For-Schleife).
Direkt danach soll in jedem Schritt schonmal der jetzige Insgesamt-Wert der Werte aus dem Array berechnet werden.
Nach der Schleife teile ich den Insgesamt-Wert (durchschnitt) durch die Anzahl der Messungen (In meinem Falle 20).

Danach soll der Durchschnittswert auf dem Seriellen Monitor ausgegeben werden, damit ich den Wert mit PuTTY auf den PC übertragen kann.
Doch wenn ich das jetzt überprüfe kommen folgende Werte zustande (Es sollte nur einer ausgegeben werden, stattdessen kommen pro Druck auf den Taster auf dem Breadbord 2 Werte hinzu.)

Ausgabe:
Code:
11.94
23.83
35.77
47.67
59.56
71.41
83.26
95.16
107.09
118.97
130.86
142.73
usw...

Wo liegt der Fehler im Sketchausschnitt?

LG
TimeMen
[/code]
Code:
float spannungswert;
float entfernung;
float Endwert;

if (wert == LOW) {
    durchschnitt = 0.0;
    for (int i = 0; i <= 9; i++) {
      digitalWrite(ILed, HIGH);
      //Spannungswert einlesen
      spannungswert = analogRead(IRPin);

      //Umrechnen in cm
      entfernung = (6787 / (spannungswert - 3)) - 4;

      myArray[i] = entfernung;
      durchschnitt += myArray[i];
      
      delay(20);
      digitalWrite(ILed, LOW);
      delay(20);
    }
    // Summe durch Anzahl
    Endwert = durchschnitt / 20;
    Serial.println(Endwert);
  }

also ich würde die 3 floats ausserhalb des blocks deklarieren.
das ändert zwar nichts am ergebnis, erspart aber das immerwährende expandieren und zurücknehmen des stacks in einem block.
"durchschnitt += myArray[i];" dürfte performanter sein als die andere schreibweise da ein paar registeroperationen gespart werden können.
durchschnitt muss man vor der schleife auf 0.0 setzen sonst wächst der wert ja immerfort an.
und der grund warum er das 12 mal anzeigt liegt vermutlich ausserhalb des bereichs den du gepostet hast.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:33
Beitrag #7
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
12 Werte sind da drin, weil ich 6mal auf den Taster gedrückt habe.
Danke für die Schönheitstipps.
Werde das gleich mal korrigieren (Und mir angewöhnen...)
Und ich habe noch das Problem, dass der Taster nicht richtig entprellt wird...
Was ist denn da ein normaler Wert für xyz.interval(?) ?
Bis 80 hat sich jetzt nichts geändert, und der Taster schlägt immernoch 2mal an.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2016, 17:35 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2016 17:37 von hotsystems.)
Beitrag #8
RE: Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht
(27.06.2016 17:27)TimeMen schrieb:  Stimmt. Daran könnte es liegen.
Hab mir gerade eine LED mit reingebaut, die pro einzelner Messung an und ausgeht, und jetzt sehe ich auch dass es 40 Messungen gibt ...
Hab deinen Beitrag nicht gesehen, sorry,
Wieviel größer? Bei 20 hat sich nichts geändert.

Da kannst du ruhig auf 100 bis 200 gehen.
Je größer der Wert, je länger wartet er auf eine neue Eingabe, die er akzeptiert.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  BME280 - Luftdruckoffset nicht einstellbar ? Stargazer 17 520 13.08.2017 15:38
Letzter Beitrag: hotsystems
  Arduino funktioniert immer erst nach reset Maxi290997 11 758 25.07.2017 09:38
Letzter Beitrag: Maxi290997
  Ich komme mit millis nicht weiter !!! Gonmaus 8 525 09.07.2017 21:24
Letzter Beitrag: Tommy56
  Countdown - Werte ändern am Touchscreen ElAleMaNo 2 282 04.07.2017 18:43
Letzter Beitrag: Tommy56
  Brauche einen Sketch zum Testen HDT 12 590 22.06.2017 07:37
Letzter Beitrag: HDT
  Compiler Fehler Harti 8 409 16.06.2017 17:51
Letzter Beitrag: Harti
  Motor Steuerung durch Sensoren Werte Zerebrator 14 603 12.06.2017 14:36
Letzter Beitrag: Franz54
  WEMOS Motorshield funzt nicht Rumpl-X 8 362 07.06.2017 21:10
Letzter Beitrag: Tommy56
  Arduino Sensor zeigt falsche Werte an Sandro2504 4 298 04.06.2017 09:03
Letzter Beitrag: hotsystems
  Fehler bei Zeitmessung Fox 15 466 24.05.2017 09:19
Letzter Beitrag: SkobyMobil

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste