Skocz do zawartości

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


Pomocna odpowiedź

Gość
2 minuty temu, H1M4W4R1 napisał:

Zmienne powinny być samodeskryptywne. W przypadku, gdy kogoś zatrudniamy w IT zmienne typu czy v w 99% powodują wyrzucenie CV do kosza.

Tyle że ja nigdzie nie pisałem iż szukam roboty w IT. To co robię jest 100% hobbystyczne.  Nazwy nazwami. O ile kod nie będzie przeznaczenia publicznego, to  powinno się używać takich nazw które wygodnie się czyta, analizuje oraz interpretuje. Im dłuższe nazwy zmiennych, tym wolniej to mulę. To co dla ciebie jest bardziej czytelne dla mnie tylko komplikuje sprawę, bo w pamięci przetwarzam wszystkie znaki nazwy zmiennej + jej wartość do której się odnoszą.  

 

32 minuty temu, ethanak napisał:

Ty naprawdę uważasz że świat się kończy na Windowsie?

To co mi po samej instrukcji skoro IDE jest pod linuxa? Może raz miałem zainstalowanego, ale nie przypadł mi do gustu. Nie chcę się na to przestawiać. 

Swoją drogą znalazłem takie coś; https://download.savannah.gnu.org/releases/avr-libc/

O tą instrukcję chodziło? Bo jeżeli tak, to jest tego od choroby i ciut ciut. Słabo się robi na start. 

Gość
30 minut temu, ethanak napisał:

w razie konieczności szukaj pomocy w lusterku.

W razie konieczności wstawię tylko to co nie działa. Po co od razu cały kod?

 

31 minut temu, ethanak napisał:

A kto powiedział że to IDE i że jest pod linuksa? Zacznij wreszcie myśleć. Sciągasz jakiś plik, nie wiesz do czego to jest ale burczysz że nie ma setup.exe i to na pewno pod linuxa. Jak ściągniesz epuba to masz tam jakiś setup.exe albo autoruna? Czyli Twoim zdaniem książki są tylko pod linuksa? Czy po prostu nie korzystasz?

Nie znam się na tym. Na razie pozostanę przy Arduino.

Avr-lib jest zbyt skomplikowane. To jest narzędzie dla wprawionych programistów którzy wiedza co i jak. Mi nie udało się tego nawet zainstalować. Rok temu ściągnąłem podobne IDE pod AVR. Było setupexe i wszystko normalnie się zainstalowało. Problem był taki, że nie wiadomo było jak z tego korzystać. 

Po pierwsze: jak wstawisz kawałek kodu z tymi swoimi zmiennymi to dostaniesz kawałek odpowiedzi.

Po drugie: masz się za takiego mistrza że będziesz wiedział że akurat ten kawałek działa źle, a nie ten co mu dane podaje? Megalomania to się nazywa.

Po trzecie: libc to są biblioteki standardowe, które masz na swoim dysku bo Arduino też z nich korzysta. Jeśli najprostsze funkcje (prostsze niż we frameworku Arduino) uważasz za jakieś super trudne i dostępne tylko dla super mistrzów - zajmij sie tymi swoimi klockami Lego. Trzy osoby Ci próbowały wyjaśnić, że mikrokontrolery to inny świat niż PLC. Nie dotarło? To zgłoś sie jak dotrze a na razie może zacznij się uczyć przynajmniej języka.

Chcę pomóc, ale jak się upierasz że wiesz lepiej to "lustereczko powiedz przecie kto jest najmądrzejszy w świecie".

  • Lubię! 1
Gość
(edytowany)

 

4 godziny temu, ethanak napisał:

Po drugie: masz się za takiego mistrza że będziesz wiedział że akurat ten kawałek działa źle, a nie ten co mu dane podaje?

Spokojnie. Na razie nie doszedłem do aż tak bardzo zawansowanych spraw. Na chwile obecną staram się robić kod kawałek po kawałku. Jak coś nie działa, to szukam błędów przy pomocy Serial.begin. 

 

