Go Down

Topic: Drehscheibe Modellbahn mit RF24 (Read 5212 times) previous topic - next topic

Acki1985

#15
Jan 01, 2019, 12:46 pm Last Edit: Jan 01, 2019, 01:06 pm by Acki1985
Gesundes neues Jahr wünsche ich allen  :)

Ich danke dir Postmaster.

Ich bin schon ein Schritt weiter. Ich möchte mit dem Encoder Positionen einstellen können die ein Motor zurücklegen (Stepps) muss. Das mit der Berechnung funktioniert schon ganz gut. Nur wie mache ich das, das die Schritte mit einem Hallsensor mittels Magnet am Zahnrad.vergleicht und wenn die Schritte zurückgelegt wurden der Motor abschaltet?

Code: [Select]


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte encoderPinA = 10;            // Phase A vom Drehencoder
const byte encoderPinB = 11;             // Phase B vom Drehencoder
const byte tasterEnter = 12;                   // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0;                  // gespeicherter Encoderwert
int encoderGedrueckt = 0;              // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH;             // Taster im Encoder
int gleisAlt = 0;                     // Scheibe Position alt
int gleisNeu = 0;                     // Position welche die Scheibe anfahren soll
bool enter = false;                   // Bestätigung das der Encoder gedrückt wurde
int schritte =0;                      // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss

unsigned long encoderDruckzeit;       // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200;     // Zeit die nach der betätigung eines Tasters gewartet wird


 void setup() {
 pinMode(encoderPinA, INPUT);
 pinMode(encoderPinB, INPUT);
 pinMode(tasterEnter, INPUT);
 Serial.begin(9600);
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Encoder");
 lcd.setCursor(0, 1);
 lcd.print("Test");
 delay (2000);
 lcd.clear();
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 }

 void loop() {
 
 messungPin1 = digitalRead(encoderPinA);
 if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
 if (digitalRead(encoderPinB) == HIGH) {
 if (encoderWert < 24) encoderWert++ ;
} else {
 if (encoderWert > 1) encoderWert-- ;

  }
 
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 
 }

 {
  encoderTaster = digitalRead(tasterEnter);
  if (encoderTaster == LOW)
  {
    encoderDruckzeit = millis();
    encoderGedrueckt = 1;
  }

  if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt ==1) {
   
   
    wertSpeichern = encoderWert;
    Serial.println(wertSpeichern);
    encoderGedrueckt=0;
    enter = true;
  }

if (enter == true) {
  gleisNeu = wertSpeichern;
  schritte = gleisNeu - gleisAlt;
  Serial.print ("benoetigte Schritte  ");
  Serial.println(schritte);
  gleisAlt = wertSpeichern;
  enter = false;
}

//if ((schritte >12)&& (enter== true)) {
 // Serial.println("rechts");
  //enter = false;
}
//  else {
   // Serial.println("links");
    //enter = false;
//}

//}

 
 
 
 messungPin1Alt = messungPin1;

 
  }
 
 
 

Rentner

Hallo,

DC Motor , Schrittmotor , eine Richtung , zwei Richtungen, wie schnell dreht das Zahnrad, Welche Übersetztung mit Bezug auf die Motorwelle ? Willst du wirklich  nur so viel Zähne fahren we Du mit den Werten des Encoders vorgibst ( 0-23)

Jetzt mal ganz grob

Bei einem Schrittmotor macht der Hallsensor keinen Sinn. Bei DC Motor must du halt die Impulse des Hallsensors beim fahren zählen, mit deinem Sollwert vergleichen und dann abschalten. Mit einem DC Motor kannst Du keine kleinen Winkelschritte fahren.
Mit nur einem Hallsensor am Zahnrad weist Du nicht wie die Richtung ist. Dann must Du Dir die aktuelle Position aus den gefahren Impulsen bilden und in einer Variablen abspeichern. Aus der Differenz zwischen neuem Sollwert und Istwert die Richtung bestimmen und abhängig davon den Istwert hoch oder runter zählen. Probleme bekommst Du damit beim starten nach Power on , da Du nicht weist wo du stehst. Ein " Refferenzfahren " währe dazu die Lösung.

Heinz

Acki1985

Hallo Heinz,

Ich danke dir. Also es wird ein DC Motor über Motortreiber angesteuert. Die Bühne wird über ein großes Zahnrad angetrieben. Dieses Zahnrad besitzt 3 Kerben wo bei erreichen ein Stift einrastet. Dieser Stift wird Bei Start zurückgesogen und gibt das Zahnrad frei. Nach ablauf der Schritte, soll der Stift wieder in die entsprechende Kerbe einrasten. Der Weg den die Bühne zurückgelegt hat, wird über den Hallsensor ermittelt. An jeder Kerbe ist ein Magnet angebracht. Jede Kerbe bedeudet einen Gleisabgang. Ich hoffe ich konnte es einigermasen verständlich erklären. Der Start ab Gleis 1 wird immer bei Poweron über eine Referenzfahrt festgelegt.

Acki1985

#18
Jan 01, 2019, 04:01 pm Last Edit: Jan 01, 2019, 04:08 pm by Acki1985
Hab mal ein wenig weiter gemacht. Nur leider scheint er die While Schleife nicht auszuführen.

Code: [Select]




#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte hal = 3;
const byte encoderPinA = 10;            // Phase A vom Drehencoder
const byte encoderPinB = 11;             // Phase B vom Drehencoder
const byte tasterEnter = 12;                   // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0;                  // gespeicherter Encoderwert
int encoderGedrueckt = 0;              // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH;             // Taster im Encoder
int gleisAlt = 0;                     // Scheibe Position alt
int gleisNeu = 0;                     // Position welche die Scheibe anfahren soll
bool enter = false;                   // Bestätigung das der Encoder gedrückt wurde
int schritte =0;                      // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss

unsigned long encoderDruckzeit;       // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200;     // Zeit die nach der betätigung eines Tasters gewartet wird


 void setup() {
 pinMode(encoderPinA, INPUT);
 pinMode(encoderPinB, INPUT);
 pinMode(tasterEnter, INPUT);
 pinMode(hal, INPUT);
 Serial.begin(9600);
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Encoder");
 lcd.setCursor(0, 1);
 lcd.print("Test");
 delay (2000);
 lcd.clear();
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 }

 void loop() {
 
 messungPin1 = digitalRead(encoderPinA);
 if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
 if (digitalRead(encoderPinB) == HIGH) {
 if (encoderWert < 24) encoderWert++ ;
} else {
 if (encoderWert > 1) encoderWert-- ;

  }
 
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 
 }

 {
  encoderTaster = digitalRead(tasterEnter);
  if (encoderTaster == LOW)
  {
    encoderDruckzeit = millis();
    encoderGedrueckt = 1;
  }

  if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt ==1) {
   
   
    wertSpeichern = encoderWert;
    Serial.println(wertSpeichern);
    encoderGedrueckt=0;
    enter = true;
  }

if (enter == true) {
  gleisNeu = wertSpeichern;
  schritte = gleisNeu - gleisAlt;
  Serial.print ("benoetigte Schritte  ");
  Serial.println(schritte);
  //gleisAlt = wertSpeichern;
  Serial.println(gleisNeu);
  Serial.println(gleisAlt);
  Serial.println(enter);
 

  if ((gleisNeu != gleisAlt) && (enter == true)) {
    while (schritte >0);{
    if (hal == LOW);
    schritte--;
    Serial.println("Schritte");
    Serial.println(schritte);
    }
  }
    else {
      enter = false;
    }
   
  }
//if ((schritte >12)&& (enter== true)) {
 // Serial.println("rechts");
  //enter = false;
}
//  else {
   // Serial.println("links");
    //enter = false;
//}

//}

 
 
 
 messungPin1Alt = messungPin1;

 
  }
 
 

 



Habt ihr ne Idee?

michael_x

while (schritte >0);  // ??
Die while-Schleife geht nur bis zum Semikolon
Wenn (schritte > 0) hängt der Sketch hier für immer


So ganz habe ich die Sketch-Logik aber nicht verstanden ...

Acki1985

Ein Zahnrad welches in einem Getriebe eingebaut ist, besitzt einen drei Magneten an unteschiedlichen Stellen. Über den Encoder wähle ich aus welche position das Zahnrad nach betätigung des Encoder Tasters einehmen soll. Über den Hallsensor werden die Schritte gezählt wie oft der Magnet schon am Sensor vorbeikommen ist. Solange die Schritte noch nicht abgelaufen sind, Bekommt der Motor Strom. Wenn die Schritte dann null sind, wird der Motor abgeschalten. Der Motor ist noch nicht im Code eingebaut.

Ich hoffe ich habe etwas Licht ins dunkle gebracht.

Rentner

Hallo,

du musst dich noch mal mit den Themen

while
if  
Klannern { } und ; beschäfitgen

das geht bei Dir alles ein wenig durcheinander das führt dazu das der Sketch nicht das macht was Du erwartetst.

da wir nicht wissen was Du erwartest wird das schwer für uns  8)

Heinz

Acki1985

#22
Jan 01, 2019, 04:44 pm Last Edit: Jan 01, 2019, 04:58 pm by Acki1985
Dmit hast du Recht. Das mit den Klammern (), und Semikolons hab ich auch noch nicht begriffen. Habt ihr da nen Tip wo das verständlich erklärt wird?

Code: [Select]



#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte hal = 3;
const byte encoderPinA = 10;            // Phase A vom Drehencoder
const byte encoderPinB = 11;             // Phase B vom Drehencoder
const byte tasterEnter = 12;                   // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0;                  // gespeicherter Encoderwert
int encoderGedrueckt = 0;              // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH;             // Taster im Encoder
int gleisAlt = 0;                     // Scheibe Position alt
int gleisNeu = 0;                     // Position welche die Scheibe anfahren soll
bool enter = false;                   // Bestätigung das der Encoder gedrückt wurde
int schritte =0;                      // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss

unsigned long encoderDruckzeit;       // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200;     // Zeit die nach der betätigung eines Tasters gewartet wird


 void setup() {
 pinMode(encoderPinA, INPUT);
 pinMode(encoderPinB, INPUT);
 pinMode(tasterEnter, INPUT);
 pinMode(hal, INPUT);
 Serial.begin(9600);
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Encoder");
 lcd.setCursor(0, 1);
 lcd.print("Test");
 delay (2000);
 lcd.clear();
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 }

 void loop() {
 
 messungPin1 = digitalRead(encoderPinA);
 if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
 if (digitalRead(encoderPinB) == HIGH) {
 if (encoderWert < 24) encoderWert++ ;
} else {
 if (encoderWert > 1) encoderWert-- ;

  }
 
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Wert");
 lcd.setCursor(0, 1);
 lcd.print(encoderWert);
 
 }

 {
  encoderTaster = digitalRead(tasterEnter);
  if (encoderTaster == LOW)
  {
    encoderDruckzeit = millis();
    encoderGedrueckt = 1;
  }

  if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt ==1) {
   
   
    wertSpeichern = encoderWert;
    Serial.println(wertSpeichern);
    encoderGedrueckt=0;
    enter = true;
  }

if (enter == true) {
  gleisNeu = wertSpeichern;
  schritte = gleisNeu - gleisAlt;
  Serial.print ("benoetigte Schritte  ");
  Serial.println(schritte);
  //gleisAlt = wertSpeichern;
  Serial.println(gleisNeu);
  Serial.println(gleisAlt);
  Serial.println(enter);



  if ((gleisNeu != gleisAlt) && (enter == true)) {
    while (schritte !=0) {
    if (digitalRead (hal) == LOW);{
    schritte--;
    Serial.println("Schritte");
    Serial.println(schritte);
    delay(2000);
    enter = false;
    gleisAlt = wertSpeichern;
    }
   
  }
  }
   
   
   
 
//if ((schritte >12)&& (enter== true)) {
 // Serial.println("rechts");
  //enter = false;
}
//  else {
   // Serial.println("links");
    //enter = false;
//}
//}

 
 
 
 messungPin1Alt = messungPin1;

 
  }
 
 


Hab den Code noch mal bearbeitet.

Rentner

Hallo,

in der IDE Hilfe //Referenz da findest Du den grundsätzlichen Syntax zu den einzelnen Funktionen auch mit Beispielen. Es geht um eine Sprache da gibts feste Regeln, leider ist C da besonders streng.

üben , üben und möglichst wenig mit past&copy arbeiten. Englisch lernst Du auch nur wenn Du es sprichst und schreibst  8)


Acki1985

Woran liegt das, das die While Schleife ausgefhrt wird, obwohl der Hal gar nicht betätigt wird?

postmaster-ino

#25
Jan 01, 2019, 05:37 pm Last Edit: Jan 01, 2019, 05:39 pm by postmaster-ino
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte hal = 3;
const byte encoderPinA = 10;            // Phase A vom Drehencoder
const byte encoderPinB = 11;             // Phase B vom Drehencoder
const byte tasterEnter = 12;                   // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0;                  // gespeicherter Encoderwert
int encoderGedrueckt = 0;              // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH;             // Taster im Encoder
int gleisAlt = 0;                     // Scheibe Position alt
int gleisNeu = 0;                     // Position welche die Scheibe anfahren soll
bool enter = false;                   // Bestätigung das der Encoder gedrückt wurde
int schritte = 0;                     // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss
unsigned long encoderDruckzeit;       // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200;     // Zeit die nach der betätigung eines Tasters gewartet wird

void setup() {
  pinMode(encoderPinA, INPUT);
  pinMode(encoderPinB, INPUT);
  pinMode(tasterEnter, INPUT);
  pinMode(hal, INPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Encoder");
  lcd.setCursor(0, 1);
  lcd.print("Test");
  delay (2000);
  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Wert");
  lcd.setCursor(0, 1);
  lcd.print(encoderWert);
}

void loop() {
  messungPin1 = digitalRead(encoderPinA);
  if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
    if (digitalRead(encoderPinB) == HIGH) {
      if (encoderWert < 24) encoderWert++ ;
    } else {
      if (encoderWert > 1) encoderWert-- ;
    }
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Wert");
    lcd.setCursor(0, 1);
    lcd.print(encoderWert);
  }
  {  //<-- WTF macht diese Klammer???
    encoderTaster = digitalRead(tasterEnter);
    if (encoderTaster == LOW)
    {
      encoderDruckzeit = millis();
      encoderGedrueckt = 1;
    }
    if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt == 1) {
      wertSpeichern = encoderWert;
      Serial.println(wertSpeichern);
      encoderGedrueckt = 0;
      enter = true;
    }
    if (enter == true) {
      gleisNeu = wertSpeichern;
      schritte = gleisNeu - gleisAlt;
      Serial.print ("benoetigte Schritte  ");
      Serial.println(schritte);
      Serial.println(gleisNeu);
      Serial.println(gleisAlt);
      Serial.println(enter);
    }
    if ((gleisNeu != gleisAlt) && (enter == true)) {
      while (schritte != 0) {
        if (digitalRead (hal) == LOW); {
          schritte--;
          Serial.println("Schritte");
          Serial.println(schritte);
          delay(2000); //ein Hall-Sensor prellt nicht und hier machst Du ganze 2 Sekunden NICHTS - mir ist bewusst, was Du hier willst
          enter = false;
          gleisAlt = wertSpeichern;
        }
      }
    }
  } // hier WTF-Klammer Nummer 2
  messungPin1Alt = messungPin1;
}  //DAS war Mal Zeile 128, jetzt 91 8-)

MfG

PS: Ggf., weil schritte ungleich Null ist?
PS²: Ggf. hilft Die hier die serielle Ausgabe weiter - wenn hier die benötigten Schritte <0 sind, hast Du bei Deiner Abfrage ein neues Problem
PPS: STRG+T und entfernen von unnötigen Leerzeilen ... ich wiederhole mich
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Rentner

Hi,

siehe #19 , #21

du darfst  das was wir schreiben nicht nur lesen, sondern auch verstehen  ;)

Acki1985

Hab es gerade gemacht. Strg + T kannte ich noch nicht.
Aber ich frage doch in der While Schleife den Hal ab? Steh irgendwie auf dem Schlauch

Acki1985

Ich hoffe so ist es besser:-)

