Result von Funktion - readSensor

Hallo Freunde,

bin recht neu im Adruino Land und habe ein Problem mit einer Funktion.
Ich möchte einen Rückgabewert (AvrCap) aus meiner readSensor Funktion in die void loop() holen. Der Code ist wie folgt:

#include <Wire.h>;
#include <VL53L0X.h>;
VL53L0X sensor;
float AvrNum;
int counter;
int nums = 25;
int pushButton = 5;
int buttonState;
float AvrCap;

void setup() {
  AvrNum = 0;
  counter = 0;
  Serial.begin(9600);
  Wire.begin();
  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1) {}
  }
  sensor.startContinuous();
  sensor.setMeasurementTimingBudget(200000);
}

int readButton() {
  pinMode(pushButton, INPUT);
  return buttonState = digitalRead(pushButton); // read the input pin:
  delay(10);        // delay in between reads for stability
}

void readSensor() {
  AvrNum += sensor.readRangeContinuousMillimeters();
  counter++;
  if (counter == nums) {
    AvrCap = AvrNum / nums; //calculate the mean values
    Serial.println(AvrCap );
    counter = 0;
    AvrNum = 0;
  }
}

void loop() {
  readButton();
  if (buttonState == 1) {
    readSensor();
    Serial.println(String("Button pressed!") + float(AvrCap));
    delay(3000);
  }
}

Den Button hab ich schon so weit, dass er mir in loop() den Rückgabewert liefert aber vom Sensor bekomme ich das nicht hin. Habe schon verschiedene Deklarationen und Initialisierungen versucht.
Habe hier 2.000 Seiten Fachliteratur vor mir liegen aber mir scheint der Grund nicht nachvollziebar.

Sorry wenn ich euch hier mit vermutlich unvermögen behellige aber es scheint wichtig für meine Lernkurve.

Gruß Tino

Versuch es mal mit:

Serial.print( F( "Button pressed! "); Serial.println( AvrCap, 2); // 2 sind die decimalen

Besten Dank für die schnelle Antwort.
Funzt aber nicht. Result:

Button pressed! 0.00

bool statt int!
Ich schau noch auf den code, aber da ist der erste Ansatzpunkt.

:+1:
suggest parentheses around assignment used as truth value [-Werror=parentheses]

Ach, das ist ja noch viel aufwändiger…

Also. Du verschweigst, ob Du den Input-PIN mit einem Widerstand auf GND oder +5V gezogen hast.
Du verschweigst auch, ob der Taster nach GND oder +5V schaltet.

Ich habe jetzt folgende Variante:

Der Taster schaltet nach GND und es gibt keinen externen Widerstand.

Probiers aus:
Sag obs das ist…
[edit]
hier fehlte ein Semikolon:

pinMode(pushButton, INPUT_PULLUP)

[/edit]

// Dieser Code ist nicht zeigenswert
// Es ist ein Versuch, da nicht klar ist, was der TO hat
#include <Wire.h>;
#include <VL53L0X.h>;
VL53L0X sensor;
float AvrNum = 0.00;;
int counter = 0;;
int nums = 25;
int pushButton = 5;
int buttonState;
float AvrCap;

void setup() {
  Serial.begin(9600);
  Serial.println(F("Start..."));
  pinMode(pushButton, INPUT_PULLUP);
  Wire.begin();
  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1) {}
  }
  sensor.startContinuous();
  sensor.setMeasurementTimingBudget(200000);
}

bool readButton() {
  buttonState = digitalRead(pushButton); // read the input pin:
  delay(10);        // delay in between reads for stability
  return (buttonState);
}

void readSensor() {
  AvrNum += sensor.readRangeContinuousMillimeters();
  counter++;
  if (counter == nums) {
    AvrCap = AvrNum / nums; //calculate the mean values
    Serial.println(AvrCap );
    counter = 0;
    AvrNum = 0;
  }
}

void loop() {
  if (readButton() == 0) {
    readSensor();
    Serial.println(String("Button pressed!") + float(AvrCap));
    delay(3000);
  }
}

Soo, jetzt mal aufgeräumt, bevor ich raus muss.
In Deinen Zeilen 3 und 4 muss das Semikolon raus.
So dann natürlich auch bei mir…

Wenn Du einen Taster hast, der mit einem Widerstand nach GND beschaltet ist und bei PUSH auf +5V reagieren soll, dann ist in meiner Zeile 16 der INPUT_PULLUP nach INPUT zu ändern.
Gleichzeitig(!) muss dann in meiner Zeile 46 der Vergleich von readButton() auf == 1 erfolgen.

Das müsste so funktionieren.

Habt recht,
unzureichende Informationen meinerseits…
Der Code ist unverändert.
Hier die Schaltung:

ok, das Bild lässt sich aus der Forensoftware nicht laden - ich hab das mal über Umwege versucht und denke es passt.
Mein veränderter Code.

Bitte mal die Ausgaben aus dem SerMon hier reinstellen.
Ich denke, das Dein Counter nicht das macht, was Du willst. Aber dazu später…
[edit] Ich hatte Deinen Ursprungscode - der compiliert nicht sauber - hier mit den geänderten Semikolon… [/edit]

// Dieser Code ist nicht zeigenswert
// Taster schaltet VCC, PULL_DOWN

#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
float AvrNum = 0.00;
int counter = 0;
int nums = 25;
int pushButton = 5;
int buttonState;
float AvrCap;

void setup() {
  Serial.begin(9600);
  Serial.println(F("Start..."));
  pinMode(pushButton, INPUT);
  Wire.begin();
  sensor.setTimeout(500);
  if (!sensor.init())
  {
    Serial.println("Failed to detect and initialize sensor!");
    while (1) {}
  }
  sensor.startContinuous();
  sensor.setMeasurementTimingBudget(200000);
}

bool readButton() {
  buttonState = digitalRead(pushButton); // liest den Zustand der Taste
  if (buttonState) {
    Serial.println(F("Taste gedrückt - warte 10ms"));
    delay(10);        //
    return (buttonState);  // gibt Zustand nach delay zurück
  }
}

void readSensor() {
  Serial.println(F("Lese Sensor"));
  AvrNum += sensor.readRangeContinuousMillimeters();
  counter++;
  if (counter == nums) {
    Serial.println(F("Counter erreicht - kalkuliere..."));
    AvrCap = AvrNum / nums; //calculate the mean values
    Serial.println(AvrCap );
    counter = 0;
    AvrNum = 0;
  }
  else
  {
    Serial.println(F("Counter nicht erreicht"));
  }
}

void loop() {
  if (readButton) // Wenn return == HIGH
  {
    Serial.println(F("Hole Daten vom Sensor"));
    readSensor();
    Serial.println(String("Button pressed!") + float(AvrCap));
    delay(3000);
  }
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.