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 4 cze 2025, o 10:53


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
     Tytuł: AVR początki
    PostNapisane: 3 cze 2013, o 22:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 mar 2013
    Posty: 71
    Lokalizacja: Kraków
    Pomógł: 5

    Na samym początku chciałbym prosić wszystkich o wyrozumiałość ponieważ jestem dopiero początkujący w programowaniu mikrokontrolerów AVR.
    Mam następujący problem (przedstawie go możliwie jak najprościej).
    Więc przykładowo:
    w programie posiadam zmienną x która przybrała akurat wartość 0x1F czyli u mnie
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    mam też tablicę wieloelementową która zawiera wartości od 0x01 do 0xFF:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Mam teraz pytanie: w jaki sposób mógłbym sprawdzić to, że wartość mojej zmiennej (która oczywiście w programie może zmieniać swą wartość) jest równa takiemu a nie innemu mojemu elementowi w tablicy, u mnie akurat teraz przykładowo ma on wartość 0x1F. Czyli np.:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    w jaki sposób mógłbym to sprawdzić ?
    Będę Wszystkim Bardzo Wdzięczny za pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2013, o 22:20 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 maja 2012
    Posty: 758
    Pomógł: 9

    Pętla for po tablicy i porównujesz element po elemencie ze zmienną x. W przypadku zgodności zwracasz indeks tablicy.

    _________________
    ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2013, o 22:24 
    Offline
    Użytkownik

    Dołączył(a): 17 sty 2013
    Posty: 327
    Lokalizacja: Białystok
    Pomógł: 14

    jeżeli wiesz z którym elementem tablicy zrób tak:
    Kod:
    if (x==tab1[0]) LED_ON;


    pod 0 podstawiasz o który element tablicy chodzi, jeżeli chcesz sprawdzić wszystkie to jak kolega wyżej pętla for, a zamiast 0 zmienną z pętli



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 cze 2013, o 22:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 mar 2013
    Posty: 71
    Lokalizacja: Kraków
    Pomógł: 5

    Hmm... myślę że pomysł z pętlą for byłby bardzo dobry, nie bardzo tylko rozumiem w jaki sposób zwrócić indeks tablicy, czy mógłby ktoś poratować jakimś prostym przykładem ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 cze 2013, o 09:30 
    Offline
    Nowy

    Dołączył(a): 09 maja 2013
    Posty: 14
    Pomógł: 0

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

    Jako argument podajesz nazwę tablicy (jest to równoznaczne z adresem jej pierwszego elementu). Potem pętlą for sprawdzasz po kolei czy któryś element tablicy zgadza się z tą wartością, jeśli tak to zawracasz jego indekst, a jeśli żaden się nie zgadza to w ostatnim wykonaniu pętli, na jej końcu zostanie zwrócona wartość -1 (Przykładowo, możesz wybrać inną)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 cze 2013, o 09:46 
    Offline
    Moderator
    Avatar użytkownika

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

    adrspo95 ---> bardzo dobry przykład tylko taka mała uwaga, na końcu ten IF

    if(i== 14)

    jest już nie potrzebny wystarczy samo

    return -1

    a dodatkowo żeby pamiętać o oszczędności na typach (pamięci RAM) to rezultat funkcji dałbym typu int8_t a nie int

    _________________
    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: 5 cze 2013, o 10:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 mar 2013
    Posty: 71
    Lokalizacja: Kraków
    Pomógł: 5

    Bardzo Panowie Dziękuję za pomoc wszystko już działa jak należy, niemniej jednak pojawił się kolejny problem :( nie za bardzo wiem w jaki sposób "wyciągnąć" wartość z zmiennej i (czyli np. 0x1F) a nie nr. indeksu w momencie kiedy po sprawdzeniu ma taką samą wartość jak druga moja zmienna czyli w tym przypadku 0x1F



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 cze 2013, o 10:37 
    Offline
    Moderator
    Avatar użytkownika

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

    A co to znaczy "wyciągnąć" wartość zmiennej ? ... bo teraz to trochę zakręciłeś ;)

    _________________
    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: 5 cze 2013, o 10:56 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 mar 2013
    Posty: 71
    Lokalizacja: Kraków
    Pomógł: 5

    Chciałbym wartość tej zmiennej czyli np. 0x1F (a nie nr. indeksu ) użyć pózniej w innym miejscu w programie.

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

    No i wszystko jasne :) Bardzo Dziękuję.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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