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 04:57


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
    Autor Wiadomość
    PostNapisane: 1 mar 2014, o 23:20 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    Głupia sprawa, logicznie wiem o co chodzi, jednakże męczę się z wykonaniem praktycznym. Mam przycisk typu microswitch, wciskany bez przytrzymania, gdy jest nie wcisnięty - na wejściu logiczne jeden, gdy wcisnięty na wejściu logiczne 0. Realizuję plan: przyciskam klawisz - na LCD pojawia mi się OFF i zmienia się dopiero wtedy gdy znów wcisnę przycisk. Za każdym razem gdy wciskam przycisk pojawa mi się OFF, jednakże nie wraca do ON gdy ponownie wcisnę. Jest to zapewne logiczna pierdoła, proszę mnie za bardzo nie zjechać :) poniżej mój kod:
    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: 1 mar 2014, o 23:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    Sprawdź coś takiego w 8 linijce:
    if(bit_is_clear(PINB, 0)&& ( ( (Pressed ==0) || (Pressed == 1) ) ) )

    Zastanów się co robi taki fragent "Pressed ==0||Pressed == 1" ;)

    Poza tym, naciśnięcie przycisku wykrywa się niskim poziomem logicznym (port ustawiony jako wejściowy i pull-up, microswitch zwiera to do masy), czyli bit is clear, tylko czemu wtedy wyświetlasz OFF ?

    Nie masz też obsługi drgania styków.



    Ostatnio edytowano 2 mar 2014, o 00:00 przez fredek, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 mar 2014, o 23:58 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    Jeżeli pressed = 0 lub pressed = 1 wcisnij OFF, włącz ON dopiero wtedy gdy pressed jest równe 2 czyli gdy za drugim razem wciskam przycisk i chę uzyskać na LCD wynik ON, dobrze myślę?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    Ok, to sprawdź to:

    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: 2 mar 2014, o 00:14 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    tak samo jak moje. gdyby to było tak chop siup to bym się nie pytał



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:22 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    Hehe, faktycznie, no to spróbujmy tak:

    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.


    :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:25 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    ++Pressed&=3;????? chyba coś nie tak



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    takten napisał(a):
    ++Pressed&=3;????? chyba coś nie tak


    Sprawdź ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:32 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    sprawdziłem i pluje błędem w eclipse



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:43 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    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.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:46 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    fuck, działa, na jaki adres mam wysłać zimne piwko?

    ------------------------ [ Dodano po: 1 minucie ]

    ale nie rozumiem tej instrukcji - Pressed%=4;, wyjaśniłbyś?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:53 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    takten napisał(a):
    fuck, działa, na jaki adres mam wysłać zimne piwko?

    ------------------------ [ Dodano po: 1 minucie ]

    ale nie rozumiem tej instrukcji - Pressed%=4;, wyjaśniłbyś?


    Pressed = Pressed % 4
    % - reszta z dzielenia,
    czyli zerowanie Pressed gdy jest 4 :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 00:55 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    4? czemu 4? chce zmiany gdy wciskam przycisk za drugim razem, chyba jestem debilem i nie kumam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 01:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    takten napisał(a):
    4? czemu 4? chce zmiany gdy wciskam przycisk za drugim razem, chyba jestem debilem i nie kumam

    Bit is clear && (!Pressed) czyli równe 0 => Pressed = 1 na wyświetlaczu OFF
    Bit is set i bitowe & Pressed => Pressed++ czyli 2
    Bit is clear i Pressed == 2 => Pressed++ czyli 3 na wyświetlaczu ON
    Bit is set i bitowe & Pressed => Pressed++ czyli 4, dalej jest Pressed%=4 czyli zerowanie.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 mar 2014, o 01:12 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    faktycznie, temat zamnikęty dzieki!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 mar 2014, o 22:35 
    Offline
    Użytkownik

    Dołączył(a): 14 gru 2013
    Posty: 41
    Pomógł: 0

    Kurczę, głupio mi znów ten temat poruszać, ale trudno, zaryzykuję...

    Obsługuję w przerwaniu pomiar ADC i przesył do komputera, po dodaniu obsługi przycisków ON oraz OFF, pomiary wysyłane są pojedyńczo, po wciśnięciu przycisku, nie zaś sekwencyjnie jak wcześniej. Chcę uzyskać efekt -> włączam ON -> wysyłane są cały czas pomiary z ADC, włączam OFF, wysyłane są cały czas zera. Jakieś słowo naprowadzenia jak to zrealizować? Próbowałem już wielu rzeczy, ale za każdym razem ten sam efekt.

    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.


    ------------------------ [ Dodano po: 3 minutach ]

    deklaracja int Pressed = 0; jest globalna



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 mar 2014, o 23:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 03 lut 2013
    Posty: 84
    Pomógł: 8

    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.


    lub tak:

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


    Możesz też do deklaracji Pressed dodać volatile i wtedy to wysyłanie na PC wywalić z przerwań i przenieść do głównej pętli programu jak kod, który tam masz jest nieblokujący ;)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2014, o 18:44 
    Offline
    Użytkownik

    Dołączył(a): 30 lis 2013
    Posty: 29
    Pomógł: 0

    aby te powyższe zaprezentowane przez was działało, to w funkcji main trzeba jeszcze dodać coś w stylu:

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


    chyba, nie?

    a co w przypadku gdy mamy do czynienia np. z 4 przyciskami? bo w sumie podobny problem mam



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO