Nowości dla programistów

Pojawiła się właśnie nowa stabilna wersja Arduino IDE 1.6.

image

Nowości względem poprzedniej stabilnej wersji 1.0.6 to:

  • Zapewniona łatwa obsługa wielu rodzajów procesorów – także dla twórców innych płytek przez katalog “hardware” w szkicach
  • Wykrywanie nazwy płytki w menu portów szeregowych
  • Sterowniki i program są podpisane kluczem cyfrowym – daje to pewność, że są dostarczane przez twórców
  • Automatyczny zapis przy kompilowaniu/wgrywaniu szkicu
  • Lepszy Monitor portu szeregowego – nowa biblioteka JSSC zamiast RXTX
  • Opcje Znajdź i Zamień działają we wszystkich zakładkach edytora na raz
  • Poprawione klasy String, Serial, Print
  • Nowe wersje kompilatorów AVR-GCC, ARM-GCC i programów do wgrywania szkiców AVRDUDE i BOSSAC
  • Możliwość obsługi przez tryb tekstowy konsoli
  • Arduino IDE podaje ile szkic zajmie pamięci Flash i RAM
  • W edytorze widać numery linii
  • Menu mozna przewijać, kiedy nie mieści się na ekranie
  • Szkice do Arduino YUN można wysyłać przez sieć Wi-Fi
  • Poprawiono obsługę interfejsu USB
  • Biblioteka SPI obsługuje transakcje – każde urządzenie podłączone do SPI może mieć inną prędkość transmisji i parametry
  • Dokładniejsze menu wyboru płytki – może mieć podkategorie
  • Poprawione wgrywanie szkicu w Leonardo, Micro i Yun – płytki powinny się mniej blokować
  • Poprawione biblioteki Bridge, TFT, Ethernet, Robot_Control, SoftwareSerial, GSM
  • Dużo drobnych poprawek interfejsu użytkownika

Strona Arduino IDE z plikami do ściągnięcia.

Edytor Atom ma plugin z obsługą szkiców Arduino

image

Plugin nazywa się “language-arduino”.
Można go dodać przez polecenie “apm”

apm install language-arduino

Plugin zapewnia kolorowanie składni i masę podpowiedzi wbudowanych funkcji Arduino.

Strona edytora Atom

Strona pluginu Language-Arduino

Fritzing oferuje pisanie kodu

image

Nowa wersja programu Fritzing zaoferowała dodatkową zakładkę. Oprócz rysowania schematów i edytowania płytek drukowanych, możesz jeszcze pisać kod dla Arduino. Edytor nie zapewnia jeszcze wielu funkcji, ale w kolejnych wersjach powinno być coraz lepiej.

Aby aktywować wgrywanie kodu do Arduino, trzeba w Edit->Preferences wybrać gdzie mamy Arduino IDE

image

Strona programu Fritzing

sprae

Assert4a – assert dla Arduino IDE – szybkie libki

Ta biblioteka jest zajefajna i powstała dziś rano.

Pisanie programów to fajne zajęcie. Jednak od czasu do czasu zdarzają się chwile, że program nie chce działać tak jak tego oczekuję. Im dłużej to trwa tym bardziej projekt demotywuje.

Jednym z ciekawszych podejść do tego problemu jest pisanie programów opartych na testach. Najpierw pisze się program, który sprawdzi czy nasz program lub jego elementy działają dobrze. Potem pisze się właściwy program tak długo, aż ten testujący zakończy wszystkie testy jako prawidłowe.

W takich chwilach zwykle uruchamia się profesjonalne narzędzia typu debugger, którym analizuje działanie programu krok po kroku i sprawdzam jakie dane znajdują się w zmiennych. Jak znajdują się złe to zastawiam się czemu ;-).

Niestety w Arduino IDE nie ma debuggera. Trzeba sobie radzić amatorsko.
Najbardziej prymitywnym sposobem jest świecenie wbudowaną diodą L13, gdy następuje jakieś ważne/dziwne wydarzenie w programie.

int zmienna;

void setup() {
  pinMode(13, OUTPUT);

}

void loop() {
  zmienna++;
  if (zmienna < 0)
  {
    digitalWrite(13, HIGH);
  }
}

Tu program sprawdza czy zmienna jest mniejsza niż zero. Jeśli tak to świeci lampką L na płytce drukowanej Arduino.

Innym sposobem jest testowanie programu przez wysyłanie komunikatów do Monitora Portu Szeregowego w Arduino.

int zmienna;

void setup() {
  while (!Serial);
  Serial.begin(9600);
}

void loop() {
  zmienna++;
  if (zmienna < 0)
  {
    Serial.println(zmienna);
    delay(1000);
  }
}

Gdy zmienna jest poniżej zera program wyśle jej wartość do komputera.