4 godziny temu, ethanak napisał:

Po trzecie: libc to są biblioteki standardowe, które masz na swoim dysku bo Arduino też z nich korzysta. Jeśli najprostsze funkcje (prostsze niż we frameworku Arduino) uważasz za jakieś super trudne i dostępne tylko dla super mistrzów

Skoro te pliki zainstalowały się razem z Arduino, to teraz jak nazywa się brakujący plik który mam pobrać, albo gdzie się zainstalowało to avr-libc, bo może nie wiem że jest. 

4 godziny temu, ethanak napisał:

Chcę pomóc, ale jak się upierasz że wiesz lepiej

Tylko że sypiesz teoriami których nie ogarniam.  

Na razie skupię się na tym co mi działa. 

 

W ramach testów uruchomiłem taki moduł jak na zdjęciu. Niestety aparat mojego telefonu nie ogarnia multipleksacji i zdjęcie wyszło tak jak wyszło. Powinien być widoczny napis buttonS. 

 

4.thumb.jpg.e5287d1eaf68c6fa207c24d57e6ca375.jpg

uruchomiłem taką bibliotekę oraz podany w niej przykład;

#include <TM1638lite.h>

// I/O pins on the Arduino connected to strobe, clock, data
// (power should go to 3.3v and GND)
TM1638lite tm(6, 7, 8);

void setup() {

  tm.reset();

  tm.displayText("Eh");
  tm.setLED(0, 1);
  
  delay(2000);

  tm.displayASCII(6, 'u');
  tm.displayASCII(7, 'p');
  tm.setLED(7, 1);

  delay(2000);

  tm.displayHex(0, 8);
  tm.displayHex(1, 9);
  tm.displayHex(2, 10);
  tm.displayHex(3, 11);
  tm.displayHex(4, 12);
  tm.displayHex(5, 13);
  tm.displayHex(6, 14);
  tm.displayHex(7, 15);

  delay(2000);

  tm.displayText("buttons");
}

void loop() {
  uint8_t buttons = tm.readButtons();
  doLEDs(buttons);
}

// scans the individual bits of value
void doLEDs(uint8_t value) {
  for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, value & 1);
    value = value >> 1;
  }
}

Na razie jestem przy wstępnym rozeznaniu. Próbuję rozgryźć pętlę lop w której przycisk = LED. Później spróbuję zrealizować stoper na tym module. Jak się uda, to wrzucę gorszej jakości fotkę wyciętą z filmu, bo z aparatu to jest tak jak widać. 

P.S

Przeanalizowałem ten kod, i już wiem o co w nim chodzi. Kod porównuje nr. LED z 1 na & po przesunięciu wartości bitowej naciśniętego klawisza. Dla wartości &1 nr. LED jest równa nr. przycisku. 

Natomiast nie rozumiem jednej sprawy;

Po co autor tworzył drugą pętlę;

void loop() {
  uint8_t buttons = tm.readButtons();
  
  doLEDs(buttons);
}

// scans the individual bits of value
void doLEDs(uint8_t value) {
  for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, value & 1);
    value = value >> 1;
    
  }
}

Skoro można to było zamknąć w pętli głównej i też to działa;

void loop() {
  uint8_t buttons = tm.readButtons();  
  
 for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, buttons & 1);
    buttons = buttons >> 1;
    
  }
}

Tylko tego w tym wszystkim nie rozumiem.

Tak swoją drogą zanim całkowicie przestawię myślenie w kierunku operacji na bitach oraz przesunięciach, to pewnie minie trochę czasu. O ile działanie z jedynką jest proste, tak przy bardziej złożonych równaniach będę musiał raczej zainstalować jakiś kalkulator logiczny do szybkiego obliczania stanów binarnych.

P.S. 

Ten & w warunku dla LED też jest w sumie niepotrzebny, bo w końcu warunek sam z siebie jest spełniony jedynie dla wartości 1. 

Kod poniżej też działa poprawnie. (bez warunku &)

