Hubtorsteuerung - LEDs werden nicht eingeschaltet?

Hallo Leute,
bin hier ein eigentlich ganz ganz einfaches Programm am schreiben, aber es funktioniert nicht.
Sicher nur ein einfacher blöder Fehler von mir im Programm, aber ich bin zu doof um Ihn zu finden. (seit 1,5h :roll_eyes: !)

Board: Arduino MEGA

Zu testzwecken will ich beide LED´s einschalten, egal ob Merker Tor auf oder Merker Tor zu gesetzt ist.
Die Zustände der beiden Merker werden auf dem LCD Display richtig angezeigt.
Das Schalten mit den Tastern funktioniert also.

Aber die beiden LED´s werden nur bei Tor zu eingeschaltet !?!?
(Bei "Merker Tor Auf" beide LED´s aus)


// Rev. 1   Taster 1 an LCD anzeigen
// Rev. 2   Taster 1 - 4 an LCD anzeigen
// Rev. 3   Ausgang "Merker Tor auf" für Kontroll LED Tasten 1&2 setzten
// Rev. 4   beide Merker schalten mit jeweils einer Kontroll LED 
// Rev. 5   mit Merker pin´s D50/D52 schalten für H-Brücken Treiber (In1 / In2)
//                                                                                       Board: Mega 2560 / Prozessor: ATmega 2560 / Port: com X / Programmer: AVRISP mkII
// Jb läuft ?? / 11.06.2023

  byte Merker_Tor_Auf = 0;                // Deklariert die Variable "Merker Tor Auf" als byte(0-255) mit Wert 0
  byte Merker_Tor_Zu  = 0;                // Deklariert die Variable "Merker Tor Zu " als byte(0-255) mit Wert 0
  
  #include <LiquidCrystal.h>              // library code für LCD einfügen
  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // Anschluß pins für LCD definieren - Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
  
void setup() 
  {
  lcd.begin(16, 2); lcd.clear(); // LCD Modul mit 16 Zeichen und 2 Zeilen definieren ; Anzeige löschen   
  
  pinMode(53, INPUT);            // pin 53 als Eingang definieren für Taster 1 (Taster  Hubtor auf)
  pinMode(51, INPUT);            // pin 51 als Eingang definieren für Taster 2 (Taster  Hubtor zu )
  pinMode(49, INPUT);            // pin 49 als Eingang definieren für Taster 3 (Endlage Hubtor auf)
  pinMode(47, INPUT);            // pin 47 als Eingang definieren für Taster 4 (Endlage Hubtor zu )
  
  pinMode(50, OUTPUT);           // pin 50 als Ausgang für H-Brücken Treiber definieren
  pinMode(52, OUTPUT);           // pin 52 als Ausgang für H-Brücken Treiber definieren
  }
  
void loop() 
{ 
  // LCD Anzeige
  lcd.setCursor(0,0);  // Cursor auf 1. Stelle 1. Zeile setzten
  
  if (digitalRead(53) == HIGH)     // wenn Taster 1 gedrückt,d.h pin53 = high, dann
  { lcd.print("Taste 1         "  ); } // LCD Anzeige "Taste 1" (mit Leerzeichen um bei "keine Taste" alle restlichen Buchstaben vollständig zu überschreiben)
  
  if (digitalRead(51) == HIGH) { lcd.print("Taste 2         "  ); }
  if (digitalRead(49) == HIGH) { lcd.print("Taste 3         "  ); }
  if (digitalRead(47) == HIGH) { lcd.print("Taste 4         "  ); }

  else {lcd.print("keine Taste"); }
  
  lcd.setCursor(0,1);  // Cursor auf 1. Stelle 2. Zeile setzten
  lcd.print("MTA = "); lcd.print(Merker_Tor_Auf); lcd.print("  MTZ = "); lcd.print(Merker_Tor_Zu); // Zustand beider Merker am LCD-Display Zeile 2 anzeigen
  
// Merker schalten
 
   if (digitalRead(53) == HIGH) {Merker_Tor_Auf = 1;} // Merker setzten wenn Hand Taster 1 Tor auf gedrückt
   if (digitalRead(49) == HIGH) {Merker_Tor_Auf = 0;} // Merker rücksetzten wenn Taster 3 Endlage Tor auf betätigt

   if (digitalRead(51) == HIGH) {Merker_Tor_Zu = 1;} // Merker setzten wenn Hand Taster 2 Tor zu gedrückt
   if (digitalRead(47) == HIGH) {Merker_Tor_Zu = 0;} // Merker rücksetzten wenn Taster 4 Endlage Tor zu betätig

// Ausgänge setzten

   if (Merker_Tor_Auf == 1)  { digitalWrite(50, HIGH); digitalWrite(52, HIGH);}
   if (Merker_Tor_Auf == 0)  { digitalWrite(50, LOW ); digitalWrite(52, LOW); }

   if (Merker_Tor_Zu == 1)   { digitalWrite(50, HIGH); digitalWrite(52, HIGH);}
   if (Merker_Tor_Zu == 0)   { digitalWrite(50, LOW ); digitalWrite(52, LOW);}

}

