Kleuren LCD schermpje?
Dat kan ook al sinds de laatste firmware update, 1.09. Dan moet je de shiftknop ingedrukt houden als je aan de richtingsknop draait.
current address = 9999 old address = 9998current address = 9998 old address = 9999point 0 toggledpoint 0 toggledpoint 0 toggledpoint 0 toggledpoint 9999 toggledpoint 9999 toggledpoint 9999 toggledspeed = 1speed = 2speed = 3speed = 4
1). Een van de functionaliteiten die ik wil inbakken, is de mogelijkheid om een pendeldienst in te leren. Het idee is dat de handregelaar kan opnemen wat je aan het doen bent. Hij onthoudt dan alle instructies van trein en wissel aansturingen en het belangrijkste via de centrale krijgt hij dan informatie opgestuurd over de bezetmeldingen. Dat zijn sensors die in het spoor zijn verwerkt die je kan gebruiken om de posities van treinen terug te sturen naar de handregelaar. Dit wordt meestal gedaan in combinatie met een computer programma, maar voor menig modelspoorder is zo'n programma overkill.Buiten deze pendeldienst om, kan een gebruiker de handregelaar verder gebruiken om andere delen van zijn/haar layout aan te sturen.2). Een andere feature die ik wil inbakken zijn het automatiseren van functies van treinen. Tegenwoordig worden treinen met geluidsmodules verkocht die meer dan 20 geluidsfuncties hebben. Ik kan je uit ervaring vertellen dat geen mens ze alle 20 gebruikt. Mijn handregelaar wil ik kunnen inleren dat hij functies voor jou kan aansturen bij bepaalde scenario's. Denk hierbij aan wegrijden, optrekken, stoppen etc. Je kan de regelaar dan bijvoorbeeld aanleren om een trein te laten toeteren bij het wegrijden. Treinen hebben vaak behalve motorgeluiden ook stationsgeluiden. Dus je kan een trein ook stationsgeluiden laten afspelen op een bepaalde tijd nadat hij gestopt is. Het is ook mogelijk om iets te doen wanneer er een bezetmelder gemeld wordt.3). Een bekend probleem met modeltreinen is dat ze fabrieksaf vaak veels te hard kunnen rijden. Nu kan je dit handmatig oplossen door simpelweg niet de regelaar op 100% te zetten. Je kan ook de snelheids CV (configureerbare parameter) van de treindecoders programmeren om de maximum snelheid in te dammen. Ik had bedacht om op een testtraject met twee bezetmelders een calibratie test te doen. Het idee is dat de maximum snelheids CV naar ca 20% wordt geprogrammeerd. De regelaar zal dan de trein tussen de twee bezetmelders heen en weer sturen en telkens de maxium snelheid CV ophogen totdat een vooraf ingestelde schaalsnelheid behaald. Je kan dan in de handregelaar invoeren wat de gewenste snelheid is en hoever de twee bezetmelders uit elkaar zijn (en ook welke bezetmelders gebruikt worden).Het is ook niet zozeer een must-have voor mensen, maar als je de infrastructuur hiervoor al heb, waarom niet? Het is bijvoorbeeld wel handig om gelijksoortige treinen in treinschakeling te laten rijden. Dan koppel je twee of meer locomotieven aan elkaar die dan samen moeten werken. Daarbij is het belangrijk dat ze ongeveer dezelfde rijeigenschappen hebben.
Grappig ding, wel een beetje bulky.Moet eens vragen hoe ze dat doen. Er staat dat ze de WLAN maus ombouwen. Normaliter kan je niet zoveel doen met een stukje kant en klaar elektronica omdat dat helemaal dicht getimmerd is. Dus ik vraag me af wat ze er mee doen.
Als ik een oneven wissel probeer aan te sturen, krijg ik van gahtows library altijd een even nummer terug.
m_XpNet.setTrntPos((m_TurnOutAddress - 1) >> 8, (uint8_t)(m_TurnOutAddress - 1), 0x00);
Er zitten nog een paar dingetjes in die library die ik nog niet helemaal snap.
/* Conversion table for 28 steps DCC speed to normal speed. */const uint8_t SpeedStep28TableFromDcc[32] = { 0, 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28 };
/* Conversion table for normal speed to 28 steps DCC speed. */ const uint8_t SpeedStep28TableToDcc[29] = { 16, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 };
XpressNet.setLocoDrive(hb(locoAddress), lb(locoAddress), speedSteps, speed | direction ) ; // met speedSteps = 0b00000011
bool XpressNetClass::setLocoDrive (byte Adr_High, byte Adr_Low, uint8_t Steps, uint8_t Speed){ bool ok = false; unsigned char setLoco[] = {0xE4, 0x10, Adr_High, Adr_Low, Speed, 0x00}; setLoco[1] |= Steps; getXOR(setLoco, 6); ok = XNetSendadd (setLoco, 6); byte Slot = xLokStsgetSlot(Adr_High, Adr_Low); xLokSts[Slot].mode = (xLokSts[Slot].mode & B11111100) | Steps; //Fahrstufen xLokSts[Slot].speed = Speed & B01111111; bitWrite(xLokSts[Slot].f0, 5, bitRead(Speed, 7)); //Dir
XpressNet.setTrntPos( hb(pointAddress), lb(pointAddress), pos | 0b1000 ) ;
void togglePoint( ){ XpressNet.getTrntInfo( hb(pointAddress), lb(pointAddress) ) ; // issue a command to retreive point information togglingPoint = true ; // set flag that we wanna toggle a point}void notifyTrnt(uint8_t Adr_High, uint8_t Adr_Low, uint8_t Pos) // called upon an answer{ if( togglingPoint == true ) { togglingPoint = false ; pointAddress = (Adr_High << 8) | Adr_Low ; Pos -- ; // makes 0-1 out of 1-2 Pos ^= 1 ; // toggles what it is now and send it back XpressNet.setTrntPos( Adr_High, Adr_Low, Pos | 0b1000 ) ; pointState = Pos ; updateLCD() ; } }
void notifyTrnt(uint8_t Adr_High, uint8_t Adr_Low, uint8_t Pos) // called upon an answer{ uint16_t addresLocal = (Adr_High << 8) | Adr_Low ; if( togglingPoint == true && addresLocal == pointAddress ) // if I ask for information AND the address matches my set address { togglingPoint = false ; Pos -- ; // makes 0-1 out of 1-2 Pos ^= 1 ; // toggles what it is now and send it back XpressNet.setTrntPos( Adr_High, Adr_Low, Pos | 0b1000 ) ; // than toggle the point