Fachowo takie sprawdzanie programu nazywane jest >>debug za pomocą print “dupa”<< 😉 i jest często powodem drwin profesjonalnych programistów.

Takie testowanie programu może być kłopotliwe przy bardziej rozbudowanych kodach. Upychasz coraz więcej print w różnych zakamarkach programu i na końcu Monitor Portu Szeregowego zaczyna wyświetlać tyle komunikatów, że przypomina to monitorowanie z filmu Matrix.

W wielu językach programowania wymyślono już ciekawe rozwiązania pomagające w takim testowaniu programu. Najpopularniejsze nazywa się “assert” [twierdzić/dowodzić czegoś].

Jego użycie w programie wygląda jak użycie normalnej funkcji. Z tym, że zamiast argumentu podajesz warunek. Warunek to określenie przy jakich parametrach program będzie działał prawidłowo. W przypadku naszego programu zapiszę to jako:

assert(zmienna >= 0);

Ponieważ zakładam twierdzenie, że funkcja będzie działała dobrze tylko wtedy, kiedy zmienna będzie większa lub równa zeru.

Jeśli wydarzy się coś w programie i warunek nie będzie spełniony (zmienna będzie miała wartość mniejszą niż zero) to dostaniemy komunikat informujący w którym pliku programu, w jakiej linii i jakiej funkcji warunek nie został spełniony. Program zostanie dla bezpieczeństwa zatrzymany.
Taka prosta funkcja funkcja, a zwraca wszystkie niezbędne informacje.

Standardowa biblioteka assert.h z języka C++ nie działa dobrze w Arduino IDE. Postanowiłem napisać bibliotekę poprawiającą jej działanie. Nazwałem ją Assert4a.h.

#include <Assert4a.h>

int zmienna;

void setup() {
  while (!Serial);
  Serial.begin(9600);
}

void loop() {
  zmienna++;
  assert(zmienna >= 0);
}

W funkcji loop za pomocą assert, zakładam że program będzie dobrze działał, jeśli zmienna będzie miała wartość większą lub równą 0.
Gdy program nie spełni tego warunku, w Monitorze Portu Szeregowego otrzymam komunikat:

Assertion: ‘zmienna >= 0’ failed
   File ‘sketch_dec09a.ino’, at line 12, in function ‘loop’

Mówi on, że twierdzenie “zmienna >= 0” okazało się nieprawdziwe. Nieprawidłowość wystąpiła w pliku programu “sketch_dec09a.ino”, w linii 12, w funkcji “loop”.

Możesz obstawić dużą część programu takimi twierdzeniami i jak coś złego się stanie to będziesz miał informację gdzie i dlaczego.

Gdy przetestujesz już cały program nie musisz usuwać assert-ów żeby je wyłączyć. Wystarczy, że nad include z biblioteką napiszesz #define NDEBUG

#define NDEBUG
#include <Assert4a.h>

int zmienna;

void setup() {
  while (!Serial);
  Serial.begin(9600);
}

void loop() {
  zmienna++;
  assert(zmienna > 0);
}

Gdy zajdzie potrzeba ponownego testowania, usuniesz define i bedziesz mógł dostawać komunikaty o błędnym działaniu.

By zainstalować bibliotekę, wystarczy pobrać plik zip, a potem w Arduino IDE wybrać menu Szkic -> Importuj bibliotekę… -> Dodaj bibliotekę…

PS. Zadanie domowe z gwiazdką – kto wytłumaczy w komentarzach czemu w pierwszym programie lampka L13 zaświeciła się?

sprae

Arduino IDE 1.5.8

Pojawiło się nowe Arduino IDE w gałęzi 1.5 (tej głównie dla Arduino DUE i YUN).

Przetłumaczyłem wprowadzone zmiany ze strony Arduino:

ARDUINO 1.5.8 BETA – 2014.10.01

[środowisko programistyczne]
* Znajdź/Zastąp działa na wielu zakładkach na raz (Erwin Ried, Fulvio Ieva)
* Naprawione złe działanie “Zastąp”, kiedy w polu “Znajdź” jest pusto (Fulvio Ieva)
* Dużo zmian w trybie poleceń tekstowych konsoli (Matthijs Kooijman)
* Kursor się nie przemieszcza gdy włączysz opcję autoformatowania kodu

[biblioteki]
* SPI: dodano transakcyjne API (Paul Stoffregen)
https://github.com/arduino/Arduino/pull/2223
https://groups.google.com/a/arduino.cc/forum/#!msg/developers/TuZLfjeZjDI/6deNjw3Y9m4J
* FileIO bridge: naprawiono złą wartość zwracaną przez File::size() kiedy rozmiar pliku przekraczał 32768
* Zaktualizowano Temboo to najnowszej wersji
* Zaktualizowano/naprawiono przykładowe programy