Wo liegt der Fehler?
Die Hardware schein ja ganz offensichtlich prinzipiell zu funktionieren, deshalb dieser Test.
(Beide LED´s an )
Könnt Ihr mir den Sonntag retten?

Gruß Wühlmaus

Hallo

Für ein klares Verständnis verpasse den Portpins einen beschreibenden Namen.

NEIN!
Die werden richtg geschaltet.
Du hast nur sehr langsame Augen.
Damit siehst Du die Einschaltphase nicht.

Denn wenn die LED EIN ist, wird in einem Bruchteil einer milisekunde genau diese LED wieder AUS.

Darum sind Merker da eine ganz schlechte Idee, wenn Du zwei davon ahst, die ein und die selbe Aktion ausführen sollen....

Ersetz mal den Teil durch folgenden Schnipsel:

  // Ausgänge setzten
  if (Merker_Tor_Auf == 1 || Merker_Tor_Zu == 1 )
  {
    digitalWrite(50, HIGH);
    digitalWrite(52, HIGH);
  }
  else
  {
    digitalWrite(50, LOW );
    digitalWrite(52, LOW);
  }

Ich bin zum Arduino zurück gekehrt..
(nach dem Frust hatte ich mir erst einmal eine andere Arbeit gesucht)

Ich habe Deinen Schnipsel eingebaut und er funktioniert perfekt , solange ich damit immer nur einen der beiden Merker abfrage (LED´s lassen sich beide setzten oder auch nur Eine)

Kopiere ich den Schnipsel um beide Merker abzufragen habe ich wieder das Problem.

Soll ich probieren nur einen Merker zu verwenden der 3 Zustände hat?
( 1 = Tor auffahre, 2 = Tor zufahren, 0 = Tor Stopp)

Ich möchte deshalb einen Merker verwende, da in der Endversion die Taste 1 "Tor Auf" absolute Priorität haben soll. Also wenn die Taste Tor zu gedrückt wird während das Tor auf dem Weg nach unten ist -> auf jeden Fall auf machen!!

Ich versteh Deine Aufgabe nicht.
ABER:

Warum mit einem Merker und nicht ganz einfach mit der Tasterabfrage.
Zuerst wird AUF abgefragt und wen aktiv, wird der Antrieb gesetzt.
Ist der Antrieb gesetzt, wird AB nicht mehr abgefragt.

Also erstmal Grundfunktion herstellen:

// Rev. 1   Taster 1 an LCD anzeigen
// Rev. 2   Taster 1 - 4 an LCD anzeigen
// Rev. 3   Ausgang "Merker Tor auf" für Kontroll LED Tasten 1&2 setzten
// Rev. 4   beide Merker schalten mit jeweils einer Kontroll LED
// Rev. 5   mit Merker pin´s D50/D52 schalten für H-Brücken Treiber (In1 / In2)
//                                                                                       Board: Mega 2560 / Prozessor: ATmega 2560 / Port: com X / Programmer: AVRISP mkII
// Jb läuft ?? / 11.06.2023

constexpr byte tasteAufPin {53};
constexpr byte tasteAbPin {51};
constexpr byte endSwitchOpen {49};
constexpr byte endSwitchClose {47};

constexpr byte openLedPin {50};
constexpr byte closeLedPin {52};
#include <LiquidCrystal.h>              // library code für LCD einfügen
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // Anschluß pins für LCD definieren - Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)

void setup()
{
  lcd.begin(16, 2);
  lcd.clear(); // LCD Modul mit 16 Zeichen und 2 Zeilen definieren ; Anzeige löschen
  pinMode(tasteAufPin, INPUT);            // pin 53 als Eingang definieren für Taster 1 (Taster  Hubtor auf)
  pinMode(tasteAbPin, INPUT);            // pin 51 als Eingang definieren für Taster 2 (Taster  Hubtor zu )
  pinMode(endSwitchOpen, INPUT);            // pin 49 als Eingang definieren für Taster 3 (Endlage Hubtor auf)
  pinMode(endSwitchClose, INPUT);            // pin 47 als Eingang definieren für Taster 4 (Endlage Hubtor zu )
  pinMode(openLedPin, OUTPUT);           // pin 50 als Ausgang für H-Brücken Treiber definieren
  pinMode(closeLedPin, OUTPUT);           // pin 52 als Ausgang für H-Brücken Treiber definieren
}

void loop()
{
  rolltor();
  anzeige();
}

void rolltor()
{
  if (digitalRead(tasteAufPin) == HIGH)
  {
    digitalWrite(openLedPin, HIGH);
    digitalWrite(closeLedPin, LOW);
  }
  else if (digitalRead(tasteAbPin) == HIGH)
  {
    digitalWrite(closeLedPin, HIGH);
    digitalWrite(openLedPin, LOW);
  }
  else
  {
    digitalWrite(openLedPin, LOW);
    digitalWrite(closeLedPin, LOW);
  }
}

void anzeige()
{
}

Also versuche ich die Aufgabe mal besser zu beschreiben:

Die Ausgänge pin 50 und pin 52 steuern später einmal
(aber jetzt erst einmal ein Test mit 2 LED´s )
die Eingänge In1 und In2 eines H-Brücken Treibers.
[Treiber Modul L298N]

Ein fischer-technik Motor mit Zahnstange bewegt das Hubtor.
Dort gibt es zwei Endlagenschalter (Tor auf / Tor zu)

Wenn Taster auf kurz gedrückt -> In1 = HIGH / In2 = Low , Motor fährt hoch bis Endlage oben erreicht.
Dann In1 und In2 vom H-Brücken Treiber LOW (Motor Stopp)

Wenn Taster zu kurz gedrückt -> In1 = LOW / In2 = HIGH, Motor fährt runter bis Endlage unten erreicht.
Dann In1 und In2 vom H-Brücken Treiber LOW (Motor Stopp)

´hoffe das ist verständlich..

Gruß und Danke für die Hilfe
Martin

Ja.
Das war es vorher schon.

Die Verriegelung ist später nur verändert, weil dann auf den PIN abgefragt wird.
Kann man auch gleich machen.

// Rev. 1   Taster 1 an LCD anzeigen
// Rev. 2   Taster 1 - 4 an LCD anzeigen
// Rev. 3   Ausgang "Merker Tor auf" für Kontroll LED Tasten 1&2 setzten
// Rev. 4   beide Merker schalten mit jeweils einer Kontroll LED
// Rev. 5   mit Merker pin´s D50/D52 schalten für H-Brücken Treiber (In1 / In2)
//                                                                                       Board: Mega 2560 / Prozessor: ATmega 2560 / Port: com X / Programmer: AVRISP mkII
// Jb läuft ?? / 11.06.2023

constexpr byte tasteAufPin {53};
constexpr byte tasteAbPin {51};
constexpr byte endSwitchOpen {49};
constexpr byte endSwitchClose {47};

constexpr byte openLedPin {50};
constexpr byte closeLedPin {52};
#include <LiquidCrystal.h>              // library code für LCD einfügen
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // Anschluß pins für LCD definieren - Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)

void setup()
{
  lcd.begin(16, 2);
  lcd.clear(); // LCD Modul mit 16 Zeichen und 2 Zeilen definieren ; Anzeige löschen
  pinMode(tasteAufPin, INPUT);            // pin 53 als Eingang definieren für Taster 1 (Taster  Hubtor auf)
  pinMode(tasteAbPin, INPUT);            // pin 51 als Eingang definieren für Taster 2 (Taster  Hubtor zu )
  pinMode(endSwitchOpen, INPUT);            // pin 49 als Eingang definieren für Taster 3 (Endlage Hubtor auf)
  pinMode(endSwitchClose, INPUT);            // pin 47 als Eingang definieren für Taster 4 (Endlage Hubtor zu )
  pinMode(openLedPin, OUTPUT);           // pin 50 als Ausgang für H-Brücken Treiber definieren
  pinMode(closeLedPin, OUTPUT);           // pin 52 als Ausgang für H-Brücken Treiber definieren
}

void loop()
{
  rolltor();
  anzeige();
}

