ubuntu 64bit & problem z arduino IDE

Przy okazji ostatniej „wymiany” systemu operacyjnego (z Minta na Ubuntu) postanowiłem w końcu sprawdzić wersję 64-bitową. Cannonical na stronie pobierania Ubuntu sugeruje wersje 64-bitowe, więc chyba są już na tyle stabilne, że warto spróbować. Niestety okazało się, że Arduino IDE przestało działać na nowej wersji systemu.

Opisana sytuacja nie była weryfikowana na innym komputerze, aczkolwiek po ilości zapytań w sieci mogę wnioskować, że nie jestem odosobnionym przypadkiem.

arduino console

Moje środowisko pracy

– nie instalowałem IDE Arduino poprzez instalator systemu, ponieważ chcę korzystać z tego samego środowiska na różnych komputerach,
– w związku z tym IDE Arduino 1.0.5 i 1.5.5 oraz przy okazji Energia (środowisko IDE oparte o Arduino dla mikrokontrolerów TI.com) mam w dedykowanym katalogu na Dropbox,
– sketchbooki i dodatkowe biblioteki (libraries) mam w tym samym katalogu (podzielone dla poszczególnych wersji IDE), dzięki czemu wszędzie tam, gdzie mam dostęp do Dropbox‚a mam też dostęp do swoich projektów,
– rozwiązanie z wieloma komputerami sprawdza się tylko pod systemami linuksowymi (bezwzględna ścieżka dostępu – głównie używana przez sketchbooki zawsze wygląda tak samo: /home/user/Dropbox/elektronika/),
– Arduino IDE zawsze odpalam z konsoli (poleceniem ./arduino wykonanym w odpowiednim katalogu).

Problemy, które się pojawiły

Boldem zaznaczyłem istotne informacje.

java.lang.UnsatisfiedLinkError: /home/user/Dropbox/elektronika/arduino-1.0.5/lib/librxtxSerial.so: /home/user/Dropbox/elektronika/arduino-1.0.5/lib/librxtxSerial.so: niewłaściwa klasa ELF: ELFCLASS32 (Possible cause: architecture word width mismatch) thrown while loading gnu.io.RXTXCommDriver
Exception in thread „main” java.lang.UnsatisfiedLinkError: /home/user/Dropbox/elektronika/arduino-1.0.5/lib/librxtxSerial.so: /home/user/Dropbox/elektronika/arduino-1.0.5/lib/librxtxSerial.so: niewłaściwa klasa ELF: ELFCLASS32 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
(…)
at processing.app.Base.main(Base.java:195)

Rozwiązanie problemu

Wychodzę z założenia, że dobrze zadane pytanie w wyszukiwarce, to połowa sukcesu. I tym razem przekonałem się, że to prawda – już w pierwszym wyniku znalazłem wątek, który był strzałem w dziesiątkę:

http://forum.arduino.cc/index.php/topic,3607.0.html

W kilku miejscach użytkownicy pisali o potrzebie prawidłowego linkowania do biblioteki: librxtxSerial.so, co wiązało się z weryfikacją zainstalowania odpowiedniego pakietu oraz utworzenia dowiązania pomiędzy lokalizacjami plików:

sudo apt-get install librxtx-java
ln -sf /usr/lib/librxtxSerial.so lib/librxtxSerial.so

U mnie pomogło. Jeśli mimo wszystko będziecie mieć problem – piszcie, w grupie zawsze łatwiej rozwiązuje się problemy.

problem z wyświetlaczem lcd 1604a (arduino i biblioteka LiquidCrystal.h)

Najbardziej popularnym wyświetlaczem LCD dla elektroniki jest model 1602 na sterowniku HD44780. Jednak czasem potrzeba odrobinę więcej i tutaj przychodzą wyświetlacze 1604 oraz 2004. Ja znalazłem w swoich szpargałach 1604a i od razu zdecydowałem podłączyć go do Arduino.

Podłączenie zrealizowałem na magistrali 4 bit pod wolne porty, podświetlanie ograniczyłem rezystorem i wgrałem jakiś przykład dostępny w środowisku programistycznym. Przykład działał prawidłowo, póki wyświetlałem coś w pierwszej linijce. Wrzucenie czegoś do kolejnych powodowało jakieś dziwne rozjazdy, wyświetlanie się wartości w złych miejscach i lekki chaos na wyświetlaczu.

Naturalnym krokiem było ustawienie jakiegoś krótkiego tekstu w każdym wierszu i obserwowanie reakcji wyświetlacza. Pierwszy i drugi wyświetliły się OK, a kolejne dwa były przesunięte i zaczynały się od 5 kolumny. Najprostszym rozwiązaniem było wpisanie w pozycję kolumn w 3 i 4 wierszu wartości ujemnej jako początkowej. Problem rozwiązany.

1604a arduino

W sumie z braku czasu nie analizowałem przyczyny takiego zachowania wyświetlacza. Jeśli ktoś z Was ma pomysł/wiedzę, to zapraszam do wyjaśnienia.

(w kolejnym kroku będę weryfikować czy podobnie wyświetlacz zachowuje się sterowany przez I2C oraz po podłączeniu do Raspberry Pi)

Kod sterujący:

/*
Podlaczenie (plytka MEGA2560):
* LCD RS pin do pinu 23
* LCD Enable do pinu 27
* LCD D4 do pinu 29
* LCD D5 do pinu 31
* LCD D6 do pinu 33
* LCD D7 do pinu 35
* LCD R/W do GND
*/

#include <LiquidCrystal.h>

LiquidCrystal lcd(23, 27, 29, 31, 33, 35);

void setup() {
lcd.begin(16, 4);
lcd.setCursor(0, 0);
lcd.print(„wiersz1 wiersz1”);
lcd.setCursor(0, 1);
lcd.print(„wiersz2”);
lcd.setCursor(-4, 2);
lcd.print(„wiersz3 wiersz3”);
lcd.setCursor(-4, 3);
lcd.print(„wiersz4 wiersz4”);
}

void loop() {
lcd.setCursor(8, 1);
lcd.print(millis()/100);
}