#include <NmraDcc.h>#include <LocoNet.h>struct Channel{ byte pin ; byte currentVal ; byte setpoint[4] ; unsigned long prevTime ; unsigned long interval ;} ;// TWEAK THESE VALUES IF NEEDEDconst unsigned long dayInterval = 30000 ; // this is millisconds that it takes to change the light to next day part const int dccAddress = 100 ;// const byte dayParts[4][4] = { // mijn 'bedachte' waardes// // R G B WW // { 255, 214, 170, 200 }, // MORNING// { 180, 200, 255, 150 }, // MIDDAY// { 255, 170, 130, 220 }, // EVENING// { 3, 2, 1, 5 }, // NIGHT// };const byte dayParts[4][4] = { // originele waardes van Huib Maaskan met dimfactor 8// R G B WW { 194, 50, 3, 16 }, // MORNING { 61, 74, 63, 171 }, // MIDDAY { 204, 45, 26, 42 }, // EVENING { 0, 0, 32, 2 }, // NIGHT};// dont change thisenum { MORNING, MIDDAY, EVENING, NIGHT,} ;byte currentDaytime = MORNING ;const int DCCpin = 2 ;const int LnetTxPin = 12 ;const int Rpin = 3 ;const int Gpin = 5 ;const int Bpin = 6 ;const int WWpin = 11 ;Channel channels[4] = { { Rpin, 0, { dayParts[MORNING][0], dayParts[MIDDAY][0], dayParts[EVENING][0], dayParts[NIGHT][0] }, 0, 0 }, // R channel { Gpin, 0, { dayParts[MORNING][1], dayParts[MIDDAY][1], dayParts[EVENING][1], dayParts[NIGHT][1] }, 0, 0 }, // G channel { Bpin, 0, { dayParts[MORNING][2], dayParts[MIDDAY][2], dayParts[EVENING][2], dayParts[NIGHT][2] }, 0, 0 }, // B channel { WWpin, 0, { dayParts[MORNING][3], dayParts[MIDDAY][3], dayParts[EVENING][3], dayParts[NIGHT][3] }, 0, 0 } // WW channel};NmraDcc dcc ;void setup(){ // DCC initialisatie dcc.pin( 2, 0 ) ; dcc.init( MAN_ID_DIY, 11, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, 0 ); // // Loconet initialisatie LocoNet.init( LnetTxPin );}enum{ idle, transitioning,} ;byte state = idle ;lnMsg *LnPacket ;bool change = false ;void updateChannels(){ if( change ) { change = false ; for (int i = 0; i < 4; i++) { int steps = abs(channels[i].currentVal - channels[i].setpoint[currentDaytime]); channels[i].interval = dayInterval / steps; // steps zal nooit nul zijn } state = transitioning ; } unsigned long currentTime = millis(); if( state == transitioning ) for( int i = 0 ; i < 4 ; i ++ ) { if( currentTime - channels[i].prevTime >= channels[i].interval) { channels[i].prevTime = currentTime; if( channels[i].currentVal < channels[i].setpoint[currentDaytime] ) channels[i].currentVal++; if( channels[i].currentVal > channels[i].setpoint[currentDaytime] ) channels[i].currentVal--; analogWrite( channels[i].pin, channels[i].currentVal ) ; } } if( state == transitioning ) { bool allReached = true ; for( int i = 0 ; i < 4 ; i ++ ) { if( channels[i].currentVal != channels[i].setpoint[currentDaytime] ) { allReached = false ; break ; } } if( allReached ) state = idle ; }}void loop(){ LnPacket = LocoNet.receive() ; if( LnPacket ) { LocoNet.processSwitchSensorMessage( LnPacket ) ; } dcc.process() ; updateChannels() ;}void notifyDccAccTurnoutOutput (uint16_t Addr, uint8_t Direction, uint8_t OutputPower){ if( change ) return; if( state != idle ) return ; if( Addr != dccAddress ) return ; if( OutputPower == 0 ) return ; incrementDaytime() ;}void notifySwitchRequest( uint16_t Address, uint8_t Output, uint8_t Direction ){ if( change ) return; if( state != idle ) return ; if( Address != dccAddress ) return ; if( Output == 0 ) return ; incrementDaytime() ;}void incrementDaytime(){ if (++currentDaytime == 4) currentDaytime = 0; change = true;}
Wat nog te doen voor €-Spoor 2020;-Bascule kelder uitlijnen en monteren-Bascule kelder wanden afneembaar maken-onderhoudsbrug maken-onderhoudstoegangen maken in bascule kelder.-onderhoudsbrug maken plaatsen -leuningen plaatsen (4 2 stuks)-Nieuwe zijpanelen maken-Achterwand maken/kopen-Hemel maken/kopen-Fries maken/kopen-Verlichting aan de hemel monteren-RGB/WW/CW) led strips aansluiten-Achtergrond samenstellen, en ook werkelijk afmaken-Water maken voor 2 watergangen, kanaal en slootje-Enkele rij dukdalven opnieuw repareren / nieuw maken en plaatsen horizontale liggers maken.-Dubbel rij dukdalven monteren en inkorten* -Dukdalven maken 2x naast de brug aan de publiekzijde-Roostervloer maken op bascule kelder-Roostervloer maken op de pijler-Betonblokken, tekenen en 3D laten printen voor op de aanbruggen, gemaakt van MDF en triplex-Taluds aanpassen-Bovenleidingpalen ontwerpen/maken/monteren-Puntlas apparaat zoeken, (Robbe Welma 2000 te koop gevraagd op het forum) of ga ‘m zelf bouwen, bouw verslagje volgt later.-Waslijn (bovenleiding) maken en monteren.-Brugleuning maken/monteren-Geluidswanden ontwerpen/maken/3D printen/monteren-Bovenleidingmasten ontwerpen plan is om bestaande na te maken, afspanmast en tussenmast-Mastschakelaars monteren, komen op 2x nog te maken 1/2 bak-Wubo’ s of zoiets maken-Riet planten met lisdodden-Wegen schilderen-Begrassen wel aan begonnen maar nog niet klaar-Meer struiken, bomen planten, en onkruid zaaien-Geluidsinstallatie samenstellen, testen en inbouwen-Stuur kaart maken inbouwen aansturing brug, elektronica-Besturingskabel deelbaar maken tbv transport-Bascule kelder en pijler beplakken met schutvel teflontape-Brug geheel in betonkleur schilderen-Val groen spuiten-Aanbruggen vernieuwen, details zijkant en groeven onderin aanbrengen, schilderen-Signalering voor publiek/machinisten aanbrengen-Kade aanhelen-Stelconplaten aanbrengen-Val opleggingen maken-Bushalte maken-Stoep en stoepranden maken stoeptegels en randen plaatsen, spullen op de plaktape na in huis,-Borden bebouwde kom maken-Hoogte borden maken-Bord van de brugopeningstijden maken tbv scheepvaart-Booster inbouwen-DR5000 inbouwen-Detectie decoder inbouwen-AVT module inbouwen-"Leen" blokjes monterenEn ùùhhh, .....Nog steeds zat te doen nog..... 104848