void rolltor()
{
  if (digitalRead(tasteAufPin) == HIGH &&        // Taste oben ausgelöst UND
      digitalRead(endSwitchOpen) == LOW)         // Endschalter nicht ausgelöst
  {
    digitalWrite(openLedPin, HIGH);              //  Richtung festlegen
    digitalWrite(closeLedPin, LOW);              //
  }
  if (digitalRead(openLedPin) == LOW &&          // Wenn der nicht aufgeht.... &&
      digitalRead(tasteAbPin) == HIGH &&         // Taste unten ausgelöst UND
      digitalRead(endSwitchClose) == LOW)        // Endschalter nicht ausgelöst
  {
    digitalWrite(closeLedPin, HIGH);             // Andere Richtung
    digitalWrite(openLedPin, LOW);
  }
  if (digitalRead(openLedPin) == HIGH &&         // Fährt nach oben?
      digitalRead(endSwitchOpen) == HIGH)        // Und ist oben angekommne
  {
    digitalWrite(openLedPin, LOW);
  }
  if (digitalRead(closeLedPin) == HIGH &&        // Fährt nach unten?
      digitalRead(endSwitchClose) == HIGH)       // und ist unten angekommen?
  {
    digitalWrite(closeLedPin, LOW);
  }
}
//
void anzeige()
{
}

Hallo Leute!
Erst einmal vielen Dank für Eure Hilfe.
Jetzt komme ich ´mal endlich dazu, mich damit weiter zu beschäftigen.

Ich habe das Programm inzwischen komplett anders aufgebaut, d.h. als Schritte die nacheinander abgearbeitet werden anstatt der Merker. Und das funktioniert auf dem Arduino auch. Das Programm ist unten angehängt.

Inzwischen habe ich mir einen CONTROLLINO MINI (Arduino in „Industrie-Ausführung“) beschafft, damit das Ganze nicht ganz so gebastelt ist. Der Arbeitet mit UB 24VDC und hat potential freie Relais Ausgänge für das spätere Original.

Klar, der liegt der natürlich preislich völlig woanders (134,-€ zzgl. Versand und MwSt. bei Stahljunge.de) aber ich spare mir das ganze „Gebastel“ wie z.B. Treiber für die 24V Ausgänge, einen Spannungsregler 24V runter auf für den Arduino verträgliche VCCIN 9V, etc.

Jetzt werde ich das Programm mit der Arduino IDE erst einmal umschreiben (IDE einrichten etc. und hauptsächlich die Ein- und Ausgänge) und mir dann überlegen wie ich das mit meinem fischertechnik (ft)Test-Modell zusammen geschaltet bekomme. Die ft-Taster verkraften die 24V wohle problemlos, der ft Mini Motor natürlich nicht. Also einen drop down DC/DC-Wandler usw.

Zum Verständnis:

Beim ersten Versuch, der jetzt läuft, habe ich einen H-Brücken Treiber verwendet um den ft-Motor zu steuern. D.H. Ausgänge 50 & 52 ->Low/ Hight bzw. Low/High für Tor auf / zu (Motor rechts/links drehen). Ausgänge Low/Low für Motor Stopp wenn das Tor Auf oder Zu ist.(Siehe Programm unten)

Beim realen Modell ist das dann ein pneumatisches 24V DC 5/3 Wege Ventil.

Beim nächst geplanten Versuchsaufbau (Controllino + ft-Modell):

  • Ub 24V DC immer auf 6V reduzieren (DC/DC-step down Wandler)
  • Die 6V DC dann auf die Contollino Relais geben
  • Tor Auf : Die 6V auf den Motor
  • Tor Zu: : Die 6V auf ein Polwenderelais und den Motor geben.

Sollten bei den oben geschilderten Umbau- / Umprogrammierung- Maßnahmen Probleme auftreten würde ich mich hier wieder melden und hoffe auf Eure Unterstützung / Fachwissen auch wenn es sich um einen wenig bekannten Arduino „Ableger“ handelt.

Gruß Martin

// Rev. 33   Vorrang für Funktion Tor auffahren
//                                                                                      Board: Mega 2560 / Prozessor: ATmega 2560 / Port: com X / Programmer: AVRISP mkII
// Jb läuft !! / 16.07.2023 

  byte Schritt = 0;                // Deklariert die Variable Schritt als byte(0-255) mit Wert 0
  
  #include <LiquidCrystal.h>              // library code für LCD einfügen
  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    // Anschluß pins für LCD definieren - Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
  
