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? 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 10 lip 2025, o 19:38


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
    Autor Wiadomość
    PostNapisane: 11 maja 2017, o 11:35 
    Offline
    Użytkownik

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

    Witam wszystkich.

    Zwracam się z prośbą o pomoc, podpowiedź, nakierowanie mnie na właściwy tor. Otóż mam dwa niezależne programy, gdzie jeden
    wyświetla sobie jakieś tam komunikaty na lcd, a drugi natomiast mierzy napięcie i wyświetla je w postaci linijki, taki bargraf.
    Chciałem poeksperymentować i zrobić np. wskaźnik wysterowania, gdzie w momencie pojawienia się muzyki stałe napisy znikną i pojawi się
    linijka świetlna (jeśli adc > od jakiejś zadanej wartości, to zacznij wykonywać program nr2)
    Jeśli natomiast napięcie na wejściu adc zaniknie (po upływie np. 2s), to powróć do wykonywania programu nr1.

    Wiadomo, że są dwie pętle while(1), definicje pinów do lcd można dopasować(ujednolicić), tylko jak się prawidłowo do tego zabrać. Z jakich
    instrukcji najlepiej skorzystać (switch, break, continue, ......).

    Będę bardzo wdzięczny za wszelką pomoc. Dziękuję.

    Robert_1967

    Przykładowe dwa programy w dużym skrucie:


    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: 11 maja 2017, o 12:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Nie wiem czy dobrze rozumiem.
    Można by w jednej while dać dwa ify.
    Wyższe napięcie ustawia flagę niższe pi czasie zeruje.
    if(flaga){
    {
    else {
    }
    Dalej cześć wspolna programu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 maja 2017, o 12:26 
    Offline
    Użytkownik

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

    Witaj Daro69
    Dzięki za podpowiedź. Jak zawsze czujny :) . Co prawda jestem w pracy i nie mam dostępu do atb, ale postanowiłem ruszyć temat.
    Już od jakiegoś czasu zabieram się do tego pomysłu. W wolnej chwili spróbuję coś napisać. Dzięki. Może jeszcze ktoś podzieli się
    ewentualnym pomysłem, jak by to zrobił.
    Dzięki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 maja 2017, o 12:50 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    hejka , :)
    Możesz dodatkowo w pierwszym ifie niskiego napięcia robić pomiar ADC częściej,
    A w drugim co 2 sęk dla uzyskania planowanego opóźnienia powrotu do pierwszego.
    Oczywiście timerem nie delay'em.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 maja 2017, o 13:08 
    Offline
    Użytkownik

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

    Dzięki Daro69
    Przez weekend zmierzę się z tym tematem. Ciekawe, jak to pogodzę z obsługą wyświetlacza (cls....), ale jak nie spróbuję, to się nie przekonam
    :) .
    Na razie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 maja 2017, o 15:43 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    Robert_1967 napisał(a):
    Dzięki Daro69
    Przez weekend zmierzę się z tym tematem. Ciekawe, jak to pogodzę z obsługą wyświetlacza (cls....), ale jak nie spróbuję, to się nie przekonam
    :) .
    Na razie.

    Przecież kolega ma Bluebooka jak widzę - czy nie warto zajrzeć również do książki do rozdziału o projekcie wielozadaniowym ? Toż tam masz pokazane jak się to robi ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 maja 2017, o 19:59 
    Offline
    Użytkownik

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

    Dziękuję Panie Mirku.
    Tak też i robię. Przeczytam kilka razy i zobaczę , co z tego wyniosę.
    Pozdrawiam wszystkich forumowiczów.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2017, o 21:49 
    Offline
    Użytkownik

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

    Witam Daro69
    Udało mi się połączyć dwa programy w całość i na tym etapie wszystko działa. Nie są to programy "oryginalne", ponieważ są dość mocno okrojone. Chodziło o
    samo zrozumienie i czy się uda. Nie ma jeszcze opóźnienia przy przełączaniu się pomiędzy programami, ale to potem.
    Programik do wyświetlania linijki nie jest mojego autorstwa i napisałem do właściciela, czy mogę zamieścić go w moim poście do celów edukacyjnych.
    Program jest również z tego forum. Jak dostanę zgodę, to zaraz zamieszczę. Nie chcę po prostu dostać po uszach i wolę się zapytać.
    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 maja 2017, o 21:54 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    witam,
    jako takiej biblioteki np: '"LCD/lcd44780.h"' nie pokazuj. ;)
    ale wpisy w stylu lcd_str("...."); lcd_int(...); i t. p. mogą być. te z main.c. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 maja 2017, o 09:30 
    Offline
    Użytkownik

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

    Na ten moment kiedy adc jest mniejsze od 100, to wyświetla się stały napis na lcd. Natomiast kiedy adc z potencjometru
    przekroczy wartość 100, to stały napis znika i pojawia się słupek i wyświetla wartość lcd. Od 100 do 1023 słupek oczywiście
    zmienia swoją długość.



    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.


    Na razie nie otrzymałem odpowiedzi na pw, a więc zamieszczam kawałek kodu w takiej postaci. Myślę, że nie naruszam praw
    autorskich i wszystko jest ok.

    if(wynik>100) ----> tu jest warunek, gdzie jeśli adc jest większe od...., to wykona się wszystko do else. Natomiast jeśli adc
    jest o, lub poniżej jakiejś wartości, to wykonają się instrukcje tylko po else.
    Program dotyczący wyświetlania linijki jest wykonany z użyciem przerwania, a więc użyłem go, jako pierwszy. Przy tej konfiguracji
    jeszcze nie wiem, jak wykonać to przeczekanie, tzn. jak zaniknie napięcie na wejściu adc, to poczekaj i po zadanym czasie
    wyświetl "projekt wielozadaniowy".
    Zdaję sobie sprawę, że to, co tu napisałem jest banalnie proste i oczywiste, ale ja się uczę i dla mnie każda linijka
    napisana samemu z sensem i dobrze, to duża frajda i osiągnięcie. Po prostu mam mało czasu na to hobby i nie często
    ćwiczę, a przez to i zapominam, co wcześniej załapałem. Może jakieś sugestie.

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 10:04 
    Offline
    Użytkownik

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

    Witam.
    Mam prośbę o wytłumaczenie mi jednej kwestii. Pracując nad miernikiem chciałem zrobić woltomierz trzy zakresowy.
    Zrobiłem sobie tablicę:

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


    utworzyłem zmienną:

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


    Przyciskiem zmieniam zakres i wtedy na ekranie lcd zmienia mi się napis zawarty w tablicy.

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


    Niby wszystko działa. Program się kompiluję i zakresy wyświetlane się zmieniają. Nie widzę żadnych złych zachowań, ale
    jest jedno ale.
    Kompilator zgłasza problem i podkresla:

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


    Czytałem, czytałem i natrafiłem na informacje, że jest to niezgodność typów, czyli zakres i np. l_volty. Pan Mirek w postach
    wspomina o jawnym rzutowaniu. Doczytałem o jawnej konwersji. Pan Mirek pisał, że to, że program działa wcale nie oznacza, że
    działa prawidłowo i tego się trzymam.
    Problem w tym, że do końca nie rozumiem zagadnienia. Jest opis w Wikibooks i nie tylko, ale nie mogę zaskoczyć. Co robię źle.
    Proszę o pomoc, jak to ogarnąć, ponieważ stoję w miejscu, a szkoda mi czasu. Jest jeszcze tyle do nauki :(
    Wiem, gdzie dzwonią, ale .....Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 10:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1174
    Lokalizacja: Kraków
    Pomógł: 94

    Kolego, zmienna zakres jest typu uint8_t, natomiast napisy są tekstem. Więc masz niezgodność typów.
    Szkoda, że nie pokazałeś, jaki problem zgłasza eclipse.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 10:55 
    Offline
    Użytkownik

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

    Dziękuję za zainteresowanie.
    Jestem aktualnie w pracy i nie mogę wkleić błędu, ale po 16-ej zrobię to. Z tego, co pamiętam, to alert był związany z niezgodnością typów.
    Tak doczytałem w necie. Tak czy inaczej wieczorem zamieszczę, co mówi kompilator.Jeśli jest tak, jak piszę, to jak to naprawić ?
    Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 11:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1174
    Lokalizacja: Kraków
    Pomógł: 94

    Wydaje mi się, że zmienna zakres powinna być zadeklarowana jako:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    A n to maksymalna długość wyświetlanego tekstu +1 (czyli u Ciebie 15 znaków, plus jeden dodatkowy).
    Znaczy, tego +1 nie jestem pewien, ale jest wymagane dla znaku '\0'. Proszę, żeby ktoś to zweryfikował i napisał, czy mam rację.



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

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

    Dziękuję Koledze Marhef za pomoc.
    Sprawdzę wieczorem i podzielę się efektami. Przy okazji pomyślałem, czy nie zrobić tego inaczej i wymyśliłem coś takiego:


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


    Czy coś w tym stylu ???. Tak czy inaczej Twój sposób sprawdzę, ponieważ nie chodzi tylko o działanie kodu, ale i naukę i zrozumienie
    problemu. Tak na poważnie, to oczywiście posiadam dobry multimetr METEX zakupiony ze 30 lat temu i do dzisiaj mi służy, ale robię ten projekt w celach edukacyjnych i z czystej ciekawości, co wymodzę :)
    Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 13:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1174
    Lokalizacja: Kraków
    Pomógł: 94

    Rozumiem, że chcesz po prostu wyświetlać napis z pamięci, bez przypisywania do zmiennej?
    Jak to masz rozwiązane? Przyciskając przycisk zmieniasz wartość zmiennej? Czy zmieniasz f1, f2 i f3?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 13:17 
    Offline
    Użytkownik

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

    Na tą chwilę wygląda to tak, że przy wciśnięciu przycisku następuję przejście do drugiego zakresu miernika (np. 50 volt) i jednocześnie
    wyświetla się napis "zakres 50 volt" i kolejne przyciśnięcie zmienia zakres i wyświetla kolejny zakres, w jakim się znajduję.
    Wszystko działa prawidłowo, ale kompilator zgłasza alerty, a więc nie czuję się do końca zadowolony z takiego działania programu i staram
    się to naprawić.
    Zmieniając zakres miernika jednocześnie przypisuję zmiennej "zakres" kolejną linijkę z tablicy i w ten sposób tekst się zmienia.
    Ale pomyślałem, czy by nie zrezygnować z takiej metody i zastosować proste instrukcje w rodzaju:


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


    Flagi są mi potrzebne do pamiętania zadanych wartości na danym zakresie. Oczywiście metod pewnie jest kilka do osiągnięcia tego
    co chcę, ale ja jestem powiedzmy na starcie w C :) .



    Ostatnio edytowano 22 maja 2017, o 14:15 przez Robert_1967, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 14:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1174
    Lokalizacja: Kraków
    Pomógł: 94

    Ale to można w jednej funkcji zrobić. Np. po wciśnięciu przycisku zwiększasz jakąś zmienną, a w funkcji pomiar(zmienna) wywołujesz pomiar, a parametry masz uzależnione (np. funkcjami if()) od zmiennej zmienna ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 14:16 
    Offline
    Użytkownik

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

    Ok. Pokombinuję. Dzięki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 maja 2017, o 16:49 
    Offline
    Użytkownik

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

    Witam ponownie.
    A więc tak. Błąd, jaki zgłaszał kompilator, co opisałem na początku tego tematu wygląda następująco:

    warning: assignment makes integer from pointer without a cast [enabled by default]

    Natomiast przy zastosowaniu linijki kodu w rodzaju "char zakres[n];", gdzie [n], to liczba znaków +1 występuje następujący błąd:

    error: incompatible types when assigning to type 'char[16]' from type 'const char *'

    Wieczorem p



    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: 20 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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