NmraDcc v2

Možná se vám stalo, že při pokusech s Arduinem a s programem staženým z Internetu, program nefungoval. Na vině nemusel být stažený program, ale verze knihovny NmraDcc.

Mezi verzí knihovny 1.4.4 a verzí 2.0.0 došlo ke změně API což mohlo způsobit nefunkčnost programů. Tento článek popisuje jak nainstalovat novou verzi knihovny.

Odinstalace staré verze

Nejdříve se přesvědčíme jakou verzi knihovny máme nainstalovanou. Otevřeme seznam nainstalovaných knihoven z menu Projekt – Přidat knihovnu – Spravovat knihovny…

Do pole Filter tvého hledání… zadáme NMRA.

V mém případě jsem zjistil poslední nainstalovanou verzi 1.4.2. Je tedy důvod provést odinstalaci staré knihovny. Ukončíme program Arduino IDE.

Spustíme správce souborů a přepneme se do adresáře s knihovnami Arduion IDE.

Operační systém

Linux

Windows

Cesta na knihovnu

/home/<USERNAME>/Arduino/libraries

My Documents\Arduino\libraries

Vymažeme adresář s poslední verzí knihovny NmraDcc-1.4.x.

Tím je odinstalace staré verze hotová.

Instalace nové verze knihovny

Ze stránek Model Railroading with Arduino http://mrrwa.org/download/ Stáhneme poslední verzi knihovny Download NmraDcc library ZIP Archive. Soubor NmraDcc-master.zip si uložíme na disk.

Znovu spustíme Adruino IDE. V menu Projekt – Přidat knihovnu – Přidat .ZIP Knihovnu… vybereme právě stažený ZIP soubor s knihovnou.

Po instalaci znovu otevřeme seznam nainstalovaných knihoven z menu ProjektPřidat knihovnuSpravovat knihovny… Znovu vyhledáme knihovnu NMRA. Mezi nainstalovanými knihovnami teď uvidíme knihovnu NmraDcc Verze 2.0.0.

Nové API

V popisu knihovny si všimneme textu:

WARNING as of version 1.4.4 support for the call-back functions notifyDccAccState() and notifyDccSigState() has been removed, please check and update your sketches, as they will silently fail.

Tato věta znamená, že vaše programy, pokud používají výše uvedené funkce, přestanou fungovat bez jakéhokoliv dalšího varování.

Úprava programů

Otevřeme náš program v místě, kde používáme funkci notifyDccAccState(). V programu si můžeme všimnout, že funkce které jsou volané z knihovny NmraDcc jsou oranžové. Pokud funkce z knihovny volána není, tak je její název černý. Název funkce notifyDccAccState() zčernal.

Pokud píšeme programy pro vlastní potřebu, tak program prostě opravíme s použitím nové funkce notifyDccAccTurnoutOutput(). Pokud náš program sdílíme s někým jiným, tak napíšeme opravu, která nám umožní překládat program jak ve verzi knihovny 1.x.x tak ve verzi 2.x.x. Oprava je velmi jednoduchá. Funkci notifyDccAccState() přepíšeme následujícím kódem:

void notifyDccAccState( uint16_t Addr, uint16_t BoardAddr, uint8_t OutputAddr, uint8_t State) {

uint8_t bitState = OutputAddr & 0x01 ;

notifyDccAccTurnoutOutput(Addr, bitState, 1) ;

}

Výsledek bude vypadat nějak takto:

Od této chvíle bude náš program fungovat jak s knihovnou NmraDcc 2.0.0 tak se starší knihovnou verze 1.4.x.

vytvořeno 27. 5. 2018