Skocz do zawartości

Dodatkowe ćwiczenia z wyświetlaczem 2x16 znaków


Pomocna odpowiedź

Ponawiam pytanie:

dlaczego tworzysz własną funkcję displaySS (która nie ma żadnego sensu) zamiast użyć displaySS z biblioteki? Dlaczego kombinujesz jak koń pod górkę?

Kur...

tm.displaySS(1,0xff);
tm.displaySS(2,0);

 

Gość
19 minut temu, ethanak napisał:

dlaczego tworzysz własną funkcję displaySS

Trochę ją zasugerowałeś;

12 godzin temu, ethanak napisał:

Hm...

    void displaySS(uint8_t position, uint8_t value);

Ciekawe do czego to służy...

 

Działa to, ale jak zrobię tak jak poniżej, to migocze znak bo jedno drugie nadpisuje.

#include <TM1638lite.h> // https://github.com/danja/TM1638lite

TM1638lite tm(6, 7, 8);

void setup() {}



void loop() {

tm.displaySS(1,0x3f);
tm.displaySS(1,0x80);

}

Tutaj nie ma znaczenia, bo znak mogę utworzyć jako jedną całość.

Sprawdzę czy będzie ok. jak dołażę kropkę do zmiennej.  

Gość

Wrzuciłem to przy zmiennej, ale jest to niestabilne. kropka miga jakby odliczała setne...

tm.displayHex(7, a1);
tm.displayHex(6, a2);
tm.displayHex(5, a3);
tm.displayHex(4, a4);
tm.displayHex(3, a5);
tm.displayHex(2, a6);
tm.displaySS(1,0x80);
tm.displayHex(1, a7);
tm.displayHex(0, a8);
}

 

Dalej bez sensu. Przecież displayCośtam wywołuje wewnętrznie displaySS, czyli natychmiast nadpisuje to co zrobiłeś. Dlatego kropka miga bo ją zapalasz a następna funkcja ją gasi.

 

Gość
Przed chwilą, ethanak napisał:

Dlatego kropka miga bo ją zapalasz a następna funkcja ją gasi.

To ja o tym wiem, dlatego na samym początku pisałem, że z tą biblioteką raczej się nie uda. W jednym polu można tylko wywołać jedną zmienną. To jest właśnie problem tych i innych wyświetlaczy, że zmienna odnosi się do całego znaku. Szkoda że nie ma jakiegoś polecenia które połączy dwie zmienne w tej samej wartości 0x.

Tak przy okazji masz może jakiś sprawdzony prosty kalkulator programisty? Bo przy tym M$ to mnie szlak zaraz trafi. Nie można przeliczyć np. 07, tylko 7. To samo w drugą stronę. Pierwszy bit zawsze musi wynosić 1. Nie da się przeliczyć na hex np. 000000010.

11 minut temu, rafal220 napisał:

z tą biblioteką raczej się nie uda

Po pierwsze: rozumiem że angielskiego można nie znać, ale biblioteka ma w nazwie słówko "tiny" co znaczy, że jest mała i obsługuje tylko podstawowe rzeczy.

Po drugie: nie uda się to parasola w d... otworzyć (chociaż zaraz przylezie @mkwiatkowski i stwierdzi że się uda, tylko potem ciężko wyjąć). Spróbuj czegoś takiego (pisane na kolanie, mogą być błędy, setupa i wszystko co przed loop to wiesz jak wsadzić):

void displayZnakZKropkomAlboBez(int pozycja, uint8_t znak, bool kropka=false)
{
    uint8_t z=ss[znak];
    if (kropka) z |= 0x80;
    tm.displaySS(pozycja,z);
}

void loop()
{
    displayZnakZKropkomAlboBez(1,'A',false);
    delay(1000);
    displayZnakZKropkomAlboBez(1,'A',true);
    delay(1000);
}

 

A co do kalkulatora programisty... czego potrzebujesz? Bo ja jeśli muszę przeliczyć jakieś większe wartosci hex-dec to po prostu uzywam konsoli pythona. Poza tym jeśli są jakieś pola bitowe to używanie dec nie ma snsu, a przy hex wystarczy zapamiętać reprezentację dwójkową 16 cyfr.

Gość
2 godziny temu, ethanak napisał:

a przy hex wystarczy zapamiętać reprezentację dwójkową 16 cyfr.

Ale jak masz tego więcej (wyświetlacze) to jest łatwiej wprowadzić piksele, czy też segmenty w postaci 0,1 oraz z kalkulatora odczytać wartość hex. To jest bez sensu w pamięci liczyć wszystkie wartości hex. Kalkulator M$ byłby spoko, bo też wszystko liczy do dużych wartości, tylko schrzanili go trochę. Pythona nie mam bo jest chyba płatny oraz trudniejszy niż c++.

