Skip to content

Arduino library helping creation of DIY consoles for MaSzyna Train Simulator (aka EU07)

License

Notifications You must be signed in to change notification settings

marcinn/maszynaduino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

maszynaduino

Maszynaduino jest biblioteką dla Arduino (Uno, Mega, etc) ułatwiającą oprogramowanie pulpitów budowanych na potrzeby symulatora MaSzyna (aka EU07).

Biblioteka posiada obiektowy interfejs i ułatwia korzystanie z analogowych multiplekserów umożliwiających obsługę większej ilości kontrolek, przełączników i mierników, niż fizycznie posiadają mikrokontrolery.

Możliwości

  • obiektowy interfejs
  • szeregowa konsola do diagnostyki
  • wsparcie dla analogowych multiplekserów (typu 74HC4067)
  • obsługa kontrolek i przełączników
  • prostota użycia i czytelność

Pierwsze kroki

Użycie biblioteki należy rozpocząć od załadowania plików nagłówkowych:

#include "maszynaduino.h"

W dalszej części (przed setup() i loop()) trzeba zadeklarować kontrolki, przełączniki i sam pulpit. Przykładowo przełącznik baterii podłączony do portu 2 można zadeklarować następująco:

#define PIN_BATERIA 2

Switch *bateria = new PinSwitch(PIN_BATERIA, 0, 2)

Parametry konstruktora PinSwitch są następujące:

  • nr pinu
  • nr bajtu ramki wyjścia (tu: 0, liczony bez preambuły)
  • nr bitu do gaszenia / zapalania (tu: 2)

Do pinu 3 podłączymy kontrolkę lampki czuwaka:

#define PIN_LAMPKA_CZUWAK 3

Indicator *lampkaCzuwaka = new PinIndicator(PIN_LAMPKA_CZUWAK, 4, 6);

Parametry konstuktora PinIndicator są następujące:

  • nr pinu
  • nr bajtu ramki wejścia (tu: 4, liczony bez preambuły)
  • nr bitu określającego stan kontrolki (tu: 6)

W następnym kroku należy utworzyć pulpit określając szeregowy port do komunikacji:

Console *sm42 = new Console(&Serial);

W funkcji setup() należy dodać do pulpitu utworzone przełącznik i kontrolkę, oraz zainicjować pulpit.

void setup() {
    sm42->addSwitch(bateria);           // dodanie przełącznika baterii
    sm42->addIndicator(lampkaCzuwaka);  // dodanie kontrolki czuwaka
    sm42->setup();                      // zainicjowanie pulpitu
}

W funkcji loop() należy dodać aktualizację pulpitu oraz transmisję danych:

void loop() {
    sm42->update();            // aktualizacja pulpitu
    sm42->transmit();          // komunikacja Pulpit <-> PC
}

Aby przykład zadziałał w MaSzynie, w pliku eu07_input-uart.ini, musi pojawić się adekwatny wpis:

2 toggle batteryenable batterydisable

Kompletny przykład:

##include "maszynaduino.h"

#define PIN_BATERIA 2
#define PIN_LAMPKA_CZUWAK 3

Switch *bateria = new PinSwitch(PIN_BATERIA, 0, 2);
Indicator *lampkaCzuwaka = new PinIndicator(PIN_LAMPKA_CZUWAK, 4, 6);

Console *sm42 = new Console(&Serial);


void setup() {
  sm42->addSwitch(bateria);
  sm42->addIndicator(lampkaCzuwaka);
  sm42->setup();
}

void loop() {
  sm42->update();
  sm42->transmit();
}

Schemat połączeń

Do przełączników nie trzeba podłączać rezystorów ściągających, ponieważ Maszynaduino domyślnie konfiguruje wejścia w trybie INPUT_PULLUP (z rezystorami podciągającymi wbudowanymi w Arduino). W razie potrzeby dowolny przełącznik można skonfigurować bez użycia rezystora podciągającego - biblioteka zadba o prawidłową interpretację stanu wejścia.

maszynaduino-example-01

Konsola debugowania

Maszynaduino posiada prostą konsolę szeregową do ułatwienia debugowania. Konsolę można podłączyć pod dowolny port szeregowy wpierany przez Arduino.

maszynaduino_consoledebug

// Pulpit będzie komunikował się z PC podstawowym portem (`Serial`)
Console *sm42 = new Console(&Serial);  

// Konsola debugowania będzie używała portu `Serial1`
ConsoleDebug *debug = new ConsoleDebug(sm42, &Serial1);

void setup() {
    sm42->setup();
    debug->setup();
}

void loop() {
    sm42->update();
    sm42->transmit();

    // wysłanie debug output na konsolę debugowania
    debug->send();
}

Aby wykorzystać dodatkowe porty szeregowe do debugowania, konieczna będzie płytka obsługująca większą liczbę portów szeregowych (typu Arduino Mega, Arduino Due) oraz adapter USB.

usb-ttl-serial-adapter

About

Arduino library helping creation of DIY consoles for MaSzyna Train Simulator (aka EU07)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages