Skocz do zawartości

Odświeżanie wyświetlaczy 7-segmentowych


Pomocna odpowiedź

W rozdziale 4.1 masz omówione sposoby pisania do wyświetlacza, widzisz to? W zasadzie jest to już znane Ci write, ale w kilku wersjach różniących się liczbą i typem argumentów. To kompilator wybiera której wersji akurat użyć na podstawie tego jak ją wołasz.

Jeśli w programie wstawisz:

displ.wite(123);

to podczas tłumaczenia tego kodu zostanie wybrana wersja pierwsza:

void write(long num);

bo ta najlepiej pasuje do tego co napisałeś. Twój argument w postaci liczby całkowitej zostanie przekazany do tej właśnie odpowiedniej wersji write() i wyświetlony.

Wywoływanie write z argumentami numerycznymi nie daje szansy zrobienia napisu - to chyba jasne. Wszystko co dostaniesz to będą cyfry, ew. z kropką dziesiętną. Trzeba więc znaleźć taką wersję, która przyjmuje tekst. Masz dostępne dwie wersje:

void write(char* str);

void write(String str);

Pierwsza obsługuje najprostsze, znane z C stringi zakończone zerem. Druga wciąga dużo wygodniejszy obiekt typu String.

Już coś świta czy mam pisać dalej?

Przez PM dowiedziałem się, że coś świta, ale powoli... No dobrze. Robisz tak:

char
  napis1[] = "ON ",
  napis2[] = "OFF";

displ.write(napis1);
tu jakieś opóźnienie..
displ.write(napis2);
itd..

Teksty muszą składać się z liter i cyfr pokazywalnych na wyświetlaczu 7-segmentowym. Nie wiemy co biblioteka zrobi gdy np. każesz wypisać jej "akuku" bo ani 'a' ani 'k' nie da się pokazać. Tak samo co robi gdy dużą literę 'E' (która jest ok) zastąpisz jej małą wersją 'e'. Może wypisze duże 'E' a może puste miejsce? Może też być tak, że w miejscu niemożliwych znaków autor biblioteki umieścił jakieś ciekawe symbole typu minus, znak równości itp, warto to sprawdzić. Zawsze możesz sięgnąć do kodu źródłowego biblioteki, znaleźć generator znaków - wielką tablicę z wyglądem wszystkich znaków - i wstawić definicje (bitmapy) swoich symboli w miejscu niepotrzebnych.

A znasz może inny sposób wyświetlania własnych znaków (zapalania odpowiednich sekwencji) oprócz tej biblioteki o ktorej pisze " ?? np zdefiniowanie tablicy i wybieranie odpowiedniego zakodowanego znaku w tej tablicy i wyswietlanie na odpowiednim miejscu ekranu (1,2 lub3 - mowimy o wyswietlaczu 3 elementowych)

Generator znaków jest tu zrobiony bardzo pociesznie (i niefektywnie). Cała masa instrukcji if umieszczonych na końcu pliku SevenSeg.cpp sprawdza czy otrzymany kod znaku to właśnie to. Przykład:

if(digit=='T'){
   digitalWrite(_D, _segOn);
   digitalWrite(_E, _segOn);
   digitalWrite(_F, _segOn);
   digitalWrite(_G, _segOn);
 }

Wystarczy, że dopiszesz coś swojego i masz własne symbole. Jeśli potrzebujesz trzech poziomych kresek, wstawiasz np. zamiast znaku gwiazdki:

if(digit=='*'){
   digitalWrite(_A, _segOn);
   digitalWrite(_D, _segOn);
   digitalWrite(_G, _segOn);
 }

I to by było na tyle.

  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...