Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Gebruikersavatar

Hans
Berichten: 1585
Lid geworden op: 03 dec 2010 16:06
Locatie: Zoetermeer

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Hans »

Hallo Rico,

Ik heb vroeger inderdaad geprogrammeerd, maar dat is meer dan 40 jaar geleden. En alleen als hobby.
Op mijn eerste computer moest ik vrijwel alles zelf programmeren in Basic of in Forth. Dat werd dan weggeschreven naar een cassetterecordertje. Later heb ik mij nog kort verdiept in Pascal.
Je begrijpt dat het inmiddels is weggezakt.
Nog niet zolang geleden heb ik nog even wat gepionierd met Windows Powershell, maar dat is toch wel heel iets anders.

Als ik het niet meer kan volgen laat ik het wel weten.

m.vr.gr.

Hans


XPS, Fleischmann Piccolo, AnyRail, iTrain
Mijn baan op dit forum: XPS-baan
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Momfer »

Nou ja, het is je in elk geval niet helemaal vreemd, Hans. Dat helpt al enorm.

Groet, Rico


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

EXRAIL: PCA9685, SERVO's, testen van een servo

Bericht door Momfer »

En daar zijn we weer. We gaan met kleine stapjes verder, proberen of we ook wat met wissels kunnen aanvangen i.c.m. EXRAIL. Ik wil dat doen aan de hand van mijn testopstelling, zoals die hieronder op de foto staat. De wifi laat ik even buiten beschouwing en is ook niet nodig voor wat we hier gaan doen.

Afbeelding

De foto laat duidelijk de onderdelen zien en ik heb geprobeerd de onderdelen aan te duiden: Arduino Mega met daarop een sensorshield en daarop het motorshield van Deek Robot. De Arduino is aangesloten op een 9V DC voeding en de USB verbinding. Via de I2C-bus (4 draadjes) is een PCA9685 uitbreidingsbordje aangesloten, waarop de 2 servo's zijn aangesloten. De servo's zitten op de 2 eerste aansluitingen en daarmee standaard op vpin 100 en 101.( Standaard zijn er 2 PCA9685 bordjes geconfigureerd in DCC-EX, bordje 1 = 100-115 en bordje 2 is dan 116-131)

Hieronder zie je zo'n bordje wat groter:

Afbeelding

Of je het bordje links of rechts aansluit maakt niet uit. GND, VCC, SCL en SDA zijn samen de I2C-bus en voeding. V+ is de voeding voor de servo's een mag NIET aangesloten worden op de Arduino, omdat de spanningsregelaar van de Arduino de belasting van de servo's niet aankan. De de bordjes moeten via het groene blokje extern gevoed worden met 6V gelijkspanning (DC). Bordjes kunnen onderling wel de voeding doorverbinden via de V+ aansluiting. De voeding moet de belasting van het totaal aangesloten aantal servo's ruim aankunnen !!

Gebruik je meerdere bordjes, dan moet het adres aangepast worden middels de daarvoor aanwezige soldeerpads. Ik ga dat hier niet uitleggen, internet is je vriend :)

Testen van de opstelling.
DCC EX heeft een handige mogelijkheid om de werking te testen in de Serial Monitor van de IDE:

Code: Selecteer alles

<D SERVO vPIN XXX
* D = Diagnose opdracht
* SERVO = we gaan een servotest doen met servo op vPIN
* vPIN = bijvoorbeeld 100
* XXX = waarde tussen 104 en 490 (buiten deze range kan bij een SG90 schade opleveren!!!)
Een volledige test kan dan zijn:

Code: Selecteer alles

<D SERVO 100 490>
<D SERVO 100 104>
[EDIT]
De servo testopdracht kan ook een zgn profiel meekrijgen. In de testvariant krijgen we dan bijvoorbeeld:

Code: Selecteer alles

<D SERVO 100 490 0> // 0 (onmiddellijk/immidiate)
<D SERVO 100 104 1> // 1 (snel/fast=0.5 sec)
<D SERVO 100 490 2> // 2 (gemiddeld/medium=1 sec)
<D SERVO 100 104 3> // 3 (traag/slow=2 sec) 
<D SERVO 100 490 4> // 4 (stuiteren/bounce, bv voor semafoor seinen of overwegbomen)
Als dit allemaal werkt, gaan we in de volgende post verder met de mogelijkheden in EXRAIL.
Laatst gewijzigd door Momfer op 11 feb 2022 17:18, 2 keer totaal gewijzigd.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

EXRAIL: Servo instellen en automatiseren

Bericht door Momfer »