void setup() 
  {
  lcd.begin(16, 2); lcd.clear(); // LCD Modul mit 16 Zeichen und 2 Zeilen definieren ; Anzeige löschen   
  
  pinMode(53, INPUT);            // pin 53 als Eingang definieren für Taster 1 (Taster  Hubtor auf)
  pinMode(51, INPUT);            // pin 51 als Eingang definieren für Taster 2 (Taster  Hubtor zu )
  pinMode(49, INPUT);            // pin 49 als Eingang definieren für Taster 3 (Endlage Hubtor auf)
  pinMode(47, INPUT);            // pin 47 als Eingang definieren für Taster 4 (Endlage Hubtor zu )
  
  pinMode(50, OUTPUT);           // pin 50 als Ausgang für H-Brücken Treiber definieren
  pinMode(52, OUTPUT);           // pin 52 als Ausgang für H-Brücken Treiber definieren
  }
  
void loop() 
{ 
  
// Taster auslesen
 
   if ( (digitalRead(53) == HIGH) && (Schritt == 0) )      // Taster Tor auf
   { Schritt = 1;}

   if ( (Schritt == 1) && (digitalRead(49) == HIGH) )      // Endlage oben erreicht, Tor Stop
  { Schritt = 2;}

   if ( (Schritt == 2) && (digitalRead(51) == HIGH) )      // Taster Tor zu 
  { Schritt = 3;}

   if ( (Schritt == 3) && (digitalRead(47) == HIGH) )       // Endlage unten -> Zurück zu Schrit 0 
  { Schritt = 0;}

  // Vorrang für Funktion Tor auffahren
  
   if ( (digitalRead(53) == HIGH) && (!(Schritt== 2)) )      // Taster Tor auf
   { Schritt = 1;}


// Ausgänge setzten

   if ( ( Schritt == 0 ) || ( Schritt == 2 ) )   // Tor Stop
   {digitalWrite(50, LOW); digitalWrite(52, LOW); }

   if ( Schritt == 1 )      // Tor auf fahren
   { digitalWrite(50, HIGH); digitalWrite(52, LOW); }

   if ( Schritt == 3 )      // Tor zu fahren
   { digitalWrite(50, LOW); digitalWrite(52, HIGH); } 


// LCD Anzeige
  lcd.setCursor(0,0);  // Cursor auf 1. Stelle 1. Zeile setzten
  
  if (digitalRead(53) == HIGH)     // wenn Taster 1 gedrückt,d.h pin53 = high, dann
  { lcd.print("Taste 1         "  ); } // LCD Anzeige "Taste 1" (mit Leerzeichen um bei "keine Taste" alle restlichen Buchstaben vollständig zu überschreiben)
  
  if (digitalRead(51) == HIGH) { lcd.print("Taste 2         "  ); }
  if (digitalRead(49) == HIGH) { lcd.print("Taste 3         "  ); }
  if (digitalRead(47) == HIGH) { lcd.print("Taste 4         "  ); }

  else {lcd.print("keine Taste"); }
  
  lcd.setCursor(0,1);  // Cursor auf 1. Stelle 2. Zeile setzten
  lcd.print("Schritt = "); lcd.print(Schritt);  // Schritt am LCD-Display Zeile 2 anzeigen

}
constexpr byte T1HubtorAuf = 53;

pinMode(T1HubtorAuf, INPUT);

Dann kannst dir die meisten Kommentare schon sparen :slight_smile:

Und „Magic Numbers“ sind schlecht lesbar

1 Like

Danke für die Hinweise progger.
Aber "Verschönerungs-Arbeiten" gehe ich erst an wenn das Ding
auf dem Controllino läuft.
Gruß Martin

Hallo Zusammen!

Das Programm läuft nachdem ich die IDE entsprechend eingestellt habe,
noch Fehler im Programm und in der Hardware (Verkabelung) beseitigt habe.
(Unglaublich. Ich hatte beim Aufbau doch jeden Schritt in der Verkabelung und Programmierung sorgfältig getestet :frowning: )

Wen es interessiert -> hängt unten dran. (Noch nicht aufgehübscht!)

Jetzt kämpfe ich seit Stunden mit einem anderen Problem, aber dafür mache ich ein neues Thema auf.

Gruß Martin

// Einstellungen IDE                                          Board: "CONTROLLINO MINI", Port X, Programmer: AVRISP mkll
// Rev.: Jb5 Vorrang für Tor auf - Versuche 02.09. ff. - läuft !!  -> Finale Version Tor1!

  #include <Controllino.h>  // Usage of CONTROLLINO library
  
  byte Schritt_T1 = 0;                // Deklariert die Variable Schritt als byte(0-255) mit Wert 0
  byte Schritt_T2 = 0; 

