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
  Fehler in meinem Programm Franz54 7 144 01.12.2016 23:58
Letzter Beitrag: hotsystems
  Arduino lässt sich nicht installieren bergfrei 4 136 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino Mega 2560 läuft nicht Wolfgang50 6 172 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Ausgabe Serial Monitor zu viele Byt`s Hannes 0 87 12.11.2016 20:29
Letzter Beitrag: Hannes
  Ausgabe auf WIFI Console vom UNO WIFI MZ-Lurre 0 89 17.10.2016 11:33
Letzter Beitrag: MZ-Lurre
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 325 16.10.2016 14:07
Letzter Beitrag: Pit
  Fehler im Programmablauf binderj1 14 347 10.10.2016 10:29
Letzter Beitrag: StephanBuerger
  Fehler beim Kompilieren binderj1 5 292 03.10.2016 21:27
Letzter Beitrag: hotsystems
Smile Simpler Fehler bei MAP? malsehen 8 226 02.10.2016 19:46
Letzter Beitrag: malsehen
  Upload funktioniert nicht Levi 5 237 22.09.2016 20:19
Letzter Beitrag: hotsystems

Gehe zu:


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