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.
- 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ść
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
##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();
}
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 posiada prostą konsolę szeregową do ułatwienia debugowania. Konsolę można podłączyć pod dowolny port szeregowy wpierany przez Arduino.
// 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.