void setup() 
  {
    pinMode(CONTROLLINO_A0, INPUT);    // initialize the necessary pins as an input pin
    pinMode(CONTROLLINO_A1, INPUT);
    pinMode(CONTROLLINO_A2, INPUT);
    pinMode(CONTROLLINO_A3, INPUT); 

    pinMode(CONTROLLINO_A4, INPUT); 
    pinMode(CONTROLLINO_A5, INPUT); 
    pinMode(CONTROLLINO_IN0, INPUT);
    pinMode(CONTROLLINO_IN1, INPUT); 
     
    pinMode(CONTROLLINO_D0, OUTPUT);   // initialize the necessary pins as an output pin
    pinMode(CONTROLLINO_D1, OUTPUT);
    pinMode(CONTROLLINO_D2, OUTPUT);
    pinMode(CONTROLLINO_D3, OUTPUT);

    Serial.begin(9600);    // initialize serial communication at 9600 bits per second:

  }
  
void loop() 
{ 
  
// Taster Tor1 auslesen
 
   if ( (Schritt_T1 == 0) && (analogRead(CONTROLLINO_A0) > 500) )      // Taster Tor auf
   { Schritt_T1 = 1;}

   if ( (Schritt_T1 == 1) && (analogRead(CONTROLLINO_A1) > 500) )      // Endlage oben erreicht, Tor Stop
   { Schritt_T1 = 2;}

   if ( (Schritt_T1 == 2) && (analogRead(CONTROLLINO_A2) > 500) )      // Taster Tor zu 
   { Schritt_T1 = 3;}

   if ( (Schritt_T1 == 3) && (analogRead(CONTROLLINO_A3) > 500) )       // Endlage unten -> Zurück zu Schrit 0 
   { Schritt_T1 = 0;}

// Vorrang für Funktion Tor 1 auffahren

   if ( (analogRead(CONTROLLINO_A0) > 500)  && (!(Schritt_T1== 2)) )      // Taster Tor auf
   { Schritt_T1 = 1;}

// Ausgänge Tor1 setzten

  if (Schritt_T1 == 0 )               //  Tor Stop    (|| = Oder Funktion)
   {digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, LOW); }
      
   if ( Schritt_T1 == 1 )      // Tor auf fahren
   { digitalWrite(CONTROLLINO_D0, HIGH); digitalWrite(CONTROLLINO_D1, LOW); }

   if ( Schritt_T1 == 2 )               //  Tor Stop oben
   { digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, LOW); }

   if ( Schritt_T1 == 3 )      // Tor zu fahren
   { digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, HIGH); }

// Taster Tor2 auslesen
 
   if ( (Schritt_T2 == 0) && (analogRead(CONTROLLINO_A4) > 500) )      // Taster Tor2 auf
   { Schritt_T2 = 1;}

   if ( (Schritt_T1 == 1) && (analogRead(CONTROLLINO_A1) > 500) )      // Endlage oben erreicht, Tor Stop
   { Schritt_T1 = 2;}

   if ( (Schritt_T1 == 2) && (analogRead(CONTROLLINO_A2) > 500) )      // Taster Tor zu 
   { Schritt_T1 = 3;}

   if ( (Schritt_T1 == 3) && (analogRead(CONTROLLINO_A3) > 500) )       // Endlage unten -> Zurück zu Schrit 0 
   { Schritt_T1 = 0;}

// Vorrang für Funktion Tor 1 auffahren

   if ( (analogRead(CONTROLLINO_A0) > 500)  && (!(Schritt_T1== 2)) )      // Taster Tor auf
   { Schritt_T1 = 1;}

// Ausgänge Tor2 setzten

  if (Schritt_T1 == 0 )               //  Tor Stop    (|| = Oder Funktion)
   {digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, LOW); }
      
   if ( Schritt_T1 == 1 )      // Tor auf fahren
   { digitalWrite(CONTROLLINO_D0, HIGH); digitalWrite(CONTROLLINO_D1, LOW); }

   if ( Schritt_T1 == 2 )               //  Tor Stop oben
   { digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, LOW); }

   if ( Schritt_T1 == 3 )      // Tor zu fahren
   { digitalWrite(CONTROLLINO_D0, LOW); digitalWrite(CONTROLLINO_D1, HIGH); }


// Anzeige am Serial Monitor

Serial.print(" Schritt_T1 = "); Serial.print(Schritt_T1); 
Serial.print("              ");
Serial.print(" Schritt_T2 = "); Serial.println(Schritt_T2); 

}

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