Nu je de servo('s) getest hebt via de serial monitor van de Arduino IDE, kunnen we aan de slag. EXRAIL heeft voor wissels een aantal opdrachten beschikbaar en voor SERVO-wissels is dat de volgende:

Code: Selecteer alles

SERVO_TURNOUT(id, vPIN, activeAngle, inactiveAngle, profile)
Als we dat omzetten naar onze beide voorbeeld servo's dan kan dat er als volgt uitzien:

Code: Selecteer alles

SERVO_TURNOUT(100, 100, 104, 490, Instant) // ID, vPIN, Pos1, Pos2, Beweging
SERVO_TURNOUT(101, 101, 104, 490, Slow)
Om verwarring te voorkomen houd ikzelf de id en de vPIN altijd gelijk, maar dit hoeft natuurlijk niet! De waarden voor de posities hangen in de praktijk natuurlijk af van de toepassing en de slag die gemaakt moet worden en kan voor het in dienst nemen dus met <D SERVO vPIN xxx> getest worden, waarna de definitie kan worden vastgelegd.

Het EXRAIL script kan er dan als volgt uit komen te zien:

Code: Selecteer alles

EXRAIL
  // WISSELS DEFINIËREN 
  SERVO_TURNOUT(100, 100, 104, 490, Medium) 
  SERVO_TURNOUT(101, 101, 104, 490, Slow)
DONE // einde EXRAIL setup

//    100       101
//       ╔══════╗
//   ════╩══════╩════

ROUTE(1, "RECHTUIT") // Lijst met opdrachten met ID=1 en herkenbare naam.
  CLOSE(100) // zet SERVO wissel met ID=100 rechtuit
  CLOSE(101) // zet SERVO wissel met ID=101 rechtuit
DONE // einde van ROUTE(1)

ROUTE(2, "INHAALSPOOR") // Lijst met opdrachten met ID=2 en herkenbare naam.
  THROW(101) // zet SERVO wissel met ID=101 afbuigend
  THROW(100) // zet SERVO wissel met ID=100 afbuigend
DONE // einde van ROUTE(2)

AUTOMATION(10, "sneltrein")
  CALL(1)  // sneltrein gaat over doorgaand spoor
  FWD(100) // vooruit met snelheid 100
  ...etc.
DONE

AUTOMATION(11, "goederentrein")
  CALL(2)  // goederentrein gaat over inhaalspoor
  FWD(30) // vooruit met snelheid 30
  ...etc.
DONE

ENDEXRAIL
Vanuit de Serial Monitor kun je na het uploaden met </ START 218, 10> de lok (cq trein met lok) met decoder adres 218 naar Automation 10 sturen. Deze zal middels de CALL opdracht de wissels in de goed positie zetten, waarna de lok vooruit vertrekt met snelheid 100.

Zo, dit is ongeveer de basis van het gebruik van SERVO wisselbesturing. De volgende post gaan we bezig met de PIN_TURNOUT.
Laatst gewijzigd door Momfer op 11 feb 2022 17:20, 2 keer totaal gewijzigd.


Gebruikersavatar

Hans
Berichten: 1585
Lid geworden op: 03 dec 2010 16:06
Locatie: Zoetermeer

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Hans »

Hallo Rico,

Er komt heel wat bij kijken. Niet alleen qua programmeerwerk, maar ook v.w.b. het correct aansluiten van de hardware.
Veel bewondering de moeite die je doet om het duidelijk uit te leggen.

m.vr.gr.

Hans


XPS, Fleischmann Piccolo, AnyRail, iTrain
Mijn baan op dit forum: XPS-baan
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Momfer »

Dankjewel, Hans.

Hopelijk blijft het aantrekkelijk en begrijpelijk genoeg voor de geïnteresseerden.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL

MadSeven
Berichten: 520
Lid geworden op: 29 nov 2010 19:00

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door MadSeven »

fantastisch onderwerp en de moeite om in 1 document (ooit) aan te bieden!
1 vermoedelijk detail tikvoutje gespot;

AUTOMATION(10, "sneltrein")
CALL(1) // sneltrein gaat over doorgaand spoor
FWD(100) // vooruit met snelheid 100
...etc.
DONE

AUTOMATION(11, "goederentrein")
CALL(2) // goederentrein gaat over inhaalspoor
FWD(30) // vooruit met snelheid 100 <--- 30


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Momfer »

Dankjewel voor het compliment, Max!

Fijn dat je de tikfout hebt gespot, ik heb het gelijk aangepast.

Groet,
Rico


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

EXRAIL: PIN_Turnouts (1)

Bericht door Momfer »

En weer verder, dit keer met de EXRAIL opdracht "PIN_TURNOUTS".

Deze opdracht is te gebruiken voor de standaard wisselaandrijvingen van bv Fleischmann, Minitrix, Roco en Kato. De opdracht kent wel zo zijn beperkingen, maar misschien ligt dat wel meer aan de diversiteit van de verschillende spoelaandrijvingen. Uiteraard zijn daar weer oplossingen voor.

De testopstelling

Afbeelding

We gebruiken weer dezelfde opbouw voor de DCC++EX CS, namelijk een Arduino Mega, daarop (voor het gemak tijdens het testen) een sensorshield en daar weer bovenop het L298 motorshield. Verder zien we weer het WIFI-bordje (laat ik buiten beschouwing) en een zgn Breadboard, waarop we testschakelingen kunnen opbouwen.

De testschakeling is niks meer dan een weerstandje van 1,2kOhm (1200 Ohm) in serie met een LED (lichtgevende diode). De Arduino pinnen 44/45 worden aangesloten op de weerstand, de weerstand gaat naar de Anode (plus-zijde) van de LED, de Kathode (min-zijde) gaat naar de min (GND) van de Arduino. Een standaard ledje (met draadjes/pootjes) heeft altijd een lange en een korte zijde. Met het ezelsbruggetje KNAP weet je altijd welke poot de Kathode (Kathode Negatief) en welke poot de Anode (Anode Postief).

Als we dit aangesloten hebben, kunnen we de schakeling gaan testen. De LED zal gaan branden als er een 1 op een pin komt te staan.

De aansluiting van de wisselaandrijvingen zelf zal ik hier niet laten zien, daarvoor zijn er teveel verschillende soorten: met 2 (KATO) of 3 aansluitingen (Fleischmann/Minitrix/Atlas) die ook nog eens verschillende werkspanningen hebben, wel of geen eindafschakeling, enzovoorts. Een ding moet erg duidelijk zijn:

!!! SLUIT NOOIT EEN WISSELAANDRIJVING RECHTSTREEKS AAN OP EEN ARDUINO !!!

Er is altijd een soort versterker nodig in de vorm van een transistorschakeling, een mosfet-schakeling, een schakeling met een ULN2003 (of geleikwaardig) of gebruik een relais!

Ikzelf gebruik zowel de ULN2003 schakeling alswel een mosfet bordje zoals hieronder te zien is (rode bordje rechts)

Afbeelding

Testen van de opstelling

Vanuit de Seriële Monitor van de IDE kunnen we testen of de schakeling werkt. We definieren daarvoor eerst de Pins als Output:

Code: Selecteer alles

<Z 44 44 0> // Link ID 44 met Pin 44 en bij opstarten van de centrale is de uitgang LAAG (led is uit)
<Z 45 45 1> // Link ID 45 met Pin 45 en bij opstarten van de centrale is de uitgang HOOG (led is aan)
Voor het testen heb ik de uitgangen anders gedefinieerd, in de praktijk kies je voor een van de twee, welke het beste bij de gekozen versterkerschakeling icm de wissels past.

Testen gaat nu als volgt:

Code: Selecteer alles

<Z 44 1>  // (throw 44) led gaat aan
<Z 44 0> // (close 44) led gaat uit
<Z 45 1> // (throw 45) led gaat uit
<Z 45 0> // (close 45) led gaat aan
Als het goed is gegaan, reageerde PIN44 omgekeerd op de opdrachten als PIN45

We moeten de definities er weer uithalen, want in EXRAIL hebben we die niet nodig. Voer daarom na deze test de volgende opdrachten uit, zodat de pinnen weer worden vrijgegeven om de testen met EXRAIL later goed te kunnen uitvoeren zonder bagage van deze testen:

Code: Selecteer alles

<Z 44> // verwijder output 44
<Z 45> // verwijder output 45
De centrale bevestigd met <O> als het goed is gegaan. Met <Z> kun je controleren welke outputs er zijn. je krijgt een <X> als er geen outputs zijn vastgelegd.

Maar euh :o ....probleempje
Zoals je ziet gaat een ledje aan (of uit) en houdt dan de status vast. Dat is bij de meeste wisselaandrijvingen een probleem omdat ze een puls nodig hebben in plaats van een vaste aan-status of een uit-status. Daar zijn uiteraard oplossingen voor (te bedenken)

Dit was het voor deze post. De volgende post ga ik verder de scripts en de oplossingen voor het ontbreken van de pulsen. Ook zal ik nog aandacht geven aan het realiseren van extra pinnen via de I2C-bus met een PCF8574 en/of een MCP23017.

Vragen, opmerkingen en suggesties zijn altijd welkom.
Laatst gewijzigd door Momfer op 11 feb 2022 17:21, 1 keer totaal gewijzigd.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Gebruikersavatar

Hans
Berichten: 1585
Lid geworden op: 03 dec 2010 16:06
Locatie: Zoetermeer

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Hans »

Hallo Rico

Bedankt wederom.

Op je schema zag ik het woord Fritzing staan.
Ik was die term geloof ik al eens eerder in een draadje op het forum tegengekomen.
Ik heb net op Youtube een tutorial daarover bekeken. Dat ziet er heel gaaf en handig uit.
In een heel ver verleden heb ik wel eens met elektronische schakelingen gestoeid. Dat was voor mijn allereerste modelbaan. De werking van transistoren, condensatoren en zo is mij niet helemaal vreemd. Maar voor zover ik weet bestond Fritzing in die tijd nog niet. En Arduino al helemaal niet.

m.vr.gr.

Hans


XPS, Fleischmann Piccolo, AnyRail, iTrain
Mijn baan op dit forum: XPS-baan
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex)

