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
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

nadal nie wiem dlaczego czasem trzeba dac () po wywolaniu a czasem wrecz nie mozna).


@gorzki99: Przy wywołaniu funkcji trzeba zawsze. Czasami jeszcze wewnątrz () trzeba przekazać parametry.

Ale to wynika z tego ze "zaswiecanie" jest w elsie. Wiec jak nie wcisniety guzik to znow sie random robi i sie
  • Odpowiedz
Jak naciśniesz - mruga, jak puścisz - losuje?

A chciałbyś odwrotnie?


@Portier-Harry_Portier: Ja chcialbym ze jak mam nacisniety guzik to mrugaja diody (taka "symulacja toczenia sie kostki") Jak puszcze to wystawiaja sie wyjscia-w zaleznosci od tego co sie wylosowalo. (ja se juz podepne tak zeby wyswietlilo odpowiednio). Ale ma sie wystawiac tak dlugo dopoki znow guzika nie nacisne.

więc z
  • Odpowiedz
jak mam nacisniety guzik to mrugaja diody (taka "symulacja toczenia sie kostki") Jak puszcze to wystawiaja sie wyjscia-w zaleznosci od tego co sie wylosowalo


@gorzki99: A nie tak właśnie działa? losowanie i wyświetlanie wyniku.
Tyle, że cały efekt psuje ci funkcja mruganie(), która w tym przeszkadza. Wywal ją z IF i powinno być już dobrze.
Jak przycisk wciśnięty, to losuje i wyświetla w kółko bardzo szybko. Jak puszczony, to przestaje.
Jeśli przycisk dędzie działał
  • Odpowiedz
Tyle, że cały efekt psuje ci funkcja mruganie(),


@Portier-Harry_Portier: no ale to jest dosc istotna funkcja z punktu widzenienia calosci.
Naciskam guzik-ma sie odpalic funkcja mruganie (czy tez mruganie()) I po nacisnieciu guzika diody se mrugaja (czyli niby kostka sie toczy). Jak sie pusci guzik to w zaleznosci od wyniku random wystawiaja sie jakies wyjscia (ja se juz tak podepne zeby to bylo na kostce 1 jesli wyszlo z randoma
  • Odpowiedz
to jest dosc istotna funkcja


@gorzki99: Istotnie. Po przyciśnięciu guzika odpala się losowanie oraz wyświetlanie, czyli diody losowo mrugają udając toczenie się. Po puszczeniu - przestaje i pozostaje wyświetlony wynik ostatniego losowania, bo jak guzik puszczony, losowanie się nie odbywa.
Dokładnie tak jak chciałeś. I bez mruganie(), bo teraz mruganie zapewnia nam samo losowanie.
  • Odpowiedz
Mruga tylko tak długo, jak długo wciśnięty jest przycisk.


@Portier-Harry_Portier: I tak ma byc. Po czym po puzczeniu guzika przez chwile wystawia randmowe wyjscia-i tak ma byc ale nie przez chwile tylkodpokoki nie nacisne znowu guika.
  • Odpowiedz
więc kiedy chcesz odczytywać wynik?


@Portier-Harry_Portier: Ja nie chce odczytywac-serial byl jako niejako kontrolny. Po puszceniu guzika w zaleznosci od tego co wyszlo z random maja dane piny byc na HIGH. Tak dlugo dopoki znow nie nacisne guzika
  • Odpowiedz
@gorzki99: No to mój ostatni kod tak powinien działać.
Jeśli przycisk wciśnięty, udawaj mruganie, losuj, wyświetl (w pętli)
Jeśli nie wciśnięty, nic nie rób (pozostaje to, co było widoczne poprzednio).
Pisząc o odczytywaniu, miałem na myśli diody, bo jak zamotasz program, będą migać przez czły czas.
  • Odpowiedz
No to mój ostatni kod tak powinien działać.


@Portier-Harry_Portier: wgralem i wyglada na to ze to mialem na mysli :)
1-Twoje zdrowie ponownie
2-przeanalizuje jutro po robocie o co tam chodzi bo teraz to juz smigam spac :P

Ale wyglada na to ze dziala :P (poki co nie wiem dlaczego ale bede drazyl :P)
  • Odpowiedz
@Portier-Harry_Portier: Popatrzylem, pomyslalem i teraz wiem wiecej :P
Poki co nie widze przewagi case nad if-dosc krotki i nieskomplikowany kod wiec moze dlatego.
Zamiast guzika postanowilem uzyc czujnika zblizeniowego (w koncu mamy XXI wiek to kto by tam chcial guziki naciskac :PP)
Niemniej wsio dziala (nawet z case :P)

Na jakimstam filmiku koles mowil ze uzywanie # define zamiast int pozwala zaoszczedzic pamiec. Niestety nie powiedzial jakie sa zle strony uzywania # define. Postanowilem
  • Odpowiedz