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 12 kwi 2025, o 14:43


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
    Autor Wiadomość
    PostNapisane: 14 sty 2014, o 19:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Witam
    Próbuje zrealizować pewne zadanie
    Chciałbym aby Działania wykonywane w procedurze na zmiennej X były przekazywane do zmiennej programu głównego Pwm

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


    To jest fragment kodu odpowiedzialny za to działanie. Niestety nie działa
    Nie jestem pewien czy to tak ma być czy może jednak trzeba użyć np: declare function zamiast declare sub ?

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 11:24 
    Offline
    Użytkownik

    Dołączył(a): 19 lut 2013
    Posty: 26
    Pomógł: 2

    nie znam tego dialektu ale w basiku sub oznacza procedurę nie mogąca zwracać danych. Trzeba ożyć funkcji np Declare Function Rozjasnic(x As Byte) as byte


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 12:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Też dochodzę do tego wniosku.
    Próbowałem zrobić to jako Declare function w podany przez ciebie sposób
    Niestety nie dokońca rozumiem co ma być wtedy w pętli głównej?

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 16:59 
    Offline
    Użytkownik

    Dołączył(a): 29 lis 2012
    Posty: 1074
    Lokalizacja: Sochaczew
    Pomógł: 21

    Po co chcesz upodabniać bascoma do C?
    Nie możesz przepisać wartości x do wartości rozjasnic ?
    Poza tym zmienne w bascomie są globalne. Tu nie ma zmiennych jak w C.
    Robiąc coś na danej zmiennej gdzieś w podprogramie odczytasz to w pętli głównej.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Domyślnie w Bascomie argumenty do procedur lub funkcji są przekazywane przez referencje czyli przez adres. Oznacza to, że do procedury nie przekazujemy wartości zmiennej tylko jej adres. I wszystkie operacje dokonywane na tej zmiennej wewnątrz procedury są widoczne na zewnątrz np. w pętli głównej. Ten mechanizm jest podobny do wskaźników w C.
    Argumenty można też przekazywać poprzez wartość. W tej sytuacji jest tworzona kopia zmiennej i operacje wewnątrz procedury są wykonywane na tej kopii i nie są widoczne na zewnątrz.

    Na szybko napisałem malutki programik testowy
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Zmienna Pwm w kroku pierwszym ma wartość równą zero, ale w kroku drugim już ma wartość jaką przyjęła po modyfikacji w wewnątrz procedury Rozjasnij.

    W takiej formie programu wszystkie działania na zmiennej Pwm wewnątrz procedury Rozjasnij są widoczne w pętli głównej.

    matrix napisał(a):
    Poza tym zmienne w bascomie są globalne. Tu nie ma zmiennych jak w C.

    W Bascomie oprócz zmiennych globalnych są również zmienne lokalne czyli tworzone na stosie.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:17 
    Offline
    Użytkownik

    Dołączył(a): 29 lis 2012
    Posty: 1074
    Lokalizacja: Sochaczew
    Pomógł: 21

    jacekk232 napisał(a):
    W Bascomie oprócz zmiennych globalnych są również zmienne lokalne czyli tworzone na stosie.

    Ja tego tak nie traktuję a może raczej nie używam.
    Przyjmuję że wszystkie zmienne zadeklarowane na początku mam globalne i w dalszej części programu tak się do nich odnoszę.
    Nigdy z tego powodu nie miałem kłopotów.



    Ostatnio edytowano 15 sty 2014, o 20:18 przez matrix, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:18 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Mam osiem zmiennych Pwm1 , Pwm2 ..... Pwm8
    Chciałem zadeklarować kilka wspólnych procedur dla tych zmiennych, tak by nie robić podprogramów dla każdej z osobna.
    Dla przykładu tutaj była procedura (rozjasnic) którą później mógłbym wykorzystać np:

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

    Według podręcznika są dwa warianty gdzie: wariant1 Działania na wew. zmiennych nie są "widoczne na zewnątrz" i wariant2 działania na zmiennych wew. są na bieżąco "widoczne na zewnątrz"
    Myślałem że to co pokazałem w pierwszym poście jest wariantem2

    Pytałeś dlaczego próbuje upodabniać do C?
    Czekam na kaskę a co za tym idzie na książkę Bluebook i wtedy się posypią pytania ale już nie w tym dziale :)
    W wolnej chwili odrabiam opuszczone wcześniej lekcje i próbuje zgłębić te deklaracje szczególnie że mam teraz na stole mały projekcik w którym chciałem to wykorzystać.

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Jak ja pisałem w Bascomie to też tak robiłem. I pewnie zdecydowana większość ludzi piszących w Bascomie tak robi. Ale nauka C wyrobiła we mnie inne podejście do pisania programów. I teraz jak mam coś napisać w Bascomie to odruchowo stosuję to co nauczyłem się podczas nauki C czyli stosowanie zmiennych lokalnych, dzielenie programu na funkcje itd.

    tomson5 to co pokazałeś w pierwszym poście jest właśnie tym wariantem, w którym wszystkie operacje wewnątrz procedury są widoczne na zewnątrz. Jak możesz to pokaż cały kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Podczas pisania pojawiły się nowe wątki.

    @jacekk232 sprawdziłem twój kod na szybko i okazuje się że coś tam jest zwracane z procedury.
    Dokładnie to jest tak

    krok1
    pwm = 0

    krok2
    pwm = 1

    Natomiast jak wywaliłem z procedury polecenie waitms 100 to w kroku2 pwm = 101
    To już wcześniej zaobserwowałem że jeżeli w procedurze na sztywno wpisałem X = 10 to zmienna Pwm też przyjmowała wartość 10
    Problem jest taki że pętla For Next nie zachowuje się w taki sam sposób jakby to miało miejsce w podprogramie
    Chodzi mi o to że kręci się od 1 do 100 ale nie zwraca wartości X na zewnątrz po każdym kroku tylko na koniec.

    uff... mam nadzieje że to rozumiecie :)

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:38 
    Offline
    Użytkownik

    Dołączył(a): 29 lis 2012
    Posty: 1074
    Lokalizacja: Sochaczew
    Pomógł: 21

    jacekk232 napisał(a):
    teraz jak mam coś napisać w Bascomie to odruchowo stosuję to co nauczyłem się podczas nauki C czyli stosowanie zmiennych lokalnych, dzielenie programu na funkcje itd.

    Ja też dzielę program na funkcje.

    tomson5 napisał(a):
    Chodzi mi o to że kręci się od 1 do 100 ale nie zwraca wartości X na zewnątrz po każdym kroku tylko na koniec.

    No bo pętla FOR...NEXT tak się w bascomie zachowuje.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    No ale jak chcesz badać ta wartość po każdym kroku? Przecież jak program wpadnie w procedurę a potem do pętli for to będzie w niej "siedział" tak długo aż wykona wszystkie kroki pętli for. Dopiero potem wyskoczy z pętli i z procedury i wróci do pętli głównej. Jeśli chcesz aby zmiana wartości zmiennej była widoczna po każdym kroku to chyba by trzeba było zrezygnować z pętli for i napisac to tak aby procedura Rozjasnij była wywoływana ileś tam razy co np. 100ms. I wtedy po każdym kroku program by wracał do pętli głównej z aktualna wartością zmiennej Pwm.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 20:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    Właśnie tu poległem.
    Myślałem że po takiej deklaracji X będzie Jakby tożsame ze zmienną PWM.
    Wychodzi jednak na to że zanim pętla For Next nie skończy się nic z procedury nie wychodzi dopiero po skończeniu pętli :/
    Pożytek z tego chociaż taki że zrozumiałem co to jest Declare Sub i z czym to się je. Pozostało mi jeszcze declare function.

    Dzięki za pomoc

    _________________
    "Nie programuj w święta - bug się rodzi"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 21:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    tomson5 napisał(a):
    Myślałem że po takiej deklaracji X będzie Jakby tożsame ze zmienną PWM.

    No i tak jest. Jeśli się przekazuje argument przez referencje to zmienna X i zmienna Pwm to to samo.

    tomson5 napisał(a):
    Wychodzi jednak na to że zanim pętla For Next nie skończy się nic z procedury nie wychodzi dopiero po skończeniu pętli

    Ta wartość jest na bieżąco zmieniana ale żeby tą zmianę zobaczyć w pętli głównej to program musi być w pętli głównej. A trafi do niej dopiero wtedy jak pętla for się skończy. Gdybyś tą zmienną odczytywał w przerwaniu od Timera np. co 10ms to na bieżąco byś widział jak zmienia się jej wartość.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 21:39 
    Offline
    Użytkownik

    Dołączył(a): 29 lis 2012
    Posty: 1074
    Lokalizacja: Sochaczew
    Pomógł: 21

    Bo pętla for...next do takich rzeczy nie służy. Nie podam przykładu do jakich rzeczy służy więc nie pytaj.

    Wysłane z mojego LG-P760 przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 21:53 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Tak na szybko napisałem taki przykładzik
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W procedurze Rozjasnic 20 razy wartość zmiennej X jest zwiększana o 5. A efekt na bieżąco jest widoczny w pętli głównej.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 22:07 
    Offline
    Użytkownik

    Dołączył(a): 29 lis 2012
    Posty: 1074
    Lokalizacja: Sochaczew
    Pomógł: 21

    Akurat to jest normalne. Nie używasz pętli for...next. W Twoim przypadku nie potrzeba nawet argumentu w nawiasie. To jest typowe liniowe zachowanie bascoma. Po każdym wykonaniu podprogramu wracasz do pętli głównej więc nie ma w tym nic dziwnego że masz wynik działania na bieżąco.

    Wysłane z mojego LG-P760 przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sty 2014, o 22:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Ja wiem, że ta procedura z argumentem jest trochę na wyrost i to samo by się osiągnęło używając zmiennej Pwm wewnątrz procedury. Ja to wiem. Ale chciałem pokazać koledze tomson5, że problemem w jego przykładzie była pętla for.

    I chciałem tez pokazać jak to jest z tym przekazywaniem parametrów. Bo jeśli przekażemy zmienną do procedury przez wartość to już ta zmiana nie będzie widoczna na zewnątrz.
    Składnia: [ Pobierz ] [ Ukryj ]
    język basic4gl
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Oczywiście osoba pisząca w Bascomie zapyta zaraz po co jej takie dziwactwa. Skoro bez tego też działa. Ale kolega tomson5 wspomniał, że przymierza się do zakupu Bluebooka i nauki C. A tam takie rzeczy to normalność. Więc dlaczego by nie spróbować zrozumieć tego jak to jest z tymi argumentami przekazywanymi do procedur i funkcji, siedząc jeszcze w Bascomie. Tym bardziej, że przekazywanie argumentów przez referencje jest podobne do przekazywania argumentów poprzez wskaźniki w C. Jak kolega tomson5 teraz to zrozumie to później będzie mu łatwiej.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 sty 2014, o 08:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 sty 2014
    Posty: 336
    Lokalizacja: Grodzisk Mazowiecki
    Pomógł: 13

    @jacekk232 świetny przykład. Wczoraj musiałem już odpuścić ale dzisiaj jak wrócę z arbajtu to sprawdzę twój pomysł. Już na oko widzę że jest Ok. Dzięki wielkie za pomoc.


    Edit:
    Sprawdziłem twój pomysł i wyszło mi coś takiego:

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


    (Pwm Jest zwiększane w stu krokach. Zmieniłem wcześniej było w dwudziestu)
    Pojawiła się wymyślona przeze mnie procedura Przerwa
    Zastąpiłem w ten sposób znienawidzone przez wszystkich polecenie Wait

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



    W przerwaniu od Timera jest zwiększana zmienna Licznik3
    Procek kręci się w pętli do chwili gdy warunek if Licznik3 = 100 zostanie spełniony

    Teraz myślę jakby tu można regulować sobie tą "przerwę"
    Pisząc polecenie w ten sposób:
    Przerwa 100 lub coś w tym stylu.


    Edit2:

    Wymyśliłem Przerwę w ten sposób:

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


    Ktoś ma inny pomysł na tą Przerwę ??

    _________________
    "Nie programuj w święta - bug się rodzi"



    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 2 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