Co do tej kropki, to mam taki błąd;

sketch_may07b:7:5: error: 'tm' does not name a type
     tm.displaySS(pozycja,z);
     ^~
sketch_may07b:8:1: error: expected declaration before '}' token
 }
 ^
exit status 1
'tm' does not name a type

Tego błędu nie znajdę, bo nie wiem o co biega w tym kodzie który przedstawiłeś. Czyli zmodyfikowałeś pętle setup tak aby była wywoływana za każdym razem kiedy w displayZnakZKropkomAlboBez pojawi się true? trochę tego nie ogarniam. 

No i co oznacza ten zapis;

3 godziny temu, ethanak napisał:
uint8_t z=ss[znak];
    if (kropka) z |= 0x80;

tworzysz zmienną "z" do której w działaniu if dodajesz kropkę binarnie poprzez |=, ale nie wiadomo co to jest to "ss" szukałem w necie i bardzo nie mogę znaleźć.  To co zrobiłeś w tych dwóch pętlach takie trochę jest zagmatwane.

Dlaczego w necie? Nie łaska spojrzeć do pliku nagłówkowego biblioteki? Wszystko trzeba za Ciebie robić?

A setup to miałeś sobie dopisać. Deklarację wyświetlacza też.

Weź się za ten kurs Arduino bo najprostszych rzeczy nie rozumiesz i potem wychodzą takie kwiatki. Na przykład jakich dwóch pętlach, nie wiem co piłeś ale masz podwójne widzenie.

No ale nic mnie już nie dziwi u kogoś, kto żeby dodać dwa do dwóch musi używać kalkulatora.

Gość
7 minut temu, ethanak napisał:

Dlaczego w necie? Nie łaska spojrzeć do pliku nagłówkowego biblioteki? Wszystko trzeba za Ciebie robić?

Bo to efekt robinia czegoś od tyłu do przodu. Ja rozumiem że wielu z mojego rocznika najpierw uczyło się czytania, a dopiero pisania. Mnie uczono pierw pisania później płynnego czytania. Z czytaniem bibliotek jest podobnie. Najpierw trzeba nauczyć się je pisać, by móc je czytać. Przynajmniej wiem już że te kropki "::" to wyprowadzenie zmiennej z biblioteki do kodu który się pisze. Problem w tym, że nie zawsze jest opisane co dana zmienna realizuje. Trzeba biegle czytać kod, a to jest już problem. Przynajmniej na start.

 

13 minut temu, ethanak napisał:

A setup to miałeś sobie dopisać. Deklarację wyświetlacza też.

  O deklaracji zapomniałem, a z tym setup, to myślałem, że zmieniłeś nazwę pętli. 

14 minut temu, ethanak napisał:

Na przykład jakich dwóch pętlach, nie wiem co piłeś ale masz podwójne widzenie.

Nie no  jak dopisałem oddzielną pętlę setup, to teraz jest ok.

#include <TM1638lite.h> // https://github.com/danja/TM1638lite
TM1638lite tm(6, 7, 8);

void setup(){}

void displayZnakZKropkomAlboBez(int pozycja, uint8_t znak, bool kropka=false)
{
    uint8_t z=ss[znak];
    if(kropka) z |= 0x80;
    tm.displaySS(pozycja,z);
}

void loop()
{
    displayZnakZKropkomAlboBez(1,'A',false);
    delay(1000);
    displayZnakZKropkomAlboBez(1,'A',true);
    delay(1000);
}

 

16 minut temu, ethanak napisał:

No ale nic mnie już nie dziwi u kogoś, kto żeby dodać dwa do dwóch musi używać kalkulatora.

Tyle, że trzeba to najpierw dodać a później podzielić przez 16 i dodać resztę aby z 0,1 uzyskać wartość hex. No jak tak szybko w pamięci nie liczę. Jakby było tego trochę więcej, to pół dnia bym przesiedział nad zapisaniem pikseli 0,1 w formie hex.  

Teraz musze pomyśleć jak ten kod wykorzystać, abym zamiast 'a' mógł wstawić zmienną do kodu w tym stoperze.  Na razie jest git, tylko problem w tym że jeszcze trochę minie czasu zanim sam to zacznę ogarniać w co zaczynam trochę wątpić. 

Żeby pisać biblioteki (nie tylko zresztą) trzeba najpierw znać język w którym to się pisze. Rozumiem, że najpierw napisałeś Pana Tadeusza a potem go przeczytałeś?

A języka (przynajmniej podstaw) możesz się nauczyć z kursu Arduino. Choćby po to, żeby nie pisać bzdur typu "pętla setup". 

Ale jak nie chcesz to nie - tylko więcej nie zawracaj ludziom głowy problemami typu "nie wiem". Nikt za Ciebie nie będzie kursu kończył. Jeśli nie zrozumiesz czegoś co bylo w kursie - każdy chętnie pomoże. Ale powtarzanie pietnasty raz że to jest w kursie powoli staje się nudne.

Gość
12 minut temu, ethanak napisał:

Choćby po to, żeby nie pisać bzdur typu "pętla setup". 

Myślałem że wszystko co zawiera składnię void xxx (){} jest pętlą. A setup traktuję tak jak pętlę która wykonuje się tylko jeden raz po uruchomieniu do czasu spełnienia wszystkich warunków które są w niej zawarte. Może nazewnictwo trochę porypałem. Sam kurs aktualizuję o zadania wraz z gadżetami które przychodzą. 

Na razie próbuję rozgryźć ten wyświetlacz. I wątpię, że ktoś na moim miejscu nawet po wstępnym kursie wyczarowałby tą kropkę na wyświetlaczu. Teraz myślę jak zrobić, żeby to działało razem ze zmienną wejściową. Analogicznie wstawiłem inne zmienne do kodu z biblioteki. No i analogicznie rzecz jasna to nie działa. Nie ma błędów, ale coś pochrzaniłem.  

#include <TM1638lite.h> // https://github.com/danja/TM1638lite
TM1638lite tm(6, 7, 8);

void setup(){}

void displayZnakZKropkomAlboBez(int pozycja, uint8_t znak, bool kropka=false)
{
    uint8_t z=hexss[znak];
    if(kropka) z |= 0x80;
    tm.displayHex(pozycja,z);
}

void loop()
{
  int a = 5;
    displayZnakZKropkomAlboBez(0,a,true);
    delay(1000);
    displayZnakZKropkomAlboBez(1,a,false);
    delay(1000);
}

Teoretycznie powinna być liczba 5 z kropką, a druga bez kropki. Te biblioteki nie są takie proste jakby się wydawało. Do tego jest jeszcze możliwość sterowania jasnością wyświetlacza, tylko trzeba wiedzieć który kawałek kodu wyciągnąć z innej biblioteki odpowiadający za tą funkcję. Ta biblioteka jest najprostsza ze wszystkich w obsłudze, ale autor trochę ją nie dokończył. A przecież dużo nie brakuje. Może Ty to przerobisz jak należy i wstawisz na stronę oficjalną? Te wyświetlacze są fajne i dość popularne.  

(edytowany)
1 godzinę temu, ethanak napisał:

Żeby pisać biblioteki (nie tylko zresztą) trzeba najpierw znać język w którym to się pisze. Rozumiem, że najpierw napisałeś Pana Tadeusza a potem go przeczytałeś?

A języka (przynajmniej podstaw) możesz się nauczyć z kursu Arduino. Choćby po to, żeby nie pisać bzdur typu "pętla setup". 

Ale jak nie chcesz to nie - tylko więcej nie zawracaj ludziom głowy problemami typu "nie wiem". Nikt za Ciebie nie będzie kursu kończył. Jeśli nie zrozumiesz czegoś co bylo w kursie - każdy chętnie pomoże. Ale powtarzanie pietnasty raz że to jest w kursie powoli staje się nudne.

Jednak zgadzam się z @rafal220, ktoś kto nie umie napisać prostego szkicu, kto nie zna podstaw, to nijak nic nie wyciągnie z plików nagłówkowych.

To tak jakbyś komuś kto chce uczyć się chińskiego(mandaryńskiego?) dał chiński podręcznik ich ojczystego języka. Bez sensu.

Co do Rafałowej „pętli SETUP” itp, racja, forbotowy kurs arduino jest świetny na początek.

Edytowano przez SOYER
Gość
(edytowany)
37 minut temu, farmaceuta napisał:

I co znajduje się w tablicy hexss[]?

Wiesz, @ethanak zrobił łatkę do biblioteki (na razie łatka jak widzisz działa w oficjalnym kodzie). Jest dobrze, ale kiedy do tej łatki wstawiłem inne zmienne z biblioteki, to nie za bardzo. Chciałbym aby do wyświetlanej zmiennej dorobić kropkę na wyświetlaczu. @ethanak wyczarował, że kropka działa na razie z samymi znakami ASCII z biblioteki.  

23 minuty temu, SOYER napisał:

Co do Rafałowej „pętli SETUP” itp, racja, forbotowy kurs arduino jest świetny na początek.

Po prostu ktoś gdzieś na jakimś forum czy YT tak to nazwał; Pętla która wykonuje się tylko raz podczas uruchomienia i tak mi utkwiło w pamięci.

P.S.

Zapamiętam, ze to funkcja.

Edytowano przez rafal220

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...