Bericht door Momfer »

Hoi Hans,

Graag gedaan.

Ik heb het al wel aangeschaft, maar ik heb nog niet veel ervaring met Fritzing. Zo kan ik langzaaam weer een beetje terug in de elektronicawereld, waar ik zo'n 25 jaar geleden uit ben gestapt. Best wel leuk eigenlijk. Heel anders dan het complexe Ultiboard waar ik op de MTS ooit eens mee mocht spelen.

Groet,
Rico


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Momfer »

Nog even een kleine aanvulling op de testopstelling met het breadboard i.c.m. de ledjes hierboven:

Een veel makkelijker methode om dit te testen is het gebruik maken van het ULN2003 stappenmotor stuurbordje. Hieronder staat hoe je die aansluit MET de wisselspoelen, maar als je die weglaat, kun je met de ledjes A t/m D zien wanneer een pin hoog of laag wordt.

Afbeelding

Ik hoop binnenkort weer even wat aandacht te besteden aan dit draadje over EXRAIL.



Peter64
Berichten: 15
Lid geworden op: 27 mar 2022 20:38

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Peter64 »

Zoals ik al in m'n voorstel-topic had gemeld, een erg duidelijk een fijn draadje dit, zeer leerzaam. Vandaag heb ik de eerste poging gedaan iets met EXRAIL voor elkaar te krijgen. Omdat ik pas 1 loc en 1 stuk flexrail heb heb ik alleen het locje wat heen en weer laten rijden, en wat geexperimenteerd met tijden en snelheden. Maar het was een leerzaam uurtje.

Iets wat me opviel, m'n nieuwe digitale locje remt netjes langzaam af als je het "STOP" commando in je script zet. Als dat echter het laatste commando in het script is, dan staat ie gelijk stil (en dat zullen passagiers niet fijn vinden). Wil je 'm ook na de laatste "STOP" netjes laten afremmen, dan moet je na dat stop commando ook nog even een DELAY toevoegen.

Verder heb ik ook geprobeerd iets met geluid te doen (ik heb niet voor niks een soundloc), maar dat is niet gelukt. Je kunt daarvoor de FON en FOFF commando's gebruiken, maar ik ben er nog niet achter welke getallen je daar dan moet invullen. De handleiding van m'n locje zegt dat er bij F17 een fluitje klinkt. Als ik in "WebThrottle-EX" op F17 druk hoor ik inderdaad een fluitje, geinig. Ik zie dan in de log dat het commando "f 3 222 16" gestuurd wordt. Met "FON(17)" in EXRAIL gebeurt er echter niets. Ook bij FON(222) gebeurt er niets. Verder staat er de handleiding van de loc bij het fluitje "CV-Mapping 326" en "CV-Volume 346", maar ook "FON(326)" geeft geen geluid.

Heeft iemand enig idee hoe ik er achter kom welk getal er bij FON en FOFF gebruikt moet worden voor bepaalde geluidseffecten.


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Momfer »

Ook met het stop commando i.c.m. de CV instellingen voor afremmen heb ik nog geen ervaring. Voor het kerstbaantje heb ik die instelling uitgezet, omdat ik anders niet nauwkeurig genoeg de stopposities kon bepalen. De stopmarge in het schaduwstation was daarvoor te klein.

Fon/Foff: Hier kan ik geen antwoord aandragen, ik heb zelf geen locs met geluid.

Ik hoop dat iemand anders je hiermee kan helpen.

Momenteel is mijn baantje slecht bereikbaar in de hobbykamer, dus kan ik het stopgedrag ook niet even testen.

Niettemin leuk om te lezen dat je, ondanks de beperkte middelen, lekker aan de gang bent met DCC-EX en EX-RAIL.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL

Peter64
Berichten: 15
Lid geworden op: 27 mar 2022 20:38

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Peter64 »

De beperkte middelen zijn een bewuste keuze, ik wil het echt stapje voor stapje aanpakken, en tot nu toe werkt dat best. Naast nog wat meer experimentjes met EXRAIL probeer ik wat aan baantjes te tekenen. Gezien het feit dat ik het simpel wil houden is dat op zich niet zo moeilijk, maar als je een simpel stationnetje probeert te leggen met slanke wissels (peco 55), dan loopt het al gauw qua lengte uit de hand. Dan vanuit het station een ovaaltje afmaken, en je hebt al gauw een plaat van 1 meter 80 of zo nodig, als je op dat stationnetje een trein met 3 Silberlinge achter m'n BR 160 kwijt wilt kunnen. Maar goed, we gaan er wel uit komen op de een of andere manier, ofwel accepteren dat ik veel ruimte nodig heb, ofwel overstappen op rails (minitrix?), waar ook wissels met een kleiner radius bestaan.

Maar terug naar het topic, EXRAIL. Het lukt me na wat verder experimenteren wel enigszins om wat geluid eruit te krijgen, maar merkwaardig genoeg niet als de trein nog stil staat, voor vertrek. Hieronder een sketch, met wat commentaar

Code: Selecteer alles

