Tegoroczny Festiwal Nauki podsunął naszej ekipie pomysł na ulepszenie Banner Printera. Wiadomo – drukarki raczej mają to do siebie, że przelewają na papier to, co chce użytkownik 😛 Idąc tym tropem rozumowania, postanowiliśmy rozszerzyć zakres wypisywanego tekstu poza dotychczasowe „LEGO EV3”. Dodatkowo, co najbardziej pożądane, zdecydowaliśmy o zaprogramowaniu robota w taki sposób, aby to użytkownik decydował, co właściwie chce wypisać.
Początek prac wyglądał obiecująco. Oryginalny program był już podzielony na kilka bloków (coś w rodzaju funkcji, tylko wersja graficzna), przez co zyskiwał na przejrzystości. Każdy znak składał się z serii małych kroków rysowania linii, a więc wprowadzenie obsługi reszty alfabetu sprowadzało się do dodania nowych ścieżek. Pierwszy test pokazał jednak, że nie wszystko jest takie proste – i to dosłownie. Znaki typu „K”, „X”, „V” wyszły bowiem zdecydowanie zakrzywione. Konieczna stała się modyfikacja programu rysującego i tutaj zaczęła się trudniejsza część zadania. Nie starczało nam czasu, aby prześledzić problem na zajęciach w szkole, a chcąc jednak się z nim zmierzyć, zdecydowaliśmy się działać w domu. Nie było to dobre wyjście – po tygodniu prac bez dostępu do robota teoretycznie ulepszony program zupełnie przerywał drukowanie. Zawiedzeni? Troszeczkę :/ Zaczęła się więc mozolna akcja debugowania – testowania krok po kroku problematycznych liter. Wypisywaliśmy wszelkie możliwe zmienne, używaliśmy dźwięków co kilka bloków, a nawet zwalnialiśmy proces drukowania – wszystko by wyłapać błąd, który w końcu wyszedł na jaw. Poszło o niedokładność sensorów silnika, której nasz program nie uwzględniał. Voilà! Kolejny metr papieru został zużyty, ale znaki wreszcie wyglądały przyzwoicie.
Osobną kwestią była sama możliwość wyznaczania tekstu, który chcielibyśmy wydrukować. Tutaj utrudnieniem okazało się z kolei samo środowisko, w którym tworzymy programy dla robotów, a mianowicie praktycznie zerowe wsparcie edytowania zmiennych typu tekstowego (string) – poza operacją łączenia. Niemożliwe jest również przechowywanie znaków w tablicach, które obsługują wyłącznie liczby i typ logiczny. Co więc zrobiliśmy, aby ominąć te przeszkody? Przypomnieliśmy sobie lekcje UTK i pewną tabelkę zwaną kodem ASCII… i wykorzystaliśmy ją w praktyce! 😀 Aby sprawy ułatwić, zmodyfikowaliśmy ją delikatnie, i tak oto np. litera „A” otrzymała kod 0, a „Z” – 26. Następnie stworzyliśmy nowy moduł, który przetwarzał przekazany kod na znak, tak aby reszta programu mogła wyświetlić go na ekranie lub przekazać do drukowania. Dzięki takiemu podejściu operacje jak np. drukowanie lub czyszczenie tekstu również stały się kodami, tylko inaczej obsługiwanymi – zupełnie jak w oryginalnym ASCII 😀
Pozostało tylko oprogramować przyciski kostki i wyświetlić informacje na wyświetlaczu. Dodać szybkie przechodzenie po grupach znaków. Umilić użytkowanie robota za pomocą krótkich dźwięków i przetestować, czy aby wszystko gra 😉 Zrobiliśmy i to. Co nam pozostało? Chyba tylko poczekać na dzień… prezentacji 😉