Kapazitiver Schalter

Hallo, brauche mal wieder eure Hilfe,

um Bewegungen auf unserer Vereins Modellbahnanlage zu starten, haben wir bis jetzt Taster mit mechanischem Kontakt verwendet. Da die auf Ausstellungen stark beansprucht werden und deshalb dauernd ausgewechselt werden müssen, wollen wir in Zukunft kapazitive Berührungsschalter verwenden. Der erste Versuch hat auch gut geklappt. Siehe Sketch 1.
Als nächstes Projekt soll der Getriebemotor 10 Umdrehungen machen und dann in Ruhestellung gehen. Gezählt werden die Umdrehungen mit einem Hallsensor. Das Zählprogramm funktioniert auch. Siehe Sketch 2.
Mein Problem ist den Sketch 1 und Sketch 2 zu einem Sketch zu verbinden. Siehe Sketch 3.
Sitze jetzt schon drei Wochen daran und komme auf keinen grünen Zweig.
Würde mich freuen wenn mir jemand weiterhelfen kann.
Sketch 1 und 2 kommen dem einen oder anderem bekannt vor, habe sie von Internet.
Als Ergänzung habe ich noch ein Flussdiagramm geschrieben und hoffe genügend Informationen gegeben zu haben.

Gruß BJS

Was hat das alles mit dem Titel "test" zu tun?

Dann 2 völlig unabhängige Fragen. Ich glaube, Du willst uns verarschen.

Gruß Tommy

ich will niemand verarschen.
ich komme einfach mit dem laden nicht mehr klar
bitte um entschuldigung

bitte den topics löschen

versuche es andersmal

Das ist allerdings ein merkwürdiger Titel.

Den kannst du übrigens selbst ändern und Sketche sehe ich auch keine.

Ein neuer Versuch.

Leider ist es mir nicht gelungen das Flussdiagram in Form einer Word Tabelle zu laden.
Versuche es jetzt mit einem Foto.

Sketch1

int touch01;
int LEDrot01 = 12;             // Berührungsschalter gesperrt
int LEDgruen01 = 11;           // Berührungsschalter frei
int Relais01 = 10;             // Relais Getriebemotor

void setup()
{
  Serial.begin(9600);
  pinMode(LEDrot01, OUTPUT);
  pinMode(LEDgruen01, OUTPUT);
  pinMode(Relais01, OUTPUT);
}

void loop()
{
  touch01 = readCapacitivePin01(9);     // Berührungsschalter Start
  Serial.println(touch01);
  if (touch01 < 5)
  {
    digitalWrite(LEDgruen01, LOW);
    digitalWrite(LEDrot01, HIGH);
    digitalWrite(Relais01, LOW);
  }
  else
  {
    delay(100);
    digitalWrite(LEDgruen01, HIGH);
    digitalWrite(LEDrot01, LOW);
    digitalWrite(Relais01, HIGH);
    delay(20000);
  }
}

uint8_t readCapacitivePin01(int pinToMeasure)
{
  volatile uint8_t* port;
  volatile uint8_t* ddr;
  volatile uint8_t* pin;
  byte bitmask;
  port = portOutputRegister(digitalPinToPort(pinToMeasure));
  ddr = portModeRegister(digitalPinToPort(pinToMeasure));
  bitmask = digitalPinToBitMask(pinToMeasure);
  pin = portInputRegister(digitalPinToPort(pinToMeasure));
  *port &= ~(bitmask);
  *ddr  |= bitmask;
  delay(1);
  uint8_t SREG_old = SREG;
  noInterrupts();
  *ddr &= ~(bitmask);
  *port |= bitmask;
  uint8_t cycles = 17;
  if (*pin & bitmask) {
    cycles =  0;
  }
  else if (*pin & bitmask) {
    cycles =  1;
  }
  else if (*pin & bitmask) {
    cycles =  2;
  }
  else if (*pin & bitmask) {
    cycles =  3;
  }
  else if (*pin & bitmask) {
    cycles =  4;
  }
  else if (*pin & bitmask) {
    cycles =  5;
  }
  else if (*pin & bitmask) {
    cycles =  6;
  }
  else if (*pin & bitmask) {
    cycles =  7;
  }
  else if (*pin & bitmask) {
    cycles =  8;
  }
  else if (*pin & bitmask) {
    cycles =  9;
  }
  else if (*pin & bitmask) {
    cycles = 10;
  }
  else if (*pin & bitmask) {
    cycles = 11;
  }
  else if (*pin & bitmask) {
    cycles = 12;
  }
  else if (*pin & bitmask) {
    cycles = 13;
  }
  else if (*pin & bitmask) {
    cycles = 14;
  }
  else if (*pin & bitmask) {
    cycles = 15;
  }
  else if (*pin & bitmask) {
    cycles = 16;
  }

  SREG = SREG_old;
  *port &= ~(bitmask);
  *ddr  |= bitmask;

  return cycles;
}

Sketch 2

const int buttonPin = 8;                      // Hall Sensor
const int Relais = 10;                        // Getriebemotor
boolean buttonState, oldButtonState;
unsigned long anzeigeMillis, aktMillis;
const int anzeigeZeit = 1000;

void setup()
{
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(Relais, OUTPUT);
  Serial.begin(9600);
  buttonState = digitalRead(buttonPin);
  oldButtonState = buttonState;
}

void loop()
{
  digitalWrite(Relais, HIGH);
  static int Puls;
  aktMillis = millis();
  buttonState = digitalRead(buttonPin);

  if ( buttonState && !oldButtonState )      // positive Flanke erkannt
  {
    delay(10);                              // Entprellen
    Puls++;
  }
  oldButtonState = buttonState;
  if (aktMillis - anzeigeMillis >= anzeigeZeit)
  {
    anzeigeMillis = aktMillis;
    Serial.print("Puls: ");
    Serial.println(Puls);
  }
  if (Puls == 10)
  {
    digitalWrite(Relais, LOW);
    Puls = 0;
    delay(1000);
  }
}

Sketch 3

int touch01;
int CapacitivePin01 = 9;                    // Berührungsschalter Start
int LEDrot01 = 12;                          // Berührungsschalter gesperrt
int LEDgruen01 = 11;                        // Berührungsschalter frei
int Relais01 = 10;                          // Relais für Getriebemotor
const int buttonPin = 8;                    // Hall Sensor

boolean buttonState, oldButtonState;
unsigned long anzeigeMillis, aktMillis;
const int anzeigeZeit = 1000;

void setup()
{
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  pinMode(LEDrot01, OUTPUT);
  pinMode(LEDgruen01, OUTPUT);
  pinMode(Relais01, OUTPUT);
  buttonState = digitalRead(buttonPin);
  oldButtonState = buttonState;
}

void loop()
{
  static int Puls;
  aktMillis = millis();
  buttonState = digitalRead(buttonPin);

  touch01 = readCapacitivePin01(9);
  Serial.println(touch01);
  if (touch01 < 4)
  {
    digitalWrite(LEDgruen01, LOW);
    digitalWrite(LEDrot01, HIGH);
    digitalWrite(Relais01, LOW);
  }
  else
  {
    delay(100);
    digitalWrite(LEDgruen01, HIGH);
    digitalWrite(LEDrot01, LOW);
    digitalWrite(Relais01, HIGH);

    if ( buttonState && !oldButtonState )      // positive Flanke erkannt
    {
      delay(10); // Entprellen
      Puls++;
    }
    oldButtonState = buttonState;
    if (aktMillis - anzeigeMillis >= anzeigeZeit)
    {
      anzeigeMillis = aktMillis;
      Serial.print("Puls: ");
      Serial.println(Puls);
    }
    if (Puls == 10)
    {
      digitalWrite(Relais01, LOW);
      Puls = 0;
    }
  }
}
uint8_t readCapacitivePin01(int pinToMeasure)
{
  volatile uint8_t* port;
  volatile uint8_t* ddr;
  volatile uint8_t* pin;
  byte bitmask;
  port = portOutputRegister(digitalPinToPort(pinToMeasure));
  ddr = portModeRegister(digitalPinToPort(pinToMeasure));
  bitmask = digitalPinToBitMask(pinToMeasure);
  pin = portInputRegister(digitalPinToPort(pinToMeasure));
  *port &= ~(bitmask);
  *ddr  |= bitmask;
  delay(1);
  uint8_t SREG_old = SREG;
  noInterrupts();
  *ddr &= ~(bitmask);
  *port |= bitmask;
  uint8_t cycles = 17;
  if (*pin & bitmask) {
    cycles =  0;
  }
  else if (*pin & bitmask) {
    cycles =  1;
  }
  else if (*pin & bitmask) {
    cycles =  2;
  }
  else if (*pin & bitmask) {
    cycles =  3;
  }
  else if (*pin & bitmask) {
    cycles =  4;
  }
  else if (*pin & bitmask) {
    cycles =  5;
  }
  else if (*pin & bitmask) {
    cycles =  6;
  }
  else if (*pin & bitmask) {
    cycles =  7;
  }
  else if (*pin & bitmask) {
    cycles =  8;
  }
  else if (*pin & bitmask) {
    cycles =  9;
  }
  else if (*pin & bitmask) {
    cycles = 10;
  }
  else if (*pin & bitmask) {
    cycles = 11;
  }
  else if (*pin & bitmask) {
    cycles = 12;
  }
  else if (*pin & bitmask) {
    cycles = 13;
  }
  else if (*pin & bitmask) {
    cycles = 14;
  }
  else if (*pin & bitmask) {
    cycles = 15;
  }
  else if (*pin & bitmask) {
    cycles = 16;
  }

  SREG = SREG_old;
  *port &= ~(bitmask);
  *ddr  |= bitmask;

  return cycles;
}

Flussdiagramm