SETLOCO(3)   // Selecteer de locomotief met adres "3", standaard, en de enige loc die ik momenteel heb.
FON(0)       // Licht aan, in de rijrichting
FON(10)      // Toeter, werkt hier niet, het blijft stil
DELAY(1000)
FOFF(10)     // Toeter uit, aangezien er helemaal niet getoeterd wordt is dit redelijk zinloos
DELAY(2000)
FWD(50)      // Vooruit rijden , snelheid 50
DELAY (7000) // 7 seconden wachten
FON(10)      // Toeter, vreemd genoeg werkt dat hier wel, 
DELAY(1000)  // Toeter blijft aan gedurende 1 seconde
FOFF(10)     // Toeter weer uit, en dat gebeurt ook netjes
DELAY(2000)  // Nog 2 seconden doorrijden
STOP
FOFF(0)      // Licht weer uit
Morgen, als ik de tijd kan vinden, nog iets verder mee spelen, kijken of ik er achter kan komen waarom die toeter (en andere geluiden) het de ene keer wel en de andere keer niet doet.


Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Momfer »

Even een check: je staat met het testen van FON/FOFF wel op MAIN Track (of JOIN uitgevoerd)?

en ik vond op discord dit onderstaande nog:
Interesting F key command finding which you may or may not be aware of.

I'm working on some automation ideas with a diesel MTH decoder engine #6511 which requires the F3 key StartUp/Shutdown engine to be triggered first before any of the other engine sounds like horn or bell will work,
<F 6511 3 1> turns on Startup
as does <f 6511 132>

but <F 6511 3 0> does Not Shut down or turn off the Engine sound .

a <F 6511 3 > Null on|off must be sent first, then
<F 6511 3 1> turns off, or Shuts down engine sounds.

Just a FYI for you to know about some peculiar MTH decoder F functions if someone plans on using them in automation

Similarly using original 'f' function
<f 6511 132> turns on Engine Startup
<f 6511 128> Null state
<f 6511 132> turns Off or Shuts down engine motor sounds.

KCS


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC++Ex, Arduino DCC centrale)

Bericht door Momfer »

Peter64 schreef: 01 apr 2022 17:52 Iets wat me opviel, m'n nieuwe digitale locje remt netjes langzaam af als je het "STOP" commando in je script zet. Als dat echter het laatste commando in het script is, dan staat ie gelijk stil (en dat zullen passagiers niet fijn vinden). Wil je 'm ook na de laatste "STOP" netjes laten afremmen, dan moet je na dat stop commando ook nog even een DELAY toevoegen.
De bedenker en programmeur van EXRAIL komt met de volgende reactie:
if you follow STOP with DONE , the DONE will send the estop to prevent the loco running on after the automation finishes
en
You can avoid the estop in DONE by SETLOCO(0)
Dus dan komt het neer (in pseudo-code) op:

Code: Selecteer alles

AUTOMATION(XYZ, "blah")
   doe iets
   doe nog iets
   STOP
   SETLOCO(0) // koppel het lok-adres los van deze routine
 DONE


Gebruikersavatar

Hans
Berichten: 1585
Lid geworden op: 03 dec 2010 16:06
Locatie: Zoetermeer

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door Hans »

Hallo Rico,

Leuk dat er weer leven in dit draadje zit.
Ik doe er nog niets mee, maar ik vind het heel leerzaam, en wie weet komt het er nog eens van.

m.vr.gr.

Hans


XPS, Fleischmann Piccolo, AnyRail, iTrain
Mijn baan op dit forum: XPS-baan
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door Momfer »

Hallo Hans,

Ik weet niet hoe het gaat lopen, maar ik zal proberen zo nu en dan wat snippets te plaatsen.

Dankjewel voor je terugkoppeling :)



jw82
Berichten: 360
Lid geworden op: 11 mei 2021 09:03

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door jw82 »

Inderdaad leuk dat weer even voorbij komt! Op de achtergrond ben ik er ook nog steeds mee bezig...en hoop binnenkort mijn baan daadwerkelijk op de EX-commandstation aan te sluiten, voor de treintjes, maar ook zeker voor de aansturing van seinen en verlichting in de scenery (zoals de vuurplaats op de skatebaan).

Ik had een mooi stukje code geschreven om een knipperend seinbeeld te maken en een Nederlands lichtsein via een throttle te bedienen (dus handmatig omdat ik verder nog niet automatisch ga rijden), maar afgelopen week heb ik ontdekt dat in de eerstvolgende release van EXRAIL (en nu al in de laatste devel branch) een nieuwe BLINK() functie wordt geïntroduceerd die hiervoor gebruikt kan worden.

Het was leerzaam om zelf te maken, maar nu ga ik dus binnenkort deze nieuwe functie maar eens proberen te gebruiken in mijn EXRAIL code...scheelt wat regels code naar verwachting. 8-)


Hartelijke groet,
Jan-Willem

Nederlandse baan in ontwikkeling: Kokkerdam
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door Momfer »

Ik zou het leuk vinden als je je huidige script hier wilt delen. En het wordt nog leuker als we de versie met BLINK() daarna kunnen zien.

Op die manier kunnen we een hoop kennis delen en van elkaar leren. Niet iedereen durft de stap naar Discord te maken tenslotte....

