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
Gruß Dieter
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
Gruß Dieter
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
Gruß Dieter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  328P geht nicht mehr Harry 32 896 23.02.2018 17:30
Letzter Beitrag: Harry
  Rotaryencoder funktioniert nicht richtig 123clever 19 412 20.02.2018 22:22
Letzter Beitrag: rpt007
  Hilfe bei diesen Fehler MrMagoo 22 618 06.02.2018 20:03
Letzter Beitrag: hotsystems
  Neuling mit einen Projekt MrNiceGuy 39 2.205 04.02.2018 20:50
Letzter Beitrag: MrNiceGuy
  Echtzeituhrmodul läuft nicht scritch 64 2.820 28.01.2018 14:16
Letzter Beitrag: Tommy56
  <RCReceive.h> Fehler do1xxy 7 327 13.01.2018 13:21
Letzter Beitrag: do1xxy
  Arduino zu MySQL via Wifi Fehler beim compilieren Franzel007 21 860 05.01.2018 20:24
Letzter Beitrag: Tommy56
Bug I2C Displays wollen nicht mehr Der Ausserirdische 12 589 30.12.2017 17:11
Letzter Beitrag: hotsystems
  Uhr funktioniert nicht Jakob 8 568 30.12.2017 00:15
Letzter Beitrag: hotsystems
  Arduino Uno - einen digitalen Pin mit nodeMCU 12E auslesen Stargazer 6 348 17.12.2017 17:40
Letzter Beitrag: hotsystems

Gehe zu:


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