Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 4 maja 2025, o 21:08


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
    Autor Wiadomość
    PostNapisane: 30 lis 2017, o 09:30 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Witam i pozdrawiam wszystkich.

    Ostatnio przerabiałem poradnik Pana Mirka odnośnie scrollowania tekstu w poziomie na wyświetlaczu lcd ze strony
    http://mirekk36.blogspot.com/2013/07/lc ... owego.html

    Zmodyfikowałem pliki do obsługi wyświetlacza zgodnie z opisem i wszystko działa doskonale. Pobawiłem się trochę tym zagadnieniem
    i dodatkowo napisałem mały kodzik do przesuwania tekstu za pomocą jednego przycisku. Wykląda to tak:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Każde przyciśnięcie powoduje przesuwanie tekstu o jedną kolumnę w prawo do momentu całkowitego schowania i następnie
    pojawienie się od lewej znak po znaku.

    Chciałbym zrobić podobnie w pionie. Mam np. cztery linijki tekstu i wyświetlają się oczywiście dwie, a pozostałe dwie są ukryte.
    Chciałbym przewijać tekst w pionie podobnie, jak robię to w poziomie. Proszę o pomoc, jak to można zrobić w praktyce.
    Dzięki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lis 2017, o 11:57 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Witam kolegę Dambo.
    Dzięki za odpowiedź. Napisałem taki kawałek kodu. Przesuwanie tekstu w pionie mi działa z jedną linią. Przycisk powoduje przechodzenie
    tekstu po wierszach w pętli. W poprzedniej wersji wiersz się nie zmieniał. Inkrementowałem tylko kolumnę i było proste dla mnie.
    W tym przypadku muszę wyświetlić jednocześnie wszystkie wiersze, po naciskaniu guzika muszę je przewijać jednocześnie i nie
    mogę załapać, jak to ugryźć. Pewnie nie jest to skomplikowane, ale mam jakaś pomroczność ciemną :lol:


    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lis 2017, o 12:18 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Dzięki Dambo.
    Oczywiście mam metodę na osiągnięcie celu chociażby na switch and case. case 0 wyświetl linia 1,2,3,4, case 1 wyświetl linia 2,3,4,5,
    case......itd i przyciskiem jadę do góry, a drugim jadę w dół, ale nie tak chcę to wykonać. Chciałbym uczyć się bardziej ambitnych
    kodów, mniej pamięciożernych, a to jest chyba najbardziej łopatologiczna metoda.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lis 2017, o 12:37 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Dzięki wielkie.
    Przeanalizuję temat i jak coś się uda, to napiszę i zamieszczę. A może jeszcze ktoś ma jakiś pomysł ?.

    Analizuję temat z BB, ale na tą chwilę stanąłem w miejscu z braku czasu. Wrócę do tematu lada moment.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2017, o 08:30 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Poczytałem w BB to, co kolega Dambo sugerował, ale szczerze się przyznaję bez bicia, że trochę trudne i napisałem "łopatologicznie"
    kod, dzięki któremu osiągnąłem zamierzony cel. Oczywiście będę drążył temat, ale na ta chwilę zrobiłem,jak niżej.


    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Można zrobić przewijanie 2 razy po cztery linijki i są tylko dwa przyciśnięcia klawisza, ale chciałem, a żeby było przewijanie tekstu
    jakby po linijce, dlatego tak napisałem. Proszę niech się osoby wypowiedzą, czy to totalna porażka w pisaniu chyba bardzo prostego
    programu (można by pewnie o wiele krócej), czy jest do przyjęcia. Tablice przerobię do flasza. Kod zawiera fragmenty z innych
    postów na tym forum, a obsługa przycisków z blogu Mirka.
    Chciałbym jeszcze i tu prośba do kolegów zrobić tak,że jak na przykład linia char screen_3[] = " 3.Text nr 3 "; znajdzie się
    na pozycji lcd_locate(2, x), czy dowolna inna linia na konkretnej pozycji lcd (0-3) to przyciskając jakiś kolejny przycisk wykona
    się dowolna instrukcja (np. zapalenie diody led). Nie wiem, jak zacząć.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2017, o 12:38 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Heja.
    Dzięki dambo za pokazanie innej metody na wykonanie tego działania. O ile mniej na ekranie :) . Sprawdziłem oba przypadki i na przykład w Twoim zajęcie programu = 2284 bytes i
    DATA 205 bytes, natomiast w moim przypadku zajęcie programu = 2478 (czyli więcej) i DATA = 189 bytes (czyli mniej). Zmieniłem również _ILOSC_POZYCJI z 5 na 8. Piszę to w celach poznawczych
    i czysto dydaktycznych, ale pewnie któregoś dnia zastosuje w jakimś małym projekcie. Zastanawiam się nadal, jak rozwiązać sprawę wykonywania jakichś przydzielonych działań w zależności od tego,
    gdzie w danym momencie znajduje się wybrana linia tekstu. Załóżmy, że ustalamy sobie czysto hipotetycznie wiersz, który jest jakby nadrzędny w stosunku do innych. Niech to będzie
    powiedzmy drugi wiersz i dowolna kolumna (1, x). Teraz kiedy przewijam wiersze w dowolnym kierunku i zatrzymuję się na jakimś wybranym tekście (pozycja (1, x) oczywiście), to po po wciśnięciu
    przycisku następuje np, zaświecenie diody led (działanie przypisane temu tekstowi). Po odjechaniu z tym tekstem w górę lub w dół informacja jest nadal pamiętana, czyli dioda świeci nadal, a ja
    przewijam na pozycję (1, x) z kolejnym tekstem i ponownie coś tam uruchamiam przyciskiem. Jak by tu zacząć. Nie mogę ruszyć z miejsca. Może ktoś zaświeci światło w tunelu ? :lol: .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2017, o 13:54 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Witaj dambo.
    Jak testowałem zaraz po wgraniu kodu, to przewijanie nie było właściwe. Jak wstawiłem liczbę 8 (tyle jest wierszy i wyświetlacz cztery linie), to jest ok. wyświetlanie polega w moim przypadku tak,
    że przy starcie, na lcd są screen 1,2,3,4. Przyciśnięcie "scrolling_up" powoduje wyświetlenie screen 2,3,4,5, kolejne przyciśnięcie 3,4,5,6,.... , 4,5,6,7...., 5,6,7,8 i dalej nie idzie. Potem przycisk
    "scrolling_down" i odwrotna sekwencja.

    Kiedy podstawię "5", to jest dokładnie tak:

    Po odpaleniu wyświetla linie 1,2,3,4. Pierwsze wciśnięcie jest: 2,3,4,5 drugie wciśnięcie jest: 3,4,5,1 trzecie wciśnięcie jest 4,5,1,2 czwatre wciśnięcie jest 5,1,2,3 i dalej nie idzie.
    Przy "8" działa dobrze. :?:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 gru 2017, o 20:33 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Hej dambo.
    Nie ma co pisać sorki. To ja dziękuję za chęć pomocy. przy okazji, to nie masz jakiejś wskazówki, jak się zabrać za temat dwa posty wcześniej ?
    A może jeszcze ktoś ma jakiś pomysł ?. dzięki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2017, o 07:38 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Witam wszystkich.
    Chciałem pójść trochę dalej z programem i napisałem kod, który nie chce działać w 100% tak, jak bym tego oczekiwał. Mam dwa ekrany zmieniane przyciskami
    góra i dół. W pierwszym ekranie wyświetlają się teksty 1-4, a w drugim 5-8. Dodatkowo mam cztery przyciski, które są jakby "przyporządkowane" czterem
    linijkom. Chciałem, a żeby przyciśnięcie któregoś z przycisków zmieniało stany portu C (zapalają się diody) i tak też się dzieje. Jest tylko jeden problem, że kiedy
    jestem w ekranie 1-4, to na przykład przycisk nr1 ustawia PORTC = 0b00000001;
    Kiedy jestem w ekranie 5-8, to ten sam przycisk nr1 ma np. ustawić PORTC = 0b00000110;
    Jest tu chyba konflikt i program się wykrzacza, tzn. nie zawsze ustawia port zgodnie z założeniem.
    Sądziłem, że jeżeli jest case 0 i case 1, to będzie wszystko działać prawidłowo, a tu zonk. Proszę szanownych kolegów o jakieś wyjście z sytuacji, ponieważ
    nie wiem, jak to dalej zadziałać.

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2017, o 19:52 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Czy na prawdę nie ma nikogo, kto zechciałby pomóc i ewentualnie zasugerować, jak sobie z tym poradzić ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2017, o 20:43 
    Offline
    Użytkownik

    Dołączył(a): 24 kwi 2013
    Posty: 454
    Pomógł: 30

    Możesz w obsłudze klawisza wybierać switchem jaka funkcja ma być uruchomiona przez przycisk, w zależności od położenia menu.

    Choć zwykle robi się to w oparciu o tablice struktur, w których są zmienne i wskaźniki na funkcje.
    W GB masz sporo o wskaźnikach np. w rozdziale o UART.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 gru 2017, o 16:57 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Dzięki kol. ciamciak za odpowiedź na mój post.
    Ale czy ja nie robię dokładnie tego, o czym piszesz ? Przy case 0 przyciskiem ustawiam jakiś tam stan portu, a przy case 1 tym samym przyciskiem ustawiam
    inny stan tego samego portu. Wiem, że można z tablicami. Kol. dambo pokazywał, jak to się robi, ale w tym przykładzie akurat zastosowałem tą metodę.
    Oczywiście ja sam sobie tak to wymyśliłem, co nie znaczy, że to ma działać, dlatego zapytałem forum. Myślałem, że jeśli instrukcje zmiany stanu portu
    są jakby "odseparowane" w różnych case (case 0, case 1, case 2. itd.....), to program będzie działał, pomimo tego, że raz przycisk nr1 ustawia por np. 00000001,
    a w innym przypadku ( kolejne case ... ) np. 00001110. Niestety jest tak, że dwa, trzy razy przełączy prawidłowo, a potem przycisk przestaje reagować.
    Zachowuje się to przypadkowo i nieprzewidywalnie.

    Przepraszam. Trochę szybko odpisałem bez przemyślenia. Chodzi Tobie o obsługę przycisku, a nie powiedzmy obsługę menu. Trochę mi się lampka zapala, ale
    czy mógłbyś podać jakiś bardzo prosty przykład, który pomógłby mi lepiej zaskoczyć ?.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 19 gru 2017, o 12:51 
    Offline
    Użytkownik

    Dołączył(a): 18 cze 2015
    Posty: 372
    Pomógł: 0

    Aby dokończyć temat piszę, że udało mi się osiągnąć cel, jeśli chodzi o zmianę stanu bitów portu C. Otóż moje założenie okazało się
    słuszne, tzn. jeżeli dany przycisk ma przypisane różne warianty zmiany stanu tych bitów, ale są one oddzielone poszczególnymi case,
    a wiec np. jeśli w case 0 przycisk ustawia port:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    a w case 1

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    i w kolejnych case, jeśli takowe istnieją ten sam przycisk wykonuje podobną prace, to wszystko działa prawidłowo. Zapisy typu
    0b00000101 itp. nie chciały działać prawidłowo. Zresztą napisałem wszystko od nowa. Wesołych Świąt i do Siego Roku :) .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO