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
  Analog Read, Fehler nach 0,6 Sekunden, Prescaler, SD nilsconrad 18 336 Gestern 21:46
Letzter Beitrag: Bitklopfer
Rainbow File geht nicht zum compilieren!!!! Jocky 7 135 19.02.2017 20:01
Letzter Beitrag: Binatone
  IRremote bringe ich nicht zum laufen Franz54 5 83 19.02.2017 11:56
Letzter Beitrag: Tommy56
  Servo-Ansteuerung über einen Push-Button Aubergine83 1 91 16.02.2017 19:49
Letzter Beitrag: georg01
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 254 02.02.2017 12:16
Letzter Beitrag: Tommy56
  Arduino Läst sich nicht Programmieren Micha06 4 182 29.01.2017 17:27
Letzter Beitrag: Micha06
  Nicht verzagen Forum fragen bergfrei 13 403 28.01.2017 06:09
Letzter Beitrag: dqb312
  Sloeber findet meinen Com Port nicht :-( Pfeilebastler 2 106 27.01.2017 11:11
Letzter Beitrag: hotsystems
  Seltsamer Fehler bei Vergleichsoperation ardu_arne 14 320 22.01.2017 20:35
Letzter Beitrag: Binatone
  nRF24l01 empfängt Daten nicht techniclover 1 181 09.01.2017 19:20
Letzter Beitrag: celle

Gehe zu:


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