Overigens kun je via de installer de huidige development versie gewoon op je Arduino zetten en ermee experimenteren. Ze zitten vlak voor een grote release, dus de code is al erg stabiel.


Groet,
Rico (momfer)

Centrale: DCC-Ex | Arduino Mega + Motor shield
Besturing: EXRAIL | Traintastic | RocRail | Engine Driver | DecoderPro
Rails: Minitrix / Fleischmann Piccolo
En hier vind je de bouw van mijn kerstbaan en Starten met EXRAIL

jw82
Berichten: 360
Lid geworden op: 11 mei 2021 09:03

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door jw82 »

Ik zou het leuk vinden als je je huidige script hier wilt delen. En het wordt nog leuker als we de versie met BLINK() daarna kunnen zien.
De huidige versie kan ik wel vast delen - het gaat om een template waar je zelf nog waarden kunt invoeren. Het gaat dus om een 3-lichtsein, die ik in een vaste volgorde kan schakelen: rood > geel-knipper > geel > groen-knipper > groen. Bediening is dan ook handmatig, via de throttle op een telefoon (Engine Driver).

Natuurlijk kan je ook voor ieder seinbeeld een knop in de throttle laten verschijnen, dan zit je niet aan de vaste volgorde vast. Maar mijn 'eis' hier was één knop per sein, anders is het een veelvoud van het aantal seinen x seinbeelden aan knoppen. Dat is niet haalbaar meer in deze vorm van bediening. Daarom deze opzet, waarbij iedere 'druk op de knop' een volgend seinbeeld activeert.

Later wil ik ook nog wel kijken om wel meer te 'automatiseren', bijvoorbeeld dat opeenvolgende seinen met elkaar schakelen. Bv. een sein gaat naar
rood, dan gaat het sein daarvoor naar oranje etc. Maar voor nu dus eerst één knop per sein (en zoveel heb ik er niet voorzien op mijn bescheiden layout 8-) ).

Code: Selecteer alles

// template_Lichtsein.h
//
// Template voor het configureren en (handmatig) bedienen van lichtseinen.
// De template biedt ondersteuning voor:
// * Drielichtseinen
// * Seinbeelden (in vaste volgorde): rood, geel-knipper, geel, groen-knipper, groen
//
// Bij gebruik alle <placeholders> vervangen door werkelijke waarden:
// * SEIN_<ID>
// * <PIN>'s
// * <vPIN>'s
//
// (c) jw82 || 2024

//*********************************************************//
//********seinnaam/-nummmer: <seinnaam/-nummer>    ********//
//********locatie: <locatie>                       ********//
//*********************************************************//

//**************************//
//** Initiatie lichtsein  **//
//**************************//
ALIAS(SEIN_<ID>_ROOD, <PIN>)
ALIAS(SEIN_<ID>_GEEL, <PIN>)
ALIAS(SEIN_<ID>_GROEN, <PIN>)
ALIAS(SEIN_<ID>_GEEL_KNIPPER, <vPIN>) // LET OP: virtuele PIN (gebruikt als toggle)
ALIAS(SEIN_<ID>_GROEN_KNIPPER, <vPIN>) // LET OP: virtuele PIN (gebruikt als toggle)

SIGNAL(SEIN_<ID>_ROOD,SEIN_<ID>_GEEL,SEIN_<ID>_GROEN) //SIGNAL() voor seinen met gedeelde plus

AUTOSTART
	//bij opstarten test van alle seinlampen
	//sein in startpositie 'rood' zetten
	GREEN(SEIN_<ID>_ROOD)
	DELAY(1000)
	AMBER(SEIN_<ID>_ROOD)
	DELAY(1000)
	RED(SEIN_<ID>_ROOD)
	//alle toggles in juiste startpositie zetten
	UNLATCH(SEIN_<ID>_GROEN)
	UNLATCH(SEIN_<ID>_GEEL)
	UNLATCH(SEIN_<ID>_GEEL_KNIPPER)
	UNLATCH(SEIN_<ID>_GROEN_KNIPPER)
	LATCH(SEIN_<ID>_ROOD)
DONE

//**************************//
//***Functies (sequences)***//
//**************************//
ALIAS(GEEL_KNIPPEREN_SEIN_<ID>)
ALIAS(GROEN_KNIPPEREN_SEIN_<ID>)

SEQUENCE(GEEL_KNIPPEREN_SEIN_<ID>)
//Functie waarmee het gele seinbeeld 75x per minuut knippert.
//Betekenis: voorbijrijden toegestaan met een zodanige snelheid, die niet hoger is dan 40 km/h, om op elke plaats achter dit sein te kunnen stoppen,
// waar een belemmering voor het verder rijden aanwezig is.
IF(SEIN_<ID>_GEEL_KNIPPER) //check op toggle (via de IF()) is nodig omdat het een 'follow' is die anders doorgaat, ook als functie wordt uitgezet.
		SET(SEIN_<ID>_GEEL)
		DELAY(400)
		RESET(SEIN_<ID>_GEEL)
		DELAY(400)
	ENDIF