Was für ein Problem meinst du. Wenn die Schritte 0 sind kann ich die nächste Position wählen und es werden die von der jetzigen Position bis zur neuen Position benötigten Schritte berechnet und ausgeführt.

Code: [Select]




#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


int messungPin1 = HIGH;
int messungPin1Alt = HIGH;
byte encoderWert = 0; // -1 ( eins weniger als 0 ) == 255
const byte hal = 3;
const byte encoderPinA = 10;            // Phase A vom Drehencoder
const byte encoderPinB = 11;             // Phase B vom Drehencoder
const byte tasterEnter = 12;                   // Pin an dem der Encoder Taster angeschlossen ist
int wertSpeichern = 0;                  // gespeicherter Encoderwert
int encoderGedrueckt = 0;              // Statusspeicher ob Encodertaster betätigt wurde
int encoderTaster = HIGH;             // Taster im Encoder
int gleisAlt = 0;                     // Scheibe Position alt
int gleisNeu = 0;                     // Position welche die Scheibe anfahren soll
bool enter = false;                   // Bestätigung das der Encoder gedrückt wurde
int schritte = 0;                     // Schritte die deer Motor (Hallsensor betätigt) zurücklegen muss

unsigned long encoderDruckzeit;       // Zeit wann der Encodertaster betätigt wurde
unsigned long entprellZeit = 200;     // Zeit die nach der betätigung eines Tasters gewartet wird


void setup() {
  pinMode(encoderPinA, INPUT);
  pinMode(encoderPinB, INPUT);
  pinMode(tasterEnter, INPUT);
  pinMode(hal, INPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Encoder");
  lcd.setCursor(0, 1);
  lcd.print("Test");
  delay (2000);
  lcd.clear();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Wert");
  lcd.setCursor(0, 1);
  lcd.print(encoderWert);
}

void loop() {
  messungPin1 = digitalRead(encoderPinA);
  if ((messungPin1 == LOW) && (messungPin1Alt == HIGH)) {
    if (digitalRead(encoderPinB) == HIGH) {
      if (encoderWert < 24) encoderWert++ ;
    } else {
      if (encoderWert > 1) encoderWert-- ;
    }
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Wert");
    lcd.setCursor(0, 1);
    lcd.print(encoderWert);
  }
     encoderTaster = digitalRead(tasterEnter);
    if (encoderTaster == LOW)
    {
      encoderDruckzeit = millis();
      encoderGedrueckt = 1;
    }
    if ((millis() - encoderDruckzeit > entprellZeit) && encoderGedrueckt == 1) {
      wertSpeichern = encoderWert;
      Serial.println(wertSpeichern);
      encoderGedrueckt = 0;
      enter = true;
    }
    if (enter == true) {
      gleisNeu = wertSpeichern;
      schritte = gleisNeu - gleisAlt;
      Serial.print ("benoetigte Schritte  ");
      Serial.println(schritte);
      //gleisAlt = wertSpeichern;
      Serial.println(gleisNeu);
      Serial.println(gleisAlt);
      Serial.println(enter);
    }
    if ((gleisNeu != gleisAlt) && (enter == true)) {
      while (schritte != 0) {
        if (digitalRead (hal) == LOW); {
          schritte--;
          Serial.println("Schritte");
          Serial.println(schritte);
          delay(2000);
          enter = false;
          gleisAlt = wertSpeichern;
        }
      }
    }
    //if ((schritte >12)&& (enter== true)) {
    // Serial.println("rechts");
    //enter = false;
   //  else {
  // Serial.println("links");
  //enter = false;
  //}
  //}
  messungPin1Alt = messungPin1;
}




Rentner

Hi,

Keine Ahnung worauf du stehst ,

Die Abfrage des Hallsensors hat doch nichts mit dem While zu tun , richtig ist das die Abfrage des Hallsensors nur erfolgt wenn die while schleife erfüllt ist.

nochmals der Vorschlag zurück zu #19 u #21

was willst Du in der while schleife eigentlich machen , wenn der Sensor belegt ist runter zählen bis 0 , das jedesmal anzeigen und dazwischen 2s warten. ?

Heinz

Go Up