Längenmessgerät

Das macht für mich keinen Sinn diese Aussage.
Entweder der Sensor ist die ganze Zeit angeschlossen oder er ist abgeklemmt. Was bringt "schnelles Zuschalten" des Sensors
Ich verstehe unter "schnellem Zuschalten" Sensor wird angeklemt / abgeklemmt. Aber das macht doch keinen Sinn!
vgs

bei 2 kHz funktioniert die Bibliothek nicht, weil sie "bouncing" sieht.

Die Idee, Interrupts zu verwenden, wäre sinnvoll (cf @ StefanL38)

Das ist richtig.
Das habe ich extra so gemacht.
Jetzt änderst Du die Zeile:

 double Laenge = 0;

in neu:

 static double Laenge = 0;

Und das mit der 0 kommt dann.

Entschuldigt bitte, dass ich jetzt erst anworte, aber die Restriktionen des Forums sind echt komisch. Konnte 19h nichts schreiben, obwohl ich Lvl 1 war.
Naja egal, ich danke erstmal für die Hilfe, aber auch weitere Versuche haben das Problem nicht lösen können.
Ich versuche es weiterhin und falls ich zu einem Ergebnis komme informiere ich euch=).

Ja, da bist Du nicht allein.
@uwefed Kannst Du das mal bitte kommunizieren? Ist ja nu kein Einzelfall...
Und im Do you like the new forum? ist das Interesse an wirklichen Problemen eher abgeebbt.

Was heisst das?
Wenn Du den Geltungsbereich auf static änderst, dann funktioniert das sehr wohl.

22:08:15.666 -> Start...
22:08:15.666 -> Errechnete µs1: 216
22:08:15.666 -> Laenge = 0.1m
22:08:18.545 -> Errechnete µs2: 2899152
22:08:18.611 -> Errechnete µs1: 64324
22:08:18.611 -> Laenge = 0.2m
22:08:18.710 -> Errechnete µs2: 76224
22:08:18.777 -> Errechnete µs1: 82616
22:08:18.777 -> Laenge = 0.3m
22:08:18.843 -> Errechnete µs2: 44624
22:08:19.174 -> Errechnete µs1: 355220
22:08:19.174 -> Laenge = 0.4m
22:08:19.240 -> Errechnete µs2: 65564
22:08:19.307 -> Errechnete µs1: 44328
22:08:19.307 -> Laenge = 0.5m
22:08:19.373 -> Errechnete µs2: 67992
22:08:19.439 -> Errechnete µs1: 66776
22:08:19.439 -> Laenge = 0.6m

Ich wüsste gerne was du mit "zuschalten" des Sensors meinst. "zuschalten" *ist ein Begriff der in diesem Zusammenhang sagen wir mal ungewöhnlich ist. "zuschalten" kann man einen Fußballreporter.

Und dann hat es die Bedeutung 'Kontakt herstellen. In Bezug auf den Sensor würde das

'Anschließen des Sensors" bedeuten.

Wie willst du vernünftig messen wenn du den Sensor anklemmst abklemmst????

Also musst du etwas anderes meinen.
Kannst du bitte mal ANDERE Wore verwenden um zu beschreiben was du da machst?
vgs

Ein Draht + ein Arduino = Emulation.

Meinst Du den Satz:

Bau ihn um.
zu schnelles schalten.

Er hat das Problem, das er Impulse verliertbzw. verloren hat - siehe weiter oben - Warum das so ist weiss ich nicht.
In den Ausgaben aus meinem Code sehe ich aber keine signifikante Verzögerung.

Viel Serial.print() zu verwenden und zu hoffen, etwas im µs-Bereich messen zu können, ist bestenfalls naiv...

Will ich ja gar nicht :wink:

Wenn das eintreten sollte,

weil es an der Beschaltung oder dem Sensor hängt, müsste da etwas mehr stehen als in #22 angegeben.
Genau da ist aber auch zu sehen, das die HIGH und LOW Zeit annähernd gleich ist. (schön gleichmäßig gedreht)
Ja, ich hätte auch millis() nehmen können. Aber große Zahlen sind schicker. :slight_smile:

Also wenn der Sensor selbst eine Schatfrequenz 2 kHz kann,
dann kann das langsame "detektieren" von LOW nur an der Software liegen.
Deswegen würde es Sinn machen erst einmal ein Textprogramm zu benutzen dass einfach nur die Zeit misst wie lange der Ausgang HIGH bzw. LOW ist. Wenn das ein spezieller Sensor ist der immer ein HIGH-Signal 1 Sekunde in die Länge zieht dann ist der Sensor einfach ungeeignet. Um das sicher abzuklären sollte man diesen elementaren Test machen.

@okgo12: Hast du ein Digitalmultimeter mit dem man Frequenz messen kann?
Dann könntest du die Welle mal schnell drehen lassen und dann die Frequenz messen. Wenn da nur 0,8 Hz angezeigt würden wäre klar
Sensor kanns nicht oder ist irgendwie ungeschickt konfiguriert.
vgs

Macht er nicht.
Der Nachweis ist erbracht.

Ich hab mal was zusammengestellt..

// Forensketch - basiert auf:
// https://forum.arduino.cc/t/langenmessgerat/872499 und
// https://forum.arduino.cc/t/langenmessgerat/872499/20

#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 2, 3, 4, 5);

const uint8_t sensorPin = 8;
const uint8_t abstand = 10;
bool startzustand;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(sensorPin, INPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.write("Laenge = 0 m");
  startzustand = digitalRead(sensorPin);
}

void loop()
{
  Ausgabe(SensorFunktion());
}

void Ausgabe(const uint32_t meter)
{
  static uint32_t letzterWert = 0;  // Dieser Teil
  if (letzterWert != meter)         // vermeidet das flimmern des Display
  {
    lcd.setCursor(0, 0);
    lcd.write("                ");
    lcd.setCursor(0, 0);
    lcd.write("Laenge = ");
    lcd.write(meter / abstand / 10);
    lcd.write(",");
    lcd.write(meter / abstand % 10);
    lcd.write(" m");
    letzterWert = meter;
  }
}

uint32_t SensorFunktion()
{
  static uint32_t laenge = 0;
  static bool sensorstate = false;
  if (startzustand)                        // Wenn der Sensor beim Start auf HIGH
  {
    startzustand = digitalRead(sensorPin); // Warte bis das Teil sich einmal bewegt hat
  }
  if (digitalRead(sensorPin) && !startzustand) // PIN HIGH und Startzustand vorbei?
  {
    if (!sensorstate)                      // noch fasle?
    {
      laenge += abstand;
      Serial.print("Laenge = ");
      Serial.print(laenge / abstand / 10);
      Serial.print(",");
      Serial.print(laenge / abstand % 10);
      Serial.println(" m");
      sensorstate = !sensorstate;          // toggle
    }
  }
  else if (sensorstate)                    // PIN LOW && state true?
  {
    sensorstate = !sensorstate;            // toggle
  }
  return laenge;
}

Wie Du siehst, sind die Fliesskommazahlen raus und wenn der Sensor zum Start HIGH ist, dann muss er erst einmal LOW werden, damit der Zaehler loslegt.
Ich hab kein Display dran, aber lief hier durch und aufm SerMon war auch was zu sehen...

Wie der TE ganz zu Anfang schrieb, will er die Umdrehungen der Rolle dedektieren, um die Länge des abgerollten Kabels zu messen? Mir ist nicht ganz klar, ob die (rel. kleine) Rolle wie ein Odometer am Kabel reibt oder ob es sich gleichzeitig um die Aufwickelrolle handelt? Bei Letzterem wäre die ganze Veranstaltung sinnlos, so lange man nicht den sich verändernden Durchmesser mit einberechnet.

Wenn es sich um eine kleine Reibrolle mit z.B. 10cm Umfang handelt, dann genügt ein kleiner Neodym-Magnet (seitlich in den Kunststoff der Rolle versenkt) , der in etwa 5mm Abstand an einem kleinen Reed-Kontakt vorbeischwenkt ...

Auf sowas wird es rauslaufen.
Nur kleiner.

Ja genau sowas möchte ich machen, nur mit digitaler Anzeige. Ich hätte auch nicht gedacht, dass das mit dem Arduino so schwer sein wird. Schien mir eine einfache Aufgabe zu sein. Mittlerweile weiß ich auch, dass ein inkrementaler Drehsensor besser gewesen wäre. Aber man lernt ja nie aus.

Ich probiere das am Montag, wenn ich den Arduino wieder habe mal aus.

Das haben wir ja in den privaten Nachrichten schon geklärt oder soll ich darauf nochmal eingehen?

Danke fürs Rückmelden - Ich hab ja nen paar Kommentare drin :wink:

Ist ja das Mindeste, wenn ihr alle eure Zeit für mich opfert :slightly_smiling_face:.