FOLLOW(GEEL_KNIPPEREN_SEIN_<ID>)

SEQUENCE(GROEN_KNIPPEREN_SEIN_<ID>)
//Functie waarmee het groene seinbeeld 75x per minuut knippert.
//Betekenis: voorbijrijden toegestaan met een snelheid van ten hoogste 40 km/h.
IF(SEIN_<ID>_GROEN_KNIPPER) //check op toggle (via de IF()) is nodig omdat het een 'follow' is die anders doorgaat, ook als functie wordt uitgezet.
   	SET(SEIN_<ID>_GROEN)
		DELAY(400)
		RESET(SEIN_<ID>_GROEN)
		DELAY(400)
	ENDIF
FOLLOW(GROEN_KNIPPEREN_SEIN_<ID>)

//**************************//
//** Route (voor throttle)**//
//**************************//
ALIAS(SEIN_<ID>)

//Schakelen van individueel sein in vaste volgorde: rood > geel-knipper > geel > groen-knipper > groen
//Voor een sein met minder seinbeelden (zoals dwergsein zonder groen-knipper) kunnen stappen eruitgehaald worden
ROUTE(SEIN_<ID>, "<seinnaam/-nummer voor throttle>")
	//als seinbeeld ROOD is: seinbeeld GEEL-KNIPPER tonen
	IF(SEIN_<ID>_ROOD)
		START(GEEL_KNIPPEREN_SEIN_<ID>)
		LATCH(SEIN_<ID>_GEEL_KNIPPER)
		RESET(SEIN_<ID>_ROOD)
		UNLATCH(SEIN_<ID>_ROOD)
	ELSE
		//als seinbeeld GEEL-KNIPPER is: seinbeeld GEEL tonen
		IF(SEIN_<ID>_GEEL_KNIPPER)
			UNLATCH(SEIN_<ID>_GEEL_KNIPPER)
			DELAY(500) //vertraging om stoppen van knipperfunctie op te vangen, voordat GEEL gezet wordt
			AMBER(SEIN_<ID>_ROOD)
			LATCH(SEIN_<ID>_GEEL)
		ELSE //dan is seinbeeld GEEL, GROEN-KNIPPER of GROEN
			//als seinbeeld GEEL is: seinbeeld GROEN-KNIPPER tonen
			IF(SEIN_<ID>_GEEL)
					START(GROEN_KNIPPEREN_SEIN_<ID>)
					LATCH(SEIN_<ID>_GROEN_KNIPPER)
					RESET(SEIN_<ID>_GEEL)
					UNLATCH(SEIN_<ID>_GEEL)
			ELSE //dan is seinbeeld GROEN-KNIPPER of GROEN
				//als seinbeeld GROEN-KNIPPER is: seinbeeld GROEN tonen
				IF(SEIN_<ID>_GROEN_KNIPPER)
					UNLATCH(SEIN_<ID>_GROEN_KNIPPER)
					DELAY(500)  //vertraging om stoppen van knipperfunctie op te vangen, voordat GROEN gezet wordt
					GREEN(SEIN_<ID>_ROOD)
					LATCH(SEIN_<ID>_GROEN)
				ELSE //dan is sein GROEN: seinbeeld ROOD (weer) tonen
					RED(SEIN_<ID>_ROOD)
					LATCH(SEIN_<ID>_ROOD)
					UNLATCH(SEIN_<ID>_GROEN)
				ENDIF
			ENDIF
		ENDIF
	ENDIF
DONE
Overigens kun je via de installer de huidige development versie gewoon op je Arduino zetten en ermee experimenteren. Ze zitten vlak voor een grote release, dus de code is al erg stabiel.
Dat staat zeker op het actielijstje!


Hartelijke groet,
Jan-Willem

Nederlandse baan in ontwikkeling: Kokkerdam
Gebruikersavatar

Onderwerp starter
Momfer
Berichten: 567
Lid geworden op: 29 okt 2020 13:13
Locatie: Zwolle

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door Momfer »

Da's een mooi stukje huisvlijt, Jan-Willem!

Groet,
Rico



jw82
Berichten: 360
Lid geworden op: 11 mei 2021 09:03

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door jw82 »

Momfer schreef: 02 mei 2024 15:34 Da's een mooi stukje huisvlijt, Jan-Willem!
Bedankt Rico! _o_


Hartelijke groet,
Jan-Willem

Nederlandse baan in ontwikkeling: Kokkerdam

jw82
Berichten: 360
Lid geworden op: 11 mei 2021 09:03

Re: Starten met EXRAIL (onderdeel van DCC-EX, Arduino DCC en DC centrale)

Bericht door jw82 »

Momfer schreef: 02 mei 2024 12:23 En het wordt nog leuker als we de versie met BLINK() daarna kunnen zien.
Er is wat tijd overheen gegaan (cq. prioriteit ;-)), maar ondertussen heb ik het script hierboven voor de bediening van een 3-lichtsein 'in vaste volgorde' aangepast door de nieuwe BLINK() functie van EXRAIL te gebruiken. En dat scheelt heel wat regels code en maakt het geheel dus een stuk overzichtelijker en hopelijk leesbaarder! Maar netto doet het nog steeds exact hetzelfde. 8-)

Andere optimalisatie is het gebruik van de al bestaande IFRED() e.a. functies, waardoor ik de LATCH() functie op de rode, gele en groene pin ook nog weg kon laten.

Dit keer de code niet in template-vorm, maar gewoon even zoals gebruikt voor mijn testboardje. En het is een bestandje dat ik include in de myAutomation.h file, dus dat is wel een voorwaarde om te doen. Daarnaast gebruikt het dus de laatste (stabiele) develop versie, en werkt niet met de huidige officiële release. Maar dat is via de EX-Installer gewoon prima te gebruiken en geeft voor mij geen issues (maar ik gebruik ook nog weinig functionaliteit natuurlijk).

Code: Selecteer alles

// myTestboardSein.h || Kokkerdam
//
// (c) jwtrein || 2024

//*********************************************************//
//********seinnaam/-nummmer: Sein (testboard)/STEST   *****//
//********locatie: testboard                       ********//
//*********************************************************//

//**************************//
//** Initiatie lichtsein  **//
//**************************//
ALIAS(SEIN_STEST_ROOD, 101)
ALIAS(SEIN_STEST_GEEL, 102)
ALIAS(SEIN_STEST_GROEN, 103)
ALIAS(SEIN_STEST_GEEL_KNIPPER, 254) // LET OP: virtuele PIN (gebruikt als toggle)
ALIAS(SEIN_STEST_GROEN_KNIPPER, 253) // LET OP: virtuele PIN (gebruikt als toggle)

SIGNALH(SEIN_STEST_ROOD,SEIN_STEST_GEEL,SEIN_STEST_GROEN) //SIGNALH() voor seinen met gedeelde min

AUTOSTART
	//bij opstarten test van alle seinlampen
	//sein in startpositie 'oranje' zetten
	GREEN(SEIN_STEST_ROOD)
	DELAY(1000)
	AMBER(SEIN_STEST_ROOD)
	DELAY(1000)
	RED(SEIN_STEST_ROOD)
	DELAY(1000)
	AMBER(SEIN_STEST_ROOD)
	//alle toggles in juiste startpositie zetten
	UNLATCH(SEIN_STEST_GEEL_KNIPPER)
	UNLATCH(SEIN_STEST_GROEN_KNIPPER)
DONE

//**************************//
//** Route (voor throttle)**//
//**************************//
ALIAS(SEIN_STEST)

//Schakelen van individueel sein in vaste volgorde: rood > geel-knipper > geel > groen-knipper > groen
//Voor een sein met minder seinbeelden (zoals dwergsein zonder groen-knipper) kunnen stappen eruitgehaald worden

// Geel knipperend seinbeeld: 75x per minuut.
// Betekenis: voorbijrijden toegestaan met een zodanige snelheid, die niet hoger is dan 40 km/h, om op elke plaats achter 
// dit sein te kunnen stoppen, waar een belemmering voor het verder rijden aanwezig is.

// Groen knipperend seinbeeld: 75x per minuut.
// Betekenis: voorbijrijden toegestaan met een snelheid van ten hoogste 40 km/h.

ROUTE(SEIN_STEST, "Sein (testboard)")
	//als seinbeeld ROOD is: seinbeeld GEEL-KNIPPER tonen
	IFRED(SEIN_STEST_ROOD)
		AMBER(SEIN_STEST_ROOD) BLINK(SEIN_STEST_GEEL,400,400)
		LATCH(SEIN_STEST_GEEL_KNIPPER)
	ELSE
		//als seinbeeld GEEL-KNIPPER is: seinbeeld GEEL tonen
		IF(SEIN_STEST_GEEL_KNIPPER)
			UNLATCH(SEIN_STEST_GEEL_KNIPPER)
			AMBER(SEIN_STEST_ROOD)
		ELSE //dan is seinbeeld GEEL, GROEN-KNIPPER of GROEN
			//als seinbeeld GEEL is: seinbeeld GROEN-KNIPPER tonen
			IFAMBER(SEIN_STEST_ROOD)
				GREEN(SEIN_STEST_ROOD) BLINK(SEIN_STEST_GROEN,400,400)
				LATCH(SEIN_STEST_GROEN_KNIPPER)
			ELSE //dan is seinbeeld GROEN-KNIPPER of GROEN
				//als seinbeeld GROEN-KNIPPER is: seinbeeld GROEN tonen
				IF(SEIN_STEST_GROEN_KNIPPER)
					UNLATCH(SEIN_STEST_GROEN_KNIPPER)
					GREEN(SEIN_STEST_ROOD)
				ELSE //dan is sein GROEN: seinbeeld ROOD (weer) tonen
					RED(SEIN_STEST_ROOD)
				ENDIF
			ENDIF
		ENDIF
	ENDIF
DONE


Hartelijke groet,
Jan-Willem

Nederlandse baan in ontwikkeling: Kokkerdam
Plaats reactie