00:00 - Vi panorerar från vänster till höger. Tre blocknoder med varsin signal. Signalerna ska stå där man entrar blocket från höger, och de försignallerar alltså blocket till vänster. De två vänstra signalerna är 5-ljus huvudsignaler och den högra är en huvuddvärg. Jag kunde använt tre likadana, men det var bara för att visa att jag kan koppla på vad jag vill på signalbussen. Längst till höger syns "debugnoden" med sin display (som fortfarande inte visar något vettigt). Den skickar debuginformationen på seriekanal till datorn. Tre vippomkopplare simulerar status på rälsen, alltså den ingången som kommer kopplas till strömavkänningen i framtiden.
00:15 - Handskakningsproceduren tar sin tid. Det stör mig inte så mycket, det är bättre att man kan hänga med i utdatat än att allt går jättefort. De tre lysdioderna är SYNC, SCL och SDA i I²C-bussen. SYNC är signalen jag använder för att hålla alla slavar i samma state under initieringen. Efter ett tag är alla noderna framme i state LOCAL som innebär att handskakningen är genomförd men ingen master har tagit kontrollen.
00:32 - Jag vet att bilderna är usla här, och det hjälper inte riktigt med inzoomningen. Alla signalerna visar dock rött (stopp).
00:40 - Från höger till vänster slår jag över omkopplarna från upptaget till ledigt, och signalerna visar först "kör vänta stopp" och när jag har slagit till blocket efter så byter de till "kör vänta kör"
00:50 - Jag simulerar ett tåg från höger till vänster genom att sätta upptaget på ett block i taget (alltså två block upptagna i mellanlägena).
Utdata från programmet (alla debugvärden bortklippta):
Kod: Markera allt
-------------------------------------------
Debug node version 0.1 initializing...
Block 24625 will use address 98
Block 33174 will use address 44
Block 4224 will use address 0
Block 4224 must not use address 0, complaint from 44
Block 4224 must not use address 0, complaint from 98
Block 4224 will use address 1
Block 4224 will use address 1
Block 24625 will use address 98
Block 33174 will use address 44
Block 33174 will use address 44
Block 24625 will use address 98
Block 4224 will use address 1
Block 24625 using address 98 has entered LOCAL state
Block 24625 (98) towards 4224(0) status: 1
Block 33174 using address 44 has entered LOCAL state
Block 33174 (44) towards 24625(98) status: 1
Block 4224 using address 1 has entered LOCAL state
Block 33174 (44) towards 24625(98) status: 0
Block 24625 (98) towards 33174(44) status: 0
Block 24625 (98) towards 4224(0) status: 0
Block 4224 (1) towards 24625(98) status: 0
Block 24625 (98) towards 33174(44) status: 0
Block 33174 (44) towards 24625(98) status: 1
Block 24625 (98) towards 4224(0) status: 0
Block 24625 (98) towards 33174(44) status: 1
Block 24625 (98) towards 4224(0) status: 1
Block 33174 (44) towards 24625(98) status: 0
Block 4224 (1) towards 24625(98) status: 1
Block 24625 (98) towards 33174(44) status: 0
Block 24625 (98) towards 4224(0) status: 0
Block 4224 (1) towards 24625(98) status: 0
Block 24625 (98) towards 33174(44) status: 0
* Jag använder två extra signaler i min I²C-buss, för att göra handskakningen mellan noderna (SYNC och ID). I en framtid kan man tänka sig att använda I²C-klockan istället för SYNC, men om man kan tänka sig att ha en extra pinne blir allt lättare. SYNC drar jag helt enkelt låg tills alla noderna garanterat är igång, därefter så börjar handskakningen när den sista noden släpper SYNC. Jag använder den därefter som en klocka för att kunna skicka ut/ta emot grannars 32-bits unika nummer genom ID-pinnen. ID är en signal som går mellan två noder i taget. Alltså om en nod har tre anslutningar för I²C-bussen så har alla en varsin ID-pinne, medan övriga signaler är samma.
* Jag har synkroniserat klockorna på alla noderna med hjälp av den efter initieringen överblivna SYNC-signalen. Främsta anledningen till att göra detta är att låta alla signaler blinka i takt. Någon har kommenterat att detta inte är förebildsenligt....det skiter jag högaktligen i. Det ser för jäkligt ut när var nod kör med sin egen klocka och de taktar och håller på.
* Signalbussen syns som tre anslutningar på varje nod. De motsvarar de tre ingångsriktningarna som är möjliga. Man kan koppla en signaler i serie. Hårdvaran tillåter ett obegränsat antal signaler, men det begränsas av en definition i koden, annars tar det obegränsat lång tid att initiera och det krävs obegränsat med minne...
Det som återstår för en rimlig funktionsnivå är att uppskatta vilken riktning ett tåg kör i, så att man kan reservera sträckan framför och därmed ge rött ljus i motriktningen. Jag vet inte om jag ska gå vidare med detta eller om jag ska sätta fart på ett annat projekt istället. Jag behöver nämligen en ljusväckarklocka. Om jag inte köper en så måste jag sätta igång snart för det börjar bli mörkt om mornarna.