Zajęcia nr 3 – cyferki, cyferki…

Kto nie był niech żałuje. Naszym celem jest taka oto konsola (kto wie, z jakiego to filmu?)

Pracowaliśmy nad jednym z elementów:

878-00

A dokładniej: nad pojedynczą cyferką!

7 segment display (SSD) – przeczytaj Wikipedię (ale nie całą).


Wszyscy uczestnicy Talenów pracowali wytrwale i już po chwili każdyemu udało się tak sterować LEDami 7-mio segmentowego wyświetlacza, by pokazywał jedynkę, dwójkę i trójkę. Jeden z uczestników kursu okazał się bardzo sprytny i szybko miał zaprogramowane wszystkie 10 cyfr (gratuluję Jakubowi Sz. – nagroda na koniec kursu 😉 ).

W celu sterowania 7-mio segmentowym wyświetlaczem szlifowaliśmy techniki programowania strukturalnego:

  • tworzyliśmy własne funkcje, w tym funkcje z argumentami
  • wykorzystywaliśmy tablice (do przechowywania numerów pinów z Arduino)
  • norriswykorzystaliśmy tablice dwuwymiarowe – tzw. tablice tablic, czyli elementami tablicy była… tablica! Okazało się to bardzo użyteczne (z odpowiednim programowaniem funkcji). To była najtrudniejsza część zajęć, tj. „dla twardzieli”  – dlatego pojawił się znany bohater filmów akcji 😉 Zaawansowany kod – do ponownego zastanowienia się:
    //            A  B  C  D  E  F  G DP
    int led7[8]={ 2, 3, 5, 7, 4, 6,12,13};
    int digits[4][8]={
    // A B C D E F G DP
      {1,1,1,1,0,0,1,0},//swieci jedynka
      {0,0,1,0,0,1,0,0},//swieci dwójka
      {0,0,0,0,1,1,0,0},//swieci trójka
      {1,0,0,1,1,0,0,0}
    };
    //trzeba dodac kolejne cyfry
    
    void cyfra(int nr){
      for (i=0; i<8; i++)
        digitalWrite(led7[i], digits[nr][i]);
    }
    
  • no i poznaliśmy hardware, czyli 7 segment display ze wspólną anodą (CA – common anode – w naszym przypadku). Musieliśmy troszkę zmienić nasze myślenie – przywykliśmy do schematu: 1=włączone, 0=wyłączone. A tutaj odwrotnie. Włączając napięcie 5V na pinie Arduino powodujemy zgaszenie segmentu, z kolei ustawiając napięcie na 0V włączamy segment! Tak – specjalnie dałem Wam taki właśnie sprzęt, by troszkę wysilić szare komórki!

Niestety – programowanie pojedynczej cyferki wymagało wykorzystania 8 pinów cyfrowych z Arduino. To dość dużo… 2 Takie cyferki wymagają już 16 pinów, a nasze UNO ma ich 14 (tylko? aż?). OK, można ustawić piny analogowe jako cyfrowe, tym samy będziemy mieć ich dodatkowo 6 sztuk – czyli oprogramujemy 2 cyferki… dlatego na kolejnych zajęciach (sobota) poznamy rozwiązanie tego problemu:

Rejestr przesuwny 74HC595 (ang. shift register)

Zajęcia nr 2 – 7xLED i bardzo szybki kurs programowania strukturalnego

Na naszych drugich zajęciach powiedzieliśmy sobie o:

  • czym są zmienne w programie?
  • ile pamięci (SRAM) zajmują zmienne? int = 2 bajty, float = 4 bajty
  • może zamiast deklarować zmienne, użyć #define – czyli słów kilka o preprocesorze
  • operator przypisania i niematematyczna konstrukcja a=a+10
  • skrócone operatory przypisania a+=10 (a także a-=10, a*=10, a/=2)
  • instrukcja warunkowa if 
  • grupowanie wielu instrukcji sterujących nawiasami sześciennymi { }
  • rozbudowana instrukcja warunkowa – if else
  • pętla for
  • tablice oraz operator [ ]
  • definiowanie wartości początkowych dla tablic – ponownie nawiasy sześcienne { } w innym kontekście!
  • obiekt Serial – trochę o programowaniu obiektowym… poznaliśmy metody print(), println(), read(), available(), parseInt()

Po tych zajęciach powinieneś znać:

  • orientować się w poruszanych zagadnieniach – dla mnie oczywistym jest, że nie sposób to opanować w 100% na naszych krótkim spotkaniu! tylko praktyka spowoduje, że zrozumiesz to, o czym była mowa (dlatego rozwiąż zadanie domowe)
  • podłączyć 3 (lub więcej) LEDów do Arduino i nimi sterować – nawet, jeśli masz problemy z pętlami (for) to jeszcze się tym nie przejmuj. Z czasem nabierzesz wprawy, o ile będziesz ćwiczyć

Praca domowa

Napisać program dla Arduino, który steruje 7-mioma LEDami. Diody mają zapalać się po wczytaniu numeru pinu (do którego podłączona jest dana dioda) z klawiatury. Dodatkowo, jeśli dioda się już świeciła – powinna zgasnąć. Pamiętaj, że do wczytywania liczb dwucyfrowych należy użyć metody Serial.parseInt(). Powodzenia! (Pamiętaj, że możesz mieć wirtualne Arduino u siebie w domu wchodząc na stronkę 123d.circuits.io i tam zapalać/gasić LEDy!)

Zajęcia nr 1 – co to te Arduino? prawdziwe + wirtualne Arduino!

Na naszych pierwszych zajęciach powiedzieliśmy sobie o:

  • Arduino – otwarta platforma (open-hardware)
  • serce Arduino – mikrokontroler (uC, MCU), czyli mikrokomputer jednoukładowy (pojedynczy układ scalony zawierający w sobie procesr, pamięć, interfejsy wejścia-wyjścia, kontrolery przerwań…)
  • rodzina platform Arduino (czyli nie tylko UNO!)
  • budowa i parametry Arduino UNO
  • Arduino? Genuino? czyli o „przyjaźni” założycieli i rejestracji znaków handlowych
  • IDE (Integrated Development Environment) – środowisko programistyczne
  • omówienie (przykładowego) programu Blink wraz z przykładem tego programu w prawdziwym C/C++ (dla zaawansowanych)
  • poznajemy płytkę stykową
  • wirtualne Arduino: 123d.circuits.io — dla tych, którzy już chcą, ale jeszcze nie zakupili płytki Arduino!
  • pierwszy program sterujący diodą! w wirtualu i w realu…

Ku pamięci:

plytka_stykowa-schematPlytkaPrototypowa

Po tych zajęciach powinieneś znać:

  • orientować się w budowie platformy Arduino (piny cyfrowe, piny analogowe)
  • rozumieć połączenia na płytce stykowej
  • rozumieć konieczność stosowania rezystorów podczas podłączania LEDów
  • budowę programów dla Arduino, w tym znaczenie funkcji setup() oraz loop()
  • funkcję ustawiającą piny cyfrowe do sterowania napięciem, czyli pinMode
  • funkcję włączającą napięcie 5V (HIGH) lub 0V (LOW) na konkretnym pinie, czyli digitalWrite
  • funkcję zatrzymującą działanie programu na określoną liczbę mikrosekund – czyli delay