Skocz do zawartości

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


Pomocna odpowiedź

Gość
16 minut temu, farmaceuta napisał:

A tak w ogóle to najlepiej zmienić bibliotekę niż kombinować z ascii

pytanie na jaką?

17 minut temu, farmaceuta napisał:

jakie mają być największe wartości liczbowe??

No w jednym segmencie nie wyświetlisz więcej jak 9 (pomijając A,B,C,D,E,F)

10 minut temu, rafal220 napisał:

Przynajmniej na początku wole jakieś krótkie nazwy

 

Jak zmiennych będzie kilkaset to swoje krótkie nazwy możesz wiesz co i gdzie. Ja wiem, że w klockach Lego miałeś pięć nazw na krzyż ale tutal 50 to taka niewielka ilość.

Poza tym jakoś nie zauważyłem, aby ktoś poza Tobą wolał nieznaczące nazwy.

Przykładowo według Ciebie:

T - czas w miilisekundach

T1 - moment rozpoczęcia procedury 1

T2 - moment zakończenia procedury B

T3 - czas w milisekundach jakiegoś innego zdarzenia

T4 - moment rozpoczęcia procedury 2

T5 - czas nieaktywności wejścia 1

T6 - czas nieaktywności wejścia 2

T7 - moment zakończenia procedury 2

I tak dalej przy 10 procedurach 😉

Tak byś chciał?

Poza tym tak już kiedyś było... język FORTRAN, zmienne zaczynające się od I,J,K,L,M,N były INTEGER, od pozostałych REAL. Wygodne było niesamowicie, tyle że w efekcie stosowania takich dupereli sonda wenusjańska przeszła parę milionów kilometrów od celu.

Może więc zachowaj swoje dwuliterówki na własny użytek (albo na forum programistów klocków Lego), a tu ich nawet nie pokazuj.

 

 

16 minut temu, rafal220 napisał:

Czekam z niecierpliwością.

 

Przynajmniej na początku wole jakieś krótkie nazwy

T - micros,

TT - millis,

Di - digital inputs,

Do digital outputs,

Ai -  analog inputs

a - zmienna analogowa, d - zmienna cyfrowa 0/1,  t - zmienna czasu, txt - zmienna char/ string itp. Tak mi jest łatwiej przynajmniej na chwile obecną. 

I tu się bardzo myślisz... załóż się ze mną że za miesiąc nie będziesz wiedział co to "TT"...pamiętaj że millis może się odnośic do różnych zmiennych...np. pięciu, i co wtedy? Będziesz je nazywał "TT1" "TT2" "TT3" i tak dalej? Takie "literowanie" zmiennych to straszny błąd...

krótkie nazwy są dobre w funkcjach dla zmiennych lokalnych, lub jako iteratory w pętlach np: często spotykane 

for(int i = 0; i < 100 ; i++)
{
  printf("i = %d\n",i);
}

a w twoim stylu pisania i nazywania zmiennych to oczopląsu można dostać, zmienna już po nazwie powinna sugerować swoje przeznaczenie, tak samo nazwy funkcji. Ucz się dobrych nawyków od początku, wierz mi to zaprocentuje w przyszłości

Gość
13 minut temu, farmaceuta napisał:

pamiętaj że millis może się odnośic do różnych zmiennych...np. pięciu, i co wtedy?

tworzysz podzmienne "t1 - tn". Nie mieszaj globalnych zmiennych np. "TT" z wynikowymi "t" Nikt nie powiedział że cały program musisz polecieć od "t1 - t200", możesz dzielić z dopiskami np. "t20_t1" kontynuując dalej swój program. Z czasem może przywyknę do Arduino. Jednak chciałem zaznaczyć w odniesieniu do PLC, że te "klocki lego" nie są takie proste do poukładania, kiedy robi się ich więcej niż kilkaset.  W C jest prościej o ile w miarę ogarniesz jego składnię.

20 minut temu, farmaceuta napisał:

Takie "literowanie" zmiennych to straszny błąd...

Zapraszam do świata klocków lego. Jak będziesz mieć ponumerowane zmienne chociażby od 1- n , to będzie pół bidy. 

Gość
4 minuty temu, _LM_ napisał:

Ucz się dobrych nawyków od początku, wierz mi to zaprocentuje w przyszłości

Tak zamierzam. Na razie przyzwyczajam wzrok, bo kiedy widzę takie nazwy "displayZnakZKropkomAlboBez" to tyle samo czasu zajmuje mi przeczytanie tego, co analiza działania w tej nazwie zawarta.  

Prościej by było; AHCII_dp // wyświetl AHCII z warunkiem dla dp.

Co też może znaczyć nazwa t12_x5...

Chciałbym zaznaczyć, że programy w C miewają po kilkanaście, czasem kilkadziesiąt tysięcy linii. Tak, tysięcy. I bez znaczących nazw raczej trudno byłoby zrozumieć o co chodzi.

(edytowany)

AHCII_dp... czy to tylko mi się tak brzydko kojarzy? A funkcję tak nazwałem bo prułeś się oTstart i Tend że są po angielsku no to dostałeś po polsku.

Zaraz... AHCII_dp to przecież "duplicated pointer to ahci instalation".

No bo normalny człowiek raczej by użył ASCII - ale kto tam wie czego oni w tych klockach używają...

Edytowano przez ethanak
Gość
1 minutę temu, ethanak napisał:

Chciałbym zaznaczyć, że programy w C miewają po kilkanaście, czasem kilkadziesiąt tysięcy linii. Tak, tysięcy. I bez znaczących nazw raczej trudno byłoby zrozumieć o co chodzi.

To nawet w klockach lego nie ma tak, że wszystko masz wyłożone na jedną stronę, tylko tworzysz podbloki o tzw. deklarowanych nazwach zmiennych. Ja nie mówię, aby cały program od góry do dołu polecieć ciągnącą się wartością monolitycznych zmiennych. Po prostu co ileś linijek kodu tworzysz zmienne wyjściowe/ wejściowe które możliwie najkrócej opisujesz. W opisie możesz podać przeznaczenie dla przypomnienia. Przynajmniej ja tak robiłem.

Zresztą jak masz kilka tyś. linijek kodu, to przecież możesz to możliwie optymalizować? To tak jakbyś miał 30 bibliotek w kodzie i wszystkie wypakował. Również zrobi się od groma kodu i bałagan. W PLC zaznaczasz to co chcesz spakować i naciskasz zwijanie. W C nie ma takich udogodnień, tylko musisz napisać bibliotekę. Nie ma tak, że zaznaczasz 100 linijek kodu w których zadeklarowałeś zmienne wyjściowe i zmienne wejściowe, naciskasz alt + z, i Ci się z automatu pojawia u góry  #include pod wymyśloną nazwą x. W PLC tak właśnie zawijasz kod w postaci bloków i tak działa to uproszczenie.  Z n kloców robisz jeden klocek. 

 

5 minut temu, ethanak napisał:

Zaraz... AHCII_dp to przecież "duplicated pointer to ahci instalation".

ASCII. Już to się plącze tyle tych skrótów. 

20 minut temu, rafal220 napisał:

Zapraszam do świata klocków lego. Jak będziesz mieć ponumerowane zmienne chociażby od 1- n , to będzie pół bidy. 

Tylko że w programowaniu często jest tak że to właśnie po przeznaczeniu zmiennych wiesz co robi dana funkcja/pętla...gdyby nie były jakoś logicznie nazwane to pół roku musiał byś sprawdzać co to jest żeby całość zrozumieć...kiedy po 4'ro miesięcznej przygodzie z Arduino napisałem kod na tysiąc linii...wtedy jeszcze nie posługiwałem się tablicami/strukturami/funkcjami z argumentami, etc...dziś wiem sto razy więcej niż wtedy, ale Ci powiem że jak bym miał "to coś" dziś analizować lub przerabiać, to odrazu kasuje to dziadostwo i piszę po ludzku, używając normalnych nazw (w tym kodzie też mi sie wydawalo że nazywanie zmiennych literami to tak fajnie, szybko bez "niepotrzebnego" wymyślania nazw dla kolejnej zmiennej która robi cos podobnego niż inna) 

I naprawdę nie odbieraj tego że to jakiś atak na Ciebie...nic z tych rzeczy! Ja to tam guzik potrafię, ale tych dwóch panów powyżej to już potrafi i jak Ci kilku mówi że źle myślisz to tak jest...

Gość
(edytowany)
11 minut temu, farmaceuta napisał:

I naprawdę nie odbieraj tego że to jakiś atak na Ciebie...nic z tych rzeczy! Ja to tam guzik potrafię, ale tych dwóch panów powyżej to już potrafi i jak Ci kilku mówi że źle myślisz to tak jest...

Przecież ja tego nie kwestionuję, bo wiem jak to działa. W PLC bardzo często, a w zasadzie zawsze nie chciało mi się czegokolwiek opisywać. Nawet t1, a1 itp. (kompilator przypisał jak mu wygodnie)  Zgadnij jak było fajnie jak po dwóch latach, kiedy trzeba było wprowadzić drobna korekcję/ zmianę w programie? Dobrze, że to była tylko kosmetyka. Reszty nie chciałbym dotykać. Teraz mam zamiar to robić jakoś po ludzku, ale nie wymyślając tysiące nazw w miejscach w których nie mają żadnego uzasadnienia, a w czym też się idzie pogubić. 

Edytowano przez rafal220
Gość

@farmaceuta Tak dla uzupełnienia mogę dodać, że praktycznie w ogóle nie wszedłbym w świat PLC, gdyby pewien facet nie wymyślił (moim zdaniem) profesjonalnego oprogramowania jak na tamte czasy w zakresie PLC. Środowisko miało się rozwijać podobnie jak Arduino pozyskując nowych programistów w zakresie aktualizacji bazy danych mikrokontrolerów jak i użytkowników. Ale trochę gościowi nie pykło, chociaż moim zdaniem zrobił dzieło do którego nie umywa się tamtejszy PCnet estool i inne. Coś podobnego widziałem na szkoleniu w Emersonie za grube dolary, a on puścił w eter zje... fajny silnik graficzny za free. Oczywiście bajka trwała tylko 3 lata, i facet się poddał. Powiem szczerze, że kiedy patrzę na te współczesne klocki lego, to tracę chęci od samego widoku. Może i dużo potrafią, ale sposób implementacji grafiki nie pozwala na zbyt dużo. Wolę już Arduino.  

@rafal220 no Arduino na duzo pozwala ..naprawdę można robić setki fajnych rzeczy...to ja z kolei nie wziął bym się za Arduino gdyby nie modelarstwo w którym ciągle przewijało się magiczne słowo "Arduino" na którym było dużo różnej maści osprzętu do modeli...funkcje biblioteczne Ardu też bardzo ułatwiają start...ja jak zobaczyłem pierwszy raz przykładowy kod naArdu to się przestraszyłem i dwa lata tematu unikałem 😉 ale w końcu się przełamałem i dzis jestem zadowolony bo zawsze coś tam mogę sobie sam zrobić z czego jest wielka satysfakcja 👍 

Gość
15 minut temu, farmaceuta napisał:

ja jak zobaczyłem pierwszy raz przykładowy kod naArdu to się przestraszyłem i dwa lata tematu unikałem

Ja się przełamałem po kilku lekcjach na forbocie. Na elce jakoś tak to szło, że wszystko jest proste i łatwe dla wszystkich, tylko nie dla mnie. (może kiepska motywacja?) Oczywiście nie mówię że od razu zrobię tu duży skok z migającego LED do pojęcia kodu bibliotek, ale z czasem kto wie...

Na chwilę obecną mogę uznać za zaliczoną lekcję na słabą truję z obsługi DS18B20. Natomiast nie zaliczyłem zadania z obsługi wyświetlacza 2x16 (przesyłanie zawartości za jednym odświeżeniem), oraz tego obecnego z wyświetlaczem 8x7seg. (brak umiejętności swobodnego wyświetlania dowolnych znaków dowolnymi zmiennymi)

A na horyzoncie kolejna masakra. Obsługa LED WS1228

O ile pierwszy wyświetlacz 16 LED jakoś przebrnę z pomocą kursu, to kolejny 8x8 będzie już gorszy. Docelowo obsługa całego ekranu składającego się z x modułów 8x8. Te pierwsze zadania z wyświetlaczami których nie zaliczyłem były tylko na rozgrzewkę.

     1.thumb.jpg.0cda6dbca60788dedc5bf4aee159aef5.jpg

to co u góry będzie gorsze. 

Gość

No to problem kropki mam już opanowany.

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

TM1638lite tm(6, 7, 8);

uint8_t sw1 = 0; // start
uint8_t sw2 = 0; // stop
uint8_t sw3 = 0; //reset

unsigned long TT = 0; unsigned long t0 = 0; unsigned long t1 = 0;

byte a0 = 0; byte a1 = 0; byte a2 = 0;
byte a3 = 0; byte a4 = 0; byte a5 = 0;
byte a6 = 0; byte a7 = 0; byte a8 = 0;

uint8_t a[] = {'0','1','2','3','4','5','6','7','8','9'};

void setup() {
  
tm.reset();

tm.displayText(" rAFAL");

delay(1000);
tm.reset();

tm.displayText("ForboTPL");
delay(1000);
tm.reset();

}

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

 
 
uint8_t SW = tm.readButtons(); // SW1 - SW8

TT = millis();

if (SW == 1 || sw1 == 1) {t1 = TT - t0; sw1 = 1; sw2 = 0;}  // Stoper start 
else {t0 = TT - t1;}                                         

if (SW == 2 || sw2 == 1) {sw1 = 0; sw2 = 1;} // Stoper stop

if (SW == 4) {sw1 = 0; sw2 = 0; t1 = 0;}    // stoper reset   

 

a1 = (t1 / 10) % 10;
a2 = (t1 / 100) % 10;   // setne

a3 = (t1 / 1000) % 10;            
a4 = (t1 / 10000) % 6;  // sekundy 

a5 = (t1 / 60000) % 10;
a6 = (t1 / 600000) % 6;   // minuty

a7 = (t1 / 3600000) % 10;
a8 = (t1 / 36000000) % 10;  // godziny


tm.displayHex(7, a1);
tm.displayHex(6, a2);
ascii_dp(5,a[a3],true);
tm.displayHex(4, a4);
ascii_dp(3,a[a7],true);
tm.displayHex(2, a6);
ascii_dp(1,a[a7],true);
tm.displayHex(0, a8);
}

Wystarczyło zastosować konwersję cyfry na znak ascii. Co prawda pomysł kolegi @farmaceuta ale kod sam dopisałem. Pozostaje jeszcze kwestia regulacji jasności wyświetlanych cyfr. Inne biblioteki takową umożliwiają. 

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