- LiFePO4 Speicher Test         
Ergebnis 11 bis 20 von 23

Thema: Modellbahnübergang mit schranken

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    30.10.2016
    Beiträge
    14
    Hallo Ceos,
    ja soweit habe ich das auch verstanden. Da ich etwas mehr als nur eine H0 H0e Anlage habe...bei der Selfkantbahn angefangen und immer noch dabei und zum guten Schluß auch noch bei der DB aushelfe im Museum Koblenz!
    Die Schrankenanlage die ich als Bausatz mir gekauft habe Auhagen Halbschranken.
    Eine einfache Funktion einen dünnen Draht am Servoarm befestigen das andere Ende wird durch die kleine Öse am Schrankenbau gefädelt und fertig ist das ganze.
    Auch Faller Bausätze haben solche Ösen am Schranckenbaum wo man einen Draht zum ansteuern einfädeln kann.
    Das Wippen der Schrankenbäume an den Endlagen kann man ohne weiteres durch programmieren hin bekommen, nur bei einer Halbschrankenanlage ist das meiner Meinung nach zuviel des guten

    - - - Aktualisiert - - -

    Hallo und nun der Sketch:


    #include <Servo.h> // Variablen-Deklaration und Definition

    // das ist für die Servoantriebe und muss überall wo es um die Schranke geht mit hinter die laufzahl geschrieben werden!
    int Kreuz1 = 13; // BITTE NICHT IN KREUZ1 UMSCHREIBEN das geht NICHT!!!!
    int Kreuz2 = 12;
    int Kreuz3 = 11;
    int Kreuz4 = 8;
    int Kreuz5 = 5;
    int Reed1 = 6;
    int Reed2 = 7;

    int buttonState = 0;

    int Schranke1 = 9;
    int Schranke2 = 10;

    unsigned int TimerSchrankeZu = 0;

    Servo Schranke1a; // das a hinter der Zahl ist wichtig und darf nicht vergessen werden!
    Servo Schranke2a;

    unsigned long aktMillis, vorMillis; // aktuelle Millisekunden und vorherige

    byte b = 0;


    boolean KreuzAnAus = LOW; // boolean Kreuz1-x an low werden über internenwiederstand angeschlossen auch ein relais an kreuz3 wird zum läutwerk geschaltet
    boolean Kreuz2AnAus = LOW;
    boolean Kreuz3AnAus = LOW;
    boolean Kreuz4AnAus = LOW;
    boolean Kreuz5AnAus = LOW; // hier wird das alte spulenläutwerk über ein relais mit optokoppler angesteuert!!!
    boolean blink100ms = LOW;
    boolean blink500ms = LOW;
    boolean blink1000ms = LOW;

    //boolean Schranke1u2SollZu = LOW;

    // Funktionsdeklaration
    void Funktion100ms();




    void setup() // put your setup code here, to run once:
    {

    aktMillis = vorMillis = 0;

    pinMode(Kreuz1, OUTPUT);
    pinMode(Kreuz2, OUTPUT);
    pinMode(Kreuz3, OUTPUT);
    pinMode(Kreuz4, OUTPUT);
    pinMode(Kreuz5, OUTPUT);
    pinMode(Reed1, INPUT);
    pinMode(Reed2, INPUT);
    digitalWrite(Reed1, HIGH);
    digitalWrite(Reed2, HIGH);
    Schranke1a.attach(Schranke1);
    Schranke2a.attach(Schranke2);
    Schranke1a.write(10);
    Schranke2a.write(7);


    }




    void loop() // put your main code here, to run repeatedly:
    {

    aktMillis = millis();

    if( aktMillis < vorMillis ) // Wird Bei Variablenüberlauf zurücgesetzt
    aktMillis = vorMillis = 0;



    if( aktMillis - vorMillis >= 100)
    {
    Funktion100ms();
    }

    buttonState = digitalRead(Reed1);

    if(buttonState == LOW)
    { // Schranken ZU
    KreuzAnAus = HIGH;
    TimerSchrankeZu = 30; // Timer auf Wunschzeit setzen auf 3 Sekunden

    }
    else
    {
    buttonState = digitalRead(Reed2);


    if(buttonState == LOW)
    { // Schranken AUF
    KreuzAnAus = LOW;
    Schranke1a.write(10);
    Schranke2a.write(7);
    TimerSchrankeZu = 0; // Timer Reset nicht zwingend erforderlich
    }
    }


    digitalWrite(Kreuz1, KreuzAnAus && blink500ms);
    digitalWrite(Kreuz2, KreuzAnAus && !blink500ms); // ausrufezeichen kehr die funktion um!!!
    digitalWrite(Kreuz3, KreuzAnAus && blink500ms);
    digitalWrite(Kreuz4, KreuzAnAus && !blink500ms);
    digitalWrite(Kreuz5, KreuzAnAus && !blink500ms); //ist der anschlußpin für das läutwerk-relais!!
    }

    // Die Funktion 100ms wird alle 100 ms aufgerufen
    void Funktion100ms()
    {
    b++;

    if(b == 0)
    b = 1;

    blink100ms = !blink100ms;

    if((b % 5) == 0 )
    blink500ms ^= 1;

    if((b % 10) == 0 )
    blink1000ms ^= 1;


    if(TimerSchrankeZu > 0) // Ist Timer/Zähler > 0 ?
    {//ja
    TimerSchrankeZu--;

    if((TimerSchrankeZu == 0) && KreuzAnAus)
    {
    Schranke1a.write(100);
    Schranke2a.write(95);
    }


    }

    vorMillis = aktMillis;
    }
    Geändert von alterraucher (14.02.2017 um 06:50 Uhr)

Ähnliche Themen

  1. ACHTUNG!!! FEHLER BEI SIMPLEN IR-SCHRANKEN AUFGEDECKT!!!
    Von bexter im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 16.05.2005, 18:04

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress