Alles werkte bijna, ik had mijn controlepaneel gebouwd.
Drukknoppen, software debouncer, Neopixel leds, statemachine, DCC ontvanger, impulssturing, zelfs sound... alles bijna af. Gewoon nog een menutje om de servo's te kunnen ijken.
MAAR
het werkt prima als ik de MASTER (zie tekening eerder) direct aan de Eindnano hang.
het werkt ook prima als ik de laptop aan de USB poort van de replicator laat hangen (waarom, geen idee)
ECHTER
als het systeem zonder laptop autonoom werkt met de replictor ertussen, werkt het meestal. Maar niet altijd.
Ik heb gemerkt dat de replicator uitgaande data sturing het soms niet doet. Onvoorspelbaar soms. Meestal ok, maar soms ook niet (hatelijk he) en dan weer wel.
Ik heb een hoop trucjes van het internet geprobeerd, maar tot de conclusie gekomen dat de SoftSerial functie die ik gebruik in de replicator Nano's niet betrouwbaar is in unidirectioneel verkeer zonder checks.
Data 2x versturen helpt niet, baudrate naar 9600, delay(1) ertussen, zelfs met maar 1 Softserial instance dropt ie soms uitgaand verkeer.
Ik geef dit op ... dat gooien we het over een andere boeg.
Iets duurder en groter om in te bouwen, ik ga een MEGA gebruiken als replicator en eindpoint tegelijk. de MEGA heeft 4 echte seriële poorten en dus geen nood aan Softserial om data beperkt te repliceren.
Dan kan ik daisy chain setup maken, eigenlijk mijn oorspronkelijk idee.
Dus terug aan de slag, en dit is het resultaat.
Het concept is nu :
2022-12-16_09-39-21 by
Patrick Verret, on Flickr
in testopstelling ziet dat er zo uit :
2022-12-16_09-35-37 by
Patrick Verret, on Flickr
en het werkt ook :
De code van de NANO eindpunt is aangepast aan de MEGA, daarbij is de replicator functie toegevoegd en enkele condities opgelost die de zaak blokkeerden.
Wat ik dan heb zijn de NANO als zuivere eindpunten, en een keten van MEGA's die tegelijk het signaal kunnen repliceren en verdelen, en tegelijk als eindpunt kunnen dienen.
Uitsluitend door gebruik van de UART seriële poorten. Het blijft unidirectioneel en zonder checksum, maar dat lijkt niet direct nodig.
Het nadeel is de iets hogere prijs en afmetingen van de MEGA, het voordeel is dat ie veel meer poorten heeft en dus een flexibelere module is (tot 48 servo's dacht ik)
Wat doet dit nu?
1) luisteren naar DCC accessoire sturing op de baan en hierop reageren door indien het adres is toegekend aan een drukknop, de LED's aan te passen, interne statemachine aan te passen en ongeacht dat alles toch door te sturen naar de eindpunten.
2) input te krijgen van drukknoppen, en dit door te sturen.
3) NEOPIXEL leds aan te sturen die tonen welke state elke drukknop is
maar met enkele gadgets.
De drukknoppen zijn gelinkt aan een DCC adres (we gaan ervan uit een uniek adres)
Elke drukknop kan ook een impuls sturing zijn (aangepaste kleur LED), voor ontkoppelrails, korte bewegingen, ... lichtjes die uitgaan na een tijdje. de impulstijd is individueel instelbaar.
Via de serial(0) is er een Menu op de control unit om servo's te ijken, met andere woorden een MIN en MAX positie in te stellen (die kan omgedraaid zijn). Je kan dat dus met de laptop aan de control unit doen en moet niet onder de baan bij elke arduino gaan.
Er zit wat muziekjes op
Dit geeft betere bevestiging van de drukknoppen
Natuurlijk software de-bouncing van die drukknoppen
Elk eindpunt blijft minimaal hebben :
3 volledige seinbeelden , telkens 2 DCC adressen met instelbare knippervertraging (tegenspoor) per sein
3 digitale 1 pin outgangen, met instelbare knippervertraging per uitgang, telkens 1 DCC adress
3 servo's met individuele vertraging, reagerend op telkens 1 DCC adress (0 of 1)
Mijn plan naar de toekomst is nog eens soort 'AI' module te schrijven voor de centrale unit die dan seinbeelden gaat generen op basis van de stand van de statemachine.
Dit ga ik doortrekken naar de MEGA eindpunten zodat je door het sturen van 1 adres een keten van acties kan veeroorzaken, of vb een sub-programma opstarten voor een laspost simulatie met timers op een paar leds.
Op onze baanplan gaat dat wellicht zijn dat als de wissels in een bepaalde configuratie staan, de seinbeelden aangepast worden en de poort naar het industrieterrein open gaat.
Ik verwacht dat zo een module niet te moeilijk te schrijven is, gebaseerd op de variabelen (boolean) in SW die ik al heb die aangeven dat een bericht binnengekomen is.
MAAR eerst moet ik verder aan de baan werken en modules in elkaar steken vandaag. Programmeren is voor in de week 's avonds.