[rdzeń]
* sam: Operatory “new” i “delete” nie zabierają już 50Kb biblioteki stdclib
* Poprawiono implementacje wewnętrzych funkcji kompilatora gcc (__cxa_guard_*) (Alexey Guseynov)
* Naprawiono problem wgrywania programów do Leonardo (i na innych płytkach zależnych od kontrolera mega32u4)
* Małe udoskonalenia klasy String (Matthijs Kooijman)
* Poprawiono wskazywanie ilości dostępnej pamięci Flash na płytce mega2560 (Leonardo Milani, Arnav Gupta)
* sam: usunięto nieużywane puste makro digitalPinToTimer(..) (Bill Perry)

Poniższe funkcje dodano także w Arduino IDE 1.0.6:

[rdzeń]
* avr: Dodano pustą funkcję atexit() biblioteki cstdlib (Christopher Andrews)

sprae

Arduino IDE 1.0.6

Arduino IDE w wersjach 1.0.x to to mniejsza wersja edytora do pisania programów dla Arduino. Obsługuje płytki Arduino wyposażone w procesor AVR. Czyli wszystkie podstawowe – UNO, Leonardo, Mini, Nano. Micro.

Po instalacji Teensyduino, ta wersja obsługuje też płytki Teensy.

Kilka dni temu wyszła wersja 1.0.6 Arduino IDE.

Zmiany w nim to głównie:

  • Poprawki do komunikacji USB – czyżby oczekiwana stabilność dla Leonardo?
  • Przeniesiono klasy Stream i Print z IDE 1.5 (służą one jako podstawy do obiektów Serial, Ethernet LiquidCrystal itp.)
  • Poprawiono kompatybilność bibliotek z wersją 1.5

Dla fanów płytek Teensy wyszła od razu wersja Teensyduino 1.20 RC4, która współpracuje z Arduio IDE 1.0.6.

sprae

Arduino IDE 1.5.7 – jak używać Flash

Na początku lipca pojawiło się nowe Arduino IDE oznaczone numerem 1.5.7. Poprawiono w nim dużo błędów. Z praktycznych rzeczy, teraz masz możliwość używania znaków ’.’ i ’-’ w nazwach szkiców.

Pod maską zaktualizowano kompilator AVR-GCC do najnowszej stabilnej wersji 4.8.1. Dzięki czemu do pisania bibliotek można używać języka C++11.
Zaktualizowano też Avrdude do wersji 6.0. Jest to narzędzie do wysyłania programów do płytek Arduino i programowania kontrolerów AVR.

Twórcy IDE dodali też AVR-LIBC 1.8. Aktualizacja tego elementu wymaga najwięcej poprawek w naszych bibliotekach i programach. W nowej jego wersji zmieniono sposób używania pamięci Flash do przechowywania stałych danych programu.

Jeśli używasz tylko F() do przechowywania napisów w pamięci Flash np.:

Serial.println(F(“Ala ma kota”));

To nie masz się czego obawiać. Będzie to działało jak dawniej.

Więcej kłopotu masz, jeśli używałeś bardziej zaawansowanych technik jak:

prog_uchar tablica[] PROGMEM = {1, 2, 3, 4, 5, 6, 7};

Fragment tworzy tablicę typu unsigned char tylko do odczytu w pamięci Flash pod nazwą “tablica”.

W nowym IDE ten fragment wywoła błąd o treści:

“sketch_jul23a.ino:1:1: error: ‘prog_uchar’ does not name a type”

“błąd: ‘prog_uchar’ nie jest nazwą typu”

Lub w wielu przypadkach taki błąd:

“sketch_jul23a.ino:1:16: error: variable ‘tablica’ must be const in order to be put into read-only section by means of ’__attribute__((progmem))’”

“błąd: zmienna ‘tablica’ musi być stałą typu ‘const’ by mogla być w sekcji tylko do odczytu oznaczonej przez ’__attribute__((progmem))’”.

Wtedy ten kawałek kodu musisz zamienić na:

const byte tablica[] PROGMEM = {1, 2, 3, 4, 5, 6, 7};

Zamiast “byte” możesz wybrać inny typ, pasujący dla zmiennej.

Zatem jeśli zauważysz taki błąd w swoich programach, albo bibliotekach, których używasz, teraz możesz go łatwo poprawić.

Dopatrzyłem się też pewnej usterki w Arduino IDE pod Windows. Gdy klikasz w menu “Narzędzia”, menu wyświetla się z pewnym opóźnieniem. Nic nie szkodzi jeśli masz nowoczesne Arduino. Gorzej jeśli posiadasz model Duemilanove z układem USB typu FTDI. Wtedy menu może się pojawić nawet po kilkunastu sekundach.Twórcy Arduino IDE zrobili wykrywanie Arduino po kliknięciu w menu “Narzędzia” i kiepsko to napisali ;-). Jeśli też masz takiego laga, to się nie martw. Program się nie zawiesił.

sprae