Moin Mitreisende,
Danke für diesen sehr erleuchtenden Beitrag, hilft ungemein weiter.
LG Oliver
Moin Mitreisende,
Danke für diesen sehr erleuchtenden Beitrag, hilft ungemein weiter.
LG Oliver
Viele Grüsse von der Ostsee
Berlin Stadtbahn - altersgerecht [Die Planung] - http://stummiforum.de/viewtopic.php?f=24&t=140111
Berlin Stadtbahn - altersgerecht [Der Aufbau] - folgt noch
Beiträge: | 808 |
Registriert am: | 02.04.2012 |
Homepage: | Link |
Ort: | Stockelsdorf bei Lübeck |
Spurweite | H0 |
Stromart | Digital |
Hallo Thomas,
Zitat von ThKaS im Beitrag #42
// Ampelsteuerung
// Ampelsteuerung an einer einfachen Kreuzung mit Fussgängerampel, mit Tag/Nachtmodus, mit Wechselblinker
// Die Ampelphasen werden über eine Tabelle definiert
#include <MobaTools.h>
Hallo
Du kannst den Sketch in der Arduino IDE neu formatieren.
Dazu im Menü Werkzeuge -> Automatische Formatierung auswählen oder Strg+T drücken.
Viele Grüße,
Matthias
Beiträge: | 277 |
Registriert am: | 29.11.2020 |
Gleise | Märklin C-Gleis |
Spurweite | H0 |
Steuerung | MS2, MobaLedLib |
Stromart | Digital |
Hallo Matthias,
hast Du es ausprobiert ?
Bei mir funktioniert es nicht. Probiere mal nur folgende Zeile aus : #include <MobaTools.h>
Servus Wolfgang
Hallo
Die automatische Formatierung ändert das tatsächlich nicht, das hatte ich übersehen. Dabei werden nur alle Zeilen wieder passend eingerückt, da bei der Einrückung des Codes auch einiges geändert wurde durch das neue Forum.
Aber mit zwei, drei kleinen Anpassungen läuft das Programm wieder. Ich habe das Programm mal angepasst. Das einzige, was zu ändern war, waren die < bzw. > Zeichen.
Hier ist das Programm jetzt mit richtiger Formatierung:
// Ampelsteuerung
// Ampelsteuerung an einer einfachen Kreuzung mit Fussgängerampel, mit Tag/Nachtmodus, mit Wechselblinker
// Die Ampelphasen werden über eine Tabelle definiert
#include <MobaTools.h>
//vvvvvvvvvvvvvvvvvvvvvvvvv BEGIN WECHSELBLINKER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Definitionen für den Wechselblinker
// Festlegen der Anschlüsse (Pinnummer) für Ein- und Ausgänge
const byte linksPin = 6; // linke Lampe
const byte rechtsPin = 7; // rechte Lampe
const byte belegtPin = 8; // Eingang 'Zug kommt'
// Benötigte MobaTools Objekte:
EggTimer StoppUhr; // Zum Messen von Zeiten
EggTimer StoppUhr2; // Zum Messen von Zeit Nacht
SoftLed LampeLinks;
SoftLed LampeRechts;
SoftLed LampeAmpelGelbNeben;
// Zeiten für den Blinkrhythmus ( in ms )
const int STARTZEIT = 400;
const int BLINKZEIT = 500;
const int FADEZEIT = 450;
EggTimer EntPrellung; // Zur Tasterentporellung
const int PRELLZEIT = 100;
// Variable
boolean bueBelegt; // = TRUE, wenn sich ein Zug im Bereich des Bue befindet
byte wBlinkerZustand; // aktueller Zustand unseres Blinkerautomaten
//^^^^^^^^^^^^^^^^^^^^^^^^ ENDE WECHSELBLINKER ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//vvvvvvvvvvvvvvvvvvvvvvvvv BEGIN AmpelNacht vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Definitionen für Ampelnacht, blinken nur Nebenstrasse
// Festlegen der Anschlüsse (Pinnummer) für Ein- und Ausgänge
const byte belegtPin2 = 9; // Eingang "es ist Nacht"
// Zeiten für den Blinkrhythmus Nacht ( in ms )
const int STARTZEIT2 = 400;
const int BLINKZEIT2 = 1200;
const int FADEZEIT2 = 1200;
const byte NebenGelbPin = A4; // Nebenstrasse Ampel Gelb
// Variable
boolean bueBelegt2; // = TRUE, wenn D9 geschlossen, dann Nacht
byte wBlinkerZustand2; // aktueller Zustand unseres Blinkerautomaten Nacht
//^^^^^^^^^^^^^^^^^^^^^^^^ ENDE AmpelNacht ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//vvvvvvvvvvvvvvvvvvvvvvvv BEGIN AMPELSTEUERUNG vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Definition der Ausgangspins in Spalte 0 der Ampeltabelle
// Tabelle für die Ampelzustände ( Index 1 ... )
/*
const byte AmpelTabelle [][9] = {
// Ampelphase: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
// Tabellenindex: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8
{ A0 ,OFF ,OFF , ON , ON , ON , ON , ON , ON }, // hauptRot
{ A1 ,OFF , ON ,OFF ,OFF ,OFF ,OFF ,OFF , ON }, // hauptGelb
{ A2 , ON ,OFF ,OFF ,OFF ,OFF ,OFF ,OFF ,OFF }, // hauptGruen
{ A3 , ON , ON , ON , ON ,OFF ,OFF , ON , ON }, // nebenRot
{ A4 ,OFF ,OFF ,OFF , ON ,OFF , ON ,OFF ,OFF }, // nebenGelb
{ A5 ,OFF ,OFF ,OFF ,OFF , ON ,OFF ,OFF ,OFF }, // nebenGruen
{ 0 , 5 , 2 , 2 , 2 , 4 , 2 , 2 , 2 } // zeitDauer
};
*/
const byte AmpelTabelle [][12] = {
// Ampelphase: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
// Tabellenindex: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
{ A0 , OFF , OFF , OFF , ON , ON , ON , ON , ON , ON , ON , OFF}, // hauptRot
{ 3 , ON , ON , ON , ON , ON , OFF , ON , ON , ON , ON , OFF}, // hauptRotFRot
{ A1 , OFF , OFF, ON , OFF , OFF , OFF , OFF , OFF , OFF , ON , OFF}, // hauptGelb
{ A2 , ON , ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF}, // hauptGruen
{ 2 , OFF , OFF , OFF , OFF , OFF , ON , OFF , OFF , OFF , OFF , OFF}, // hauptGruenFGruen
{ A3 , ON , ON , ON , ON , ON , OFF , OFF , OFF , ON , ON , OFF}, // nebenRot
{ 5 , OFF , ON , ON , ON , ON , ON , ON , ON , ON , ON , OFF}, // nebenRotFRot
{ A4 , OFF , OFF , OFF , OFF , ON , OFF , OFF , ON , OFF , OFF , OFF}, // nebenGelb
{ A5 , OFF , OFF , OFF , OFF , OFF , ON , ON , OFF , OFF , OFF , OFF}, // nebenGruen
{ 4 , ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF}, // nebenGruenFGruen
{ 0 , 20 , 2 , 2 , 3 , 2 , 10 , 2 , 2 , 3 , 2 , 60} // zeitDauer
};
// Die folgenden beiden Zeilen berechnen aus der Tabelle ( Spalten+Zeilenanzahl ) die
// Zahl der Ampelphasen ( Spaltenzahl-1) , und die Zahl der Leds ( Zeilenzahl - 1 )
const byte PhasenAnzahl = sizeof(AmpelTabelle[0]) - 2;
const byte PhasenAnzahl2 = sizeof(AmpelTabelle[0]) - 1;
const byte LedAnzahl = sizeof(AmpelTabelle) / sizeof(AmpelTabelle[0]) - 1;
const byte zeitDauerIx = LedAnzahl; // Index für die Zeit ist direkt hinter den Leds
byte ampelPhase; // läuft von 1 .. PhasenAnzahl (Index 0 ist die Pinnr )
// Einrichten der notwendigen MoBaTools Objekte:
EggTimer AmpelTimer;
SoftLed AmpelLed[LedAnzahl];
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ENDE AMPELSTEUERUNG ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void setup() {
//vvvvvvvvvvvvvvvvvvvvvvvvv BEGIN WECHSELBLINKER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Initiierungen Wechselblinker
// Pins einrichten
pinMode( belegtPin, INPUT_PULLUP ); // Mit einem Schalter nach GND wird Blinker eingeschaltet
LampeLinks.attach( linksPin ); // Zuordnung der Softleds zu den Ausgangspins
LampeRechts.attach( rechtsPin );
LampeLinks.riseTime( FADEZEIT ); // Überblendzeit einstellen
LampeRechts.riseTime( FADEZEIT );
wBlinkerZustand = 1; // Startzustand des Blinkautomaten.
//^^^^^^^^^^^^^^^^^^^^^^^^ ENDE WECHSELBLINKER ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//vvvvvvvvvvvvvvvvvvvvvvvvv BEGIN Nacht vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Initiierungen Wechselblinker
// Pins einrichten
pinMode( belegtPin2, INPUT_PULLUP ); // Mit einem Schalter nach GND wird Blinker eingeschaltet
LampeAmpelGelbNeben.attach( NebenGelbPin ); // Zuordnung der Softleds zu den Ausgangspins
// LampeRechts.attach( rechtsPin );
LampeAmpelGelbNeben.riseTime( FADEZEIT ); // Überblendzeit einstellen
// LampeRechts.riseTime( FADEZEIT );
wBlinkerZustand2 = 1; // Startzustand des Blinkautomaten.
//^^^^^^^^^^^^^^^^^^^^^^^^ ENDE WECHSELBLINKER ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//vvvvvvvvvvvvvvvvvvvvvvvv BEGIN AMPELSTEUERUNG vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Softled Objekte initiieren
for ( byte ledIx = 0; ledIx < LedAnzahl; ledIx ++ ) {
AmpelLed[ledIx].attach( AmpelTabelle[ledIx][0] );
AmpelLed[ledIx].riseTime( 200 );
}
ampelPhase = 1; // Das System startet mit freier Fahrt auf der Hauptstraße
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ENDE AMPELSTEUERUNG ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//----------------------------------------------------------------------
}
void loop() {
//vvvvvvvvvvvvvvvvvvvvvvvvv BEGIN WECHSELBLINKER vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Wechselblinkerautomat
// Belegtzusatnd abfragen. Das machen wir hier jetzterstmal ganz einfach: Letztendlich
// schalten wir mit dem Eingang einfach den Wechselblinker ein und aus.
// Im realen Praxisfall könnte hier gegebenenfalls auch ein komplexere Logik stehen, um zu
// erkennen, ob ein Zug sich nähert oder den Bü wieder verlassen hat.
//if ( not EntPrellung.running() ) {
// EntPrellung.setTime( PRELLZEIT );
bueBelegt = not digitalRead( belegtPin ); // ein LOW-Level am Eingangspin schaltet den Blinker ein
//}
switch ( wBlinkerZustand ) {
// je nach Wert der Variable wBlinkerZustand, wird die entsprechende 'case' Zeile angesprungen
case 1: // Grundzustand, abfragen, ob sich ein Zug nähert ( z.B. über einen Belegtmelder )
if ( bueBelegt ) {
// Der Zug ist in den Belegtabschnitt vor der Schranke eingefahren
// beide Lampen einschalten
LampeLinks.on();
LampeRechts.on();
// Stoppuhr mit der Zeit die beide Lampen an sein sollen vorbelegen
StoppUhr.setTime( STARTZEIT ); // StoppUhr 'aufziehen'
// in den 2. Zustand wechseln
wBlinkerZustand = 2; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 2 ausgeführt
}
break; // Ende der Anweisungen für den 1. Zustand
//-------------------------------------------------------------------------
case 2: // beide Lampen ein, wir fragen ab, ob die Stoppuhr abgelaufen ist.
if ( not StoppUhr.running() ) {
// Die Stoppuhr läuft nicht mehr, die Zeit ist um
LampeRechts.off();
StoppUhr.setTime( BLINKZEIT ); // Stoppuhr 'aufziehen'
// in den 3. Zustand wechseln
wBlinkerZustand = 3; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 3 ausgeführt
}
break; // Ende der Anweisungen für den 2. Zustand
//-------------------------------------------------------------------------
case 3: // linke Lampen ist an, rechte aus: wir fragen ab, ob die Stoppuhr abgelaufen ist.
if ( not StoppUhr.running() ) {
// Die Stoppuhr läuft nicht mehr, die Zeit ist um, Lampen umschalten
LampeLinks.off();
// Im 3. Zustand müssen wir auch noch abfragen, ob der Zug den Belegtabschnitt verlassen hat
if ( not bueBelegt ) {
// Der Zug ist komplett über den Bü gefahren, die Straße ist wieder frei
// Beide Lampen sind aus!
// wieder in den 1. Zustand wechseln. Eine Zeitüberwachung wird nicht gebraucht
wBlinkerZustand = 1; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 1 ausgeführt
} else {
LampeRechts.on();
StoppUhr.setTime( BLINKZEIT ); // Stoppuhr 'aufziehen'
// wieder in den 4. Zustand wechseln
wBlinkerZustand = 4; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 3 ausgeführt
}
}
break; // Ende der Anweisungen für den 3. Zustand
//-------------------------------------------------------------------------
case 4: // linke Lampen ist aus, rechte an: wir fragen ab, ob die Stoppuhr abgelaufen ist.
if ( not StoppUhr.running() ) {
// Die Stoppuhr läuft nicht mehr, die Zeit ist um, Lampen umschalten
LampeRechts.off();
// Im 4. Zustand müssen wir auch noch abfragen, ob der Zug den Belegtabschnitt verlassen hat
if ( not bueBelegt ) {
// Der Zug ist komplett über den Bü gefahren, die Straße ist wieder frei
// Beide Lampen sind aus!
// wieder in den 1. Zustand wechseln. Eine Zeitüberwachung wird nicht gebraucht
wBlinkerZustand = 1; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 1 ausgeführt
} else {
LampeLinks.on();
StoppUhr.setTime( BLINKZEIT ); // Stoppuhr 'aufziehen'
// wieder in den 3. Zustand wechseln
wBlinkerZustand = 3; // Ab dem nächsten loop-Durchlauf werden nur die Anweisungen des case 3 ausgeführt
}
}
break; // Ende der Anweisungen für den 4. Zustand
} // Ende des switch-Blockes
//^^^^^^^^^^^^^^^^^^^^^^^^ ENDE WECHSELBLINKER ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//vvvvvvvvvvvvvvvvvvvvvvvv BEGIN AMPELSTEUERUNG Tag / Nacht vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//if ( not EntPrellung.running() ) {
// EntPrellung.setTime( PRELLZEIT );
bueBelegt2 = not digitalRead( belegtPin2 ); // ein LOW-Level am Eingangspin schaltet den Nachtmodus ein
switch ( wBlinkerZustand2 ) {
case 1: // NachtModus
if ( bueBelegt2 ) {
ampelPhase = 12; // In Array SPalte alles OFF setzen
for ( byte ledIx = 0; ledIx < LedAnzahl; ledIx ++ ) {
AmpelLed[ledIx].write( AmpelTabelle[ledIx][ampelPhase] ); // Ampel-LEDs ausschalten
}
if ( not StoppUhr2.running() ) {
LampeAmpelGelbNeben.on();
StoppUhr2.setTime( BLINKZEIT2 ); // Stoppuhr 'aufziehen' für GelbLicht Nebenstrasse
LampeAmpelGelbNeben.off();
wBlinkerZustand2 = 1;
}
}
else
wBlinkerZustand2 = 2;
break;
case 2: // TagModus
// Tabellengesteuerte Ampel
if ( not bueBelegt2 ) {
LampeAmpelGelbNeben.off();
if ( !AmpelTimer.running() ) {
// Zeit abgelaufen
// Ampeln schalten
for ( byte ledIx = 0; ledIx < LedAnzahl; ledIx ++ ) {
AmpelLed[ledIx].write( AmpelTabelle[ledIx][ampelPhase] );
}
// Zeit setzen ( da der Timer in ms rechnet, müssen die Tabellenwerte mit 1000
// multipliziert werden )
AmpelTimer.setTime( AmpelTabelle[zeitDauerIx][ampelPhase] * 1000 );
// Merker weiterrückem
if ( ampelPhase <= PhasenAnzahl ) {
// Tabellenende erreicht
ampelPhase = 1;
} else {
ampelPhase++;
}
wBlinkerZustand2 = 2;
}
wBlinkerZustand2 = 1;
}
break;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ENDE AMPELSTEUERUNG ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
}
Beiträge: | 277 |
Registriert am: | 29.11.2020 |
Gleise | Märklin C-Gleis |
Spurweite | H0 |
Steuerung | MS2, MobaLedLib |
Stromart | Digital |
Hallo,
das Problem liegt darin, dass bei der Übernahme ins neue Forum bei den Sketchen die Sonderzeichen in HTML-Entities umgewandelt wurden. Damit wurden die Sketche praktisch zerstört.
Ich habe aber eine Webseite gefunden, die das wieder rückgängig machen kann, also die HTML Entities wieder in das UTF8 Format zurückwandelt:
https://onlineutf8tools.com/convert-html-entities-to-utf8
Damit lassen sich die Sketche wieder ins korrekte Format zurückwandeln.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
vielen Dank für die Lösung. Es wäre echt schade gewesen, wenn die "alten" Sketche unbrauchbar sind.
Das online-tool funktioniert tadellos.
Nochmals vielen Dank und Servus
Hallo Arduinospezialisten,
ich versuche gerade den Sketch um eine 3. Ampel zu erweitern.
Bild entfernt (keine Rechte)
So, nun stehe ich auf dem berühmten Schlauch.
Wie kann ich Relais einbinden welche nur bei "Grün" umschalten ?
[code]
/*
* https://www.stummiforum.de/t163493f21-Arduino-Zeitsteuerungen-ohne-Delay-ein-kleines-Tutorial-1.html
* Beitrag: 27
*/
// Ampelsteuerung
// Ampelsteuerung an einer einspurigen Strasse mit Bushaltestelle
// Die Ampelphasen werden über eine Tabelle definiert
#include <MobaTools.h>
// Definition der Ausgangspins:
const byte hRotPin = A0; // Ampel an der Hauptstrasse, rechts
const byte hGelbPin = A1;
const byte hGruenPin = A2;
const byte nRotPin = A3; // Ampel an der Hauptstrasse, links
const byte nGelbPin = A4;
const byte nGruenPin = A5;
const byte BusRotPin = 2; // Ampel an der Bushaltestelle
const byte BusGelbPin = 3;
const byte BusGruenPin = 4;
// Tabelle für die Ampelzustände
// Ampelphase: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
// -------------------------------------------------------------------------------------------------------
// Tabellenindex: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
// -------------------------------------------------------------------------------------------------------
const byte zeitDauer [] = { 30 , 3 , 3 , 3 , 20 , 3 , 3 , 3 , 10 , 3 , 3 , 3 };
// -------------------------------------------------------------------------------------------------------
const bool hauptRot [] = { OFF , OFF , ON , ON , ON , ON , ON , ON , ON , ON , ON , ON };
const bool hauptGelb [] = { OFF , ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , ON };
const bool hauptGruen [] = { ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF };
const bool nebenRot [] = { ON , ON , ON , ON , OFF , OFF , ON , ON , ON , ON , ON , ON };
const bool nebenGelb [] = { OFF , OFF , OFF , ON , OFF , ON , OFF , OFF , OFF , OFF , OFF , OFF };
const bool nebenGruen [] = { OFF , OFF , OFF , OFF , ON , OFF , OFF , OFF , OFF , OFF , OFF , OFF };
const bool BusRot [] = { ON , ON , ON , ON , ON , ON , ON , ON , OFF , OFF , ON , ON };
const bool BusGelb [] = { OFF , OFF , OFF , OFF , OFF , OFF , OFF , ON , OFF , ON , OFF , OFF };
const bool BusGruen [] = { OFF , OFF , OFF , OFF , OFF , OFF , OFF , OFF , ON , OFF , OFF , OFF };
const byte tabMax = sizeof(zeitDauer)-1; // Tabellenindex startet bei 0 ( deshalb die -1 für den höchsten Index )
byte ampelTabIx; // läuft von 0 .. 7
// Einrichten der notwendigen MoBaTools Objekte:
MoToTimer AmpelTimer;
MoToSoftLed hRot;
MoToSoftLed hGelb;
MoToSoftLed hGruen;
MoToSoftLed nRot;
MoToSoftLed nGelb;
MoToSoftLed nGruen;
MoToSoftLed nBusRot;
MoToSoftLed nBusGelb;
MoToSoftLed nBusGruen;
void setup() {
// Softled Objekte initiieren
hRot.attach( hRotPin );
hRot.riseTime( 200 );
hGelb.attach( hGelbPin );
hGelb.riseTime( 200 );
hGruen.attach( hGruenPin );
hGruen.riseTime( 200 );
// --------------------------------------------------------------------------
nRot.attach( nRotPin );
nRot.riseTime( 200 );
nGelb.attach( nGelbPin );
nGelb.riseTime( 200 );
nGruen.attach( nGruenPin );
nGruen.riseTime( 200 );
// --------------------------------------------------------------------------
nBusRot.attach( BusRotPin );
nBusRot.riseTime( 200 );
nBusGelb.attach( BusGelbPin );
nBusGelb.riseTime( 200 );
nBusGruen.attach( BusGruenPin );
nBusGruen.riseTime( 200 );
// --------------------------------------------------------------------------
ampelTabIx = 2; // Das System startet mit " alle Ampeln = ROT "
}
void loop() {
// Tabellengesteuerte Ampel
if( !AmpelTimer.running() ) {
// Zeit abgelaufen
// Ampel schalten
hRot.write( hauptRot[ampelTabIx] );
hGelb.write( hauptGelb[ampelTabIx] );
hGruen.write( hauptGruen[ampelTabIx] );
nRot.write( nebenRot[ampelTabIx] );
nGelb.write( nebenGelb[ampelTabIx] );
nGruen.write( nebenGruen[ampelTabIx] );
nBusRot.write( BusRot[ampelTabIx] );
nBusGelb.write( BusGelb[ampelTabIx] );
nBusGruen.write( BusGruen[ampelTabIx] );
// Zeit setzen ( da der Timer in ms rechnet, müssen die Tabellenwerte mit 1000 multipliziert werden )
AmpelTimer.setTime( zeitDauer[ampelTabIx] * 1000 );
// Merker weiterrückem
if( ampelTabIx >= tabMax ) {
// Tabellenende erreicht
ampelTabIx = 0;
} else {
ampelTabIx++;
}
}
}
[/code]
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
ich wollte die Relaisfunktion in die "array-Tabelle" aufnehmen und mit ON / OFF schalten.
Der Sketch funktioniert mit den Ampeln einwandfrei.
Zitat von e69-fan im Beitrag #60
ich wollte die Relaisfunktion in die "array-Tabelle" aufnehmen und mit ON / OFF schalten.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Einfach ein eigenes Forum erstellen |