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 wird nicht erkannt sowerum 14 247 10.12.2017 22:14
Letzter Beitrag: Tommy56
  Neuling mit einen Projekt MrNiceGuy 31 1.083 30.11.2017 22:15
Letzter Beitrag: torsten_156
  Echtzeituhrmodul läuft nicht scritch 21 600 30.11.2017 10:44
Letzter Beitrag: Tommy56
  Neuling Fehler beim Kompilieren guenni71 6 253 26.11.2017 16:48
Letzter Beitrag: hotsystems
  M enue System zeigt Fehler rev.antun 11 431 23.11.2017 12:22
Letzter Beitrag: rev.antun
  Bootloader lässt sich nicht brennen?? dobermann145 10 542 21.11.2017 22:58
Letzter Beitrag: hotsystems
  Fehler in gleitkomma Berechnung BennIY 5 346 04.11.2017 19:10
Letzter Beitrag: Tommy56
  Suche Hilfe für den Fehler in der Datei Holzwurm56 5 378 01.11.2017 14:26
Letzter Beitrag: Holzwurm56
Sad Nano - nicht genug Speicher torsten_156 10 626 30.10.2017 21:40
Letzter Beitrag: MicroBahner
  AnalogRead() von Batterie - Messe immer 1023 trotz analogReference(INTERNAL); Flap 9 545 18.10.2017 21:53
Letzter Beitrag: georg01

Gehe zu:


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