Wpis z mikrobloga

Mircy z #arduino (tak wiem ze mecze) ale wrocilem ostatnio do zabawy chcac porzerzyc horyzonty i poleglem :P
Pierwszy raz chce uzyc funkcji ktora cos mi "wypluje" zeby potem uzywac tego w innej funkcji. (cos jak obejscie tego ze zmiennej lokalnej nie da sie uzywac w innej funkcji)
Mam picrel.
Podam moj tok rozumowania a ktos mi moze powie gdzie mam w nim blad bo nie ogarniam tematu/

1-w setup zadeklarowalem zmienna oczka i przypisalem jej 1 (zrobilem to tylko po to zeby kazda funkcja wiedziala ze jest zmienna o tej nazwie).

2-w loop:
2.1 jesli guik nacisniety to wykonaj mruganie (funkcja powodujaca zalacanie i wylaczanie wyjsc)
2.2 przypisz zmiennej a 1, a zmiennej b 7.
2.3 wykonaj funkcje losowanie
2.4 jesli przycisk nie jest wcisniety wyrzuc na serialmonitora wartosc "oczka"

3 funkcja losowanie (to ta funkcja z ktorej chce dostac wartosc z przedzialu 1-6 i uzywac tej wartosci w innej funkcji)
3.1 wez parametry a i b (wczesniej zdefiniowane jako odpowiednio 1 i 7)
3.2 przypisz zmiennej oczka wartosc randoma z przedzialu a b
3.3 zwroc wartosc zmiennej oczka

I to nie dziala (na dole ekranu pluje sie ze oczka nie zostaly wczesniej zadeklarowane....)

Zalozenie jest takie ze jak trzymam guzik to mrygaja se diody a jak puszcze to sie ustali jakis stan i bedzie taki dopoki znow nie nacisne (bo bedzie spelniony drugi if czyli stan LOW. Czyli nie beda mrugac bo pierwszy nie bedzie spelniony, czyli randomowa wartosc zmiennej oczka sie nie zmieni bo sie nie wykona kolejny random.

Co tu jest nie tak?
gorzki99 - Mircy z #arduino (tak wiem ze mecze) ale wrocilem ostatnio do zabawy chcac...

źródło: comment_1621611267PHmBLnynybHHEUGcMSC2JD.jpg

Pobierz
  • 79
@gorzki99: nigdy nic nie robiłem z arduino ale jeżeli to zachowuje się w miarę jak c to:
1. Deklarowanie oczka w setup nie ma sensu bo to zmienna lokalna wodzoczna tylko w funkcji setup a nawet jej tam nie używasz
2. W funkcji loop nie masz zadeklarowanej zmiennej oczka a próbujesz jej użyć dlatego kompilator narzeka
3. W funkcji loop wywołujesz funkcję losowanie, która zwraca nowy stan dla oczek ale nigdzie
@eternitowy-Bogdan: wiem ze == to nie to samo co =. Poprostu w akcie desperacji jak nie poszlo z = to dalem ==
Co do formatowania to jest wersja robocza-jak zacznie dzialac to bede sie bawil w estetyke (kod jest na tyle maly ze sie nie pogubie)

Poza tymi cennymi radami masz jakas ktora rozwiaze moj problem i zrobi to zeby program dzialal w taki sposob o jaki mi chodzi?
@gorzki99: typ zmiennej piszesz przed nazwa podczas deklaracji zmiennej
w linijce int oczka = 1; zadeklarowałeś zmienną oczka i nadałeś jej wartość 1
W linijce int oczka = losowanie(a, b) znowu próbujesz zadeklarować zmienna oczka co się nie udaje bo linijke wcześniej już zadeklarowałeś zmienna o tej samej nazwie
typ zmiennej piszesz przed nazwa podczas deklaracji zmiennej

w linijce int oczka = 1; zadeklarowałeś zmienną oczka i nadałeś jej wartość 1

W linijce int oczka = losowanie(a, b) znowu próbujesz zadeklarować zmienna oczka co się nie udaje bo linijke wcześniej już zadeklarowałeś zmienna o tej samej nazwie


@ZdeformowanyKreciRyj: no i wlasnie mnie to rozlozylo na lopatki. Bo jak wczesniej nie deklaruje i chce zdeklarowac ze zmienna oczka ma byc tym
gorzki99 - > typ zmiennej piszesz przed nazwa podczas deklaracji zmiennej
w linijce i...

źródło: comment_1621614893bRMzjx86fHRdmYA87J3fxG.jpg

Pobierz
widocznie inny kompilator - przenieś funkcje losowanie nad funkcje loop


@eternitowy-Bogdan: to bede mial problem. ja mam dostawac randomy za kazdym razem jak nacisne guzik. Jak wywale z loopa to funkcja zrobi sie raz i da stala wartosc
szkoda ze nie doczytales dalszych komnetarzy i screenow.


@gorzki99: Nie musiałem. Właśnie tam leży twój błąd.
Deklarujesz lokalną zmienną oczka dostępną wyłącznie wewnątrz funkcji setup.
Deklarujesz kolejną lokalną zmienną oczka dostępną wyłącznie wewnątrz funkcji losowanie.
Próbujesz użyć niezadeklarowanej zmiennej w funkcji loop
Płaczesz, że nie działa
Zasłaniasz się innym komentarzem, w którym wywołujesz dwuargumentową funkcję bez argumentów

i szkoda, że to ja nie czytam?


@Portier-Harry_Portier: no szkoda. Bo jakbys czytal to doczytalbys:
"Pierwszy raz chce uzyc funkcji ktora cos mi "wypluje" zeby potem uzywac tego w innej funkcji. (cos jak obejscie tego ze zmiennej lokalnej nie da sie uzywac w innej funkcji)"

Doszedlbys do wniosku ze jestem w tym zielony i napisalem jak rozumuje ze to ma dzialac.

Nie dziala bo pewno zle napisalem-bo nie mam pojecia jak
@Portier-Harry_Portier: Ok chyba wiem na jakiej plaszczyznie sie nie rozumiemy.
Jestem total zielony i uzywam niepoprawnych okreslen dlatego sie nie mozemy dogadac.

Czyli jak w loop zadeklaruje int a=0 (tlumacze sobie jako zmienna globalna) to kazda funkcja wywolana w loop moze z niej korzystac i ja dowolnie zmieniac?
Tylko jak dojde do konca loop i wroce na poczatek to znow a=0
A ja chce dostac zmienna ktora okresli funkcja (jesli zostanie
Czyli jak w loop zadeklaruje int a=0 (tlumacze sobie jako zmienna globalna) to kazda funkcja wywolana w loop moze z niej korzystac


@gorzki99: Nie. Korzystać może tylko funkcja loop.
Jak chcesz globalną, zadeklaruj na samym początku, jeszcze PRZED setup()
I pamiętaj, że zmienna oczka, zadeklarowana w loop oraz zmienna oczka zadeklarowana np, w losuj, to są dwie RÓŻNE zmienne o "przypadkowo" takiej samej nazwie.