void loop() {
  uint8_t buttons = tm.readButtons();  
  
 for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, buttons);
    buttons = buttons >> 1;
  }
}

 Nie wiem czemu autor tak to skomplikował. Być może na innej Arduino ten warunek musi być. Natomiast u mnie wszystkie wartości powyżej 1 są traktowane jako false, tak więc & jest niepotrzebny.  

Edytowano przez rafal220
7 godzin temu, rafal220 napisał:

Skoro te pliki zainstalowały się razem z Arduino, to teraz jak nazywa się brakujący plik który mam pobrać,

Zauważasz drobną sprzeczność w tym zdaniu? Jak się zainstalował to dlaczego masz coś pobierać?

7 godzin temu, rafal220 napisał:

albo gdzie się zainstalowało to avr-libc

A do czego Ci ta wiedza potrzebna? Jak te swoje klocki Lego programujesz to rozbierasz każdy bloczek na kawałki żeby zobaczyć co ma w środku? Nie mam zielonego pojęcia gdzie to się u Ciebie zainstalowało, nie siedzę przy Twoim komputerze, mogę powiedzieć gdzie to siedzi u mnie ale wątpię czy to coś pomoże...

Nic nie instalujesz. Jeśli nie rozumiesz drugiego słowa w wyrażeniu "biblioteka standardowa" to wyjaśnię: to takie cóś co jest elementem języka i musi być dostępne w każdej chwili. Tak jak nie doinstalowujesz bloczka "digitalRead" czy "millis" bo to standardowe elementy Wiringa/Arduino.

I to nie są teorie które trudno zrozumieć... przynajmniej większości to specjalnej trudności nie sprawia.

Owszem, czasem trzeba wskazać plik nagłówkowy (o ile nie zrobił tego za Ciebie builder Arduino). Ale w dokumentacji masz podane jaki nagłówek  masz tam wrzucić. I tak np. aby użyć funkcji z sekcji stdio wpisujesz:

#include <stdio.h>

a dla makr ATOMIC (potrzebnych przy bardziej zaawansowanym operowaniu przerwaniami):

#include <util/atomic.h>

Tyle. 

9 godzin temu, rafal220 napisał:

u mnie wszystkie wartości powyżej 1 są traktowane jako false

A u wszystkich innych jedynie wartość równa 0 jest traktowana jako false. 

Ja się tylko tak zastanawiam przy czytaniu tego wątku, dlaczego @rafal220 nie przerobisz po prostu kursu arduino z forbota, dwa poziomy. Tydzień czasu. Chyba było by Ci odrobinę łatwiej. @ethanakCi tu jedzie printf-ami i stdio.h co nie ułatwia zrozumienia podstaw. Arduino jest dla podstawówki, dosłownie, to jest bardzo łatwe, ale zacznij od podstaw, potem dopiero odpalisz esp32 z wifi i fafnastoma akcesoriami.

Tyle że jeśli się jest w podstawówce to się rozwiązuje zadania z podstawówki (czyli zadania z kursu Arduino), z ewentualnymi prostymi (a w miarę nabierania doświadczenia już nie takimi prostymi) modyfikacjami. Jeśli ktoś od razu rzuca się na głęboką wodę to jakąś tam szalupą do niego podpływam...

A poza tym kolega stwierdził, że kurs przeczytał i ma go już za sobą - kolej więc na to czego w kursie nie ma, prawda?

Mówiłeś o printf (właściwie sprintf). Podejrzewam, że większość widząc ten kod zastanowiła się co to jest, zapytała, dostała odpowiedź, spróbowała jeszcze raz... Chyba tym razem trafiłem na mniejszość 🙂

A jeśli już wspomniałeś o ESP32 - wyobrażasz sobie jakiekolwiek sensowne programowanie bez choćby pobieżnej znajomości jednego z dwóch języków w jakich występuje ichniejsza dokumentacja? I to bez widocznej chęci poznania podstaw któregoś z nich? Bo ja nie.

Co do znajomości języka to zgoda, z małym ale. Ale żeby w dzisiejszych czasach narzekać na niemożność przetłumaczenia dowolnego tekstu? Serio? Czym innym jest faktyczne zrozumienie takiego tłumaczenia, bez znajomości podstawy podstaw języka i odrobiny doświadczenia, będzie tak jak autor pisze, nic z tego nie zrozumie.

Jeszcze raz polecam zająć się na początek zadaniami z kursu, a nie przesunięciami bitowymi i sprintf.

@ethanakTwoja szalupa uratowała już tu wiele osób, w tym mnie wielokrotnie, ale ma trochę za wysokie burty dla słabeuszy i strasznie chropowatą powierzchnię po której się wspina. Trzeba mieć grubą skórę lub inny sposób na to żeby sobie tej szalupy nie darować. Wielu niestety już się o tym przekonało, na szczęście ja i po drabince sznurkowej już wchodzić potrafię i skórę na rękach grubą mam;).

 

Gość
8 godzin temu, ethanak napisał:

A do czego Ci ta wiedza potrzebna? Jak te swoje klocki Lego programujesz to rozbierasz każdy bloczek na kawałki żeby zobaczyć co ma w środku? Nie mam zielonego pojęcia gdzie to się u Ciebie zainstalowało, nie siedzę przy Twoim komputerze, mogę powiedzieć gdzie to siedzi u mnie ale wątpię czy to coś pomoże...

Czyli generalnie powinno działać z poziomu Arduino IDE ? 

 

8 godzin temu, ethanak napisał:

I to nie są teorie które trudno zrozumieć... przynajmniej większości to specjalnej trudności nie sprawia.

To trzeba było od razu mówić, że ten opis tyczy się do standardowej biblioteki Arduino IDE.

 

8 godzin temu, ethanak napisał:

Owszem, czasem trzeba wskazać plik nagłówkowy (o ile nie zrobił tego za Ciebie builder Arduino). Ale w dokumentacji masz podane jaki nagłówek  masz tam wrzucić. I tak np. aby użyć funkcji z sekcji stdio wpisujesz:

 

8 godzin temu, ethanak napisał:

a dla makr ATOMIC (potrzebnych przy bardziej zaawansowanym operowaniu przerwaniami):

Nie można było tak od razu? Tylko biblioteki o których piszesz muszę sobie pobrać, bo u mnie nie ma tego w standardowych plikach pobranych razem z Arduino IDE.

 

7 godzin temu, jand napisał:

A u wszystkich innych jedynie wartość równa 0 jest traktowana jako false. 

Możliwe, że i u mnie tak jest. Wolną chwilą sprawdzę w ramach kursu, czy wartość powyżej 1 zaneguje mi wyjście.

 

7 godzin temu, SOYER napisał:

Ja się tylko tak zastanawiam przy czytaniu tego wątku, dlaczego @rafal220 nie przerobisz po prostu kursu arduino z forbota, dwa poziomy. Tydzień czasu. Chyba było by Ci odrobinę łatwiej. @ethanakCi tu jedzie printf-ami i stdio.h co nie ułatwia zrozumienia podstaw. Arduino jest dla podstawówki, dosłownie, to jest bardzo łatwe, ale zacznij od podstaw, potem dopiero odpalisz esp32 z wifi i fafnastoma akcesoriami.

To przecież cały czas siedzę na mega328 8bit. Podstawy analizuję na podstawie tego co przychodzi w zamówieniach. Nie lubię wpajać wiedzy krok po kroku, bo to jest mało efektywne. Po prostu realizuję założenia. Kursy na forbocie mają to do siebie, że nawet jak któryś przeskoczysz, to w razie W, wyszukiwarka przekieruje Ciebie na inny. 

6 godzin temu, SOYER napisał:

Jeszcze raz polecam zająć się na początek zadaniami z kursu, a nie przesunięciami bitowymi i sprintf.

No to przecież tak właśnie to idzie. Wyświetlacz z kursu #7 co prawda uruchomiłem po githubie, i wszystko poszło w miarę sprawnie. Teraz powstał kolejny wątek rozszerzający kurs #7 o bardziej efektywne wykorzystanie wyświetlacza. Skoro już jestem przy wyświetlaczach, to chcę to w miarę solidnie opanować zanim przejdę do kolejnego kursu.    

Nie standardowej biblioteki Arduino IDE (bo IDE to nie jest język).

Każdy program w C/C++ musi bezwzględnue mieć dostęp do standardowych bibliotek (libc,glibc,avr-libc czy cokolwiek). Pisałeś kiedyś że masz dużo lat to przypominsm, że C na Spectrum mialo dostęp do pewego podzbioru libc.

Każdy program używający Wiringa musi mieć dostęp do swoich funkcji. Jeśli jest to C/C++ to musi mieć dostęp do funkcji libc - to chyba normalrne.

Arduino to rozszerzenie Wiringa - czyli nasz dostęp do wszystkich funkcji Wiringa (np. millis czy digitalRead), oprócz tego *(ponieważ jest to C++) musi bezwzględnie akceptować libc czy (w przypadku  C++) std.

Pisałem i tym na początku, ale chyba czytałeś co drugie zdanie.

Poza tym: zanim przejdziesz do kolejnego etapu radzę wrócić do początku. Rozumiem, że znasz się na programowaniu tych klocków Lego, pewnie również pralkę potrafisz zaprogramować... ale tu wchodzisz w inną jakość i ani umiejętosc wyprania gaci, ani zbudowania domku z klocków nie pomoże.

I kolejny raz (jakbyś nie zrozumiał): my naprawdę chcemy pomóc. Ale daj szansę...

(edytowany)
22 minuty temu, ethanak napisał:

Pisałem i tym na początku, ale chyba czytałeś co drugie zdanie.

Zrozum, że dla początkującego takie teksty jak Ty tu wstawiasz to czarna magia jest, biblioteki, sprintefy, gibce, libce…

22 minuty temu, ethanak napisał:

Rozumiem, że znasz się na programowaniu tych klocków Lego, pewnie również pralkę potrafisz zaprogramować... ale tu wchodzisz w inną jakość i ani umiejętosc wyprania gaci, ani zbudowania domku z klocków nie pomoże.

Takie słowa są zabawne dla bardzo wąskiej grupy ludzi, generalnie zaś można je uznać za lekceważące w stosunku do rozmówcy. Ileż razy już powtórzyłeś ten bon mot o lego… Serio?

@ethanak chłopie kocham Cię 😍, serio, ale nie przystoi…

Edytowano przez SOYER
(edytowany)

@SOYER - przecież na początku mówiłem o podstawach. Poza tym stwierdziłem, że używanie słowa "PLC" jest w tym kontekście niedopuszczalne, zastąpiłem je "klocki Lego". Może tego nie rozumiesz, ale kolega od PLC raczej wie o co chodzi i chyba nie ma  specjalnych pretensji?

Takie pytanko - wiesz w ogóle co to PLC, jak się to programuje, i dlaczego porównałem do klocków? Jeśli nie... sam wiesz.

Edytowano przez ethanak
5 minut temu, ethanak napisał:

@SOYER - przecież na początku mówiłem o podstawach. Poza tym stwierdziłem, że używanie słowa "PLC" jest w tym kontekście niedopuszczalne, zastąpiłem je "klocki Lego". Może tego nie rozumiesz, ale kolega od PLC raczej wie o co chodzi i chyba nie ma  specjalnych pretensji?

Takie pytanko - wiesz w ogóle co to PLC, jak się to programuje, i dlaczego porównałem do klocków? Jeśli nie... sam wiesz.

Tak @ethanak wiem co to plc, wiem czemu do kloców porównujesz. Nie wiem, do czego Ci były te gacie potrzebne, pralka… Sam przeczytaj ten post, jak Ci to nie przeszkadza to świadczy tylko o Tobie.

Rozumiem sarkazm, żarciki, czy tu czy na czacie, ale odrobinkę się zapędzasz. Trochę szacunku do człowieka by się przydało. 

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