Skocz do zawartości

Menu na oled 1306 z obsługą silników


Norbert7630

Pomocna odpowiedź

Kolega @ethanak proponuje Ci zrobienie funkcji która na bierząco będzie sprawdzała, czy i który przycisk został wciśnięty. Tak więc w przypadku 3 przycisków może zwracać 4 wyniki: że żaden nie jest wciśniety, że naciśnięto pierwszy, że naciśnięto drugi, że naciśnięto trzeci.

Pomysł bardzo dobry, jednak wymaga wiedzy, że funkcja może zwracać jakąś wartość. Jednak:

6 minut temu, Norbert7630 napisał:

ja nawet nie wiem jak się za to zabrać z tym return, readkey dla mnie to już czarna magia

 

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Norbert pamiętasz jak Ci wkleiłem na drugiej stronie tego tematu linka do wiedzy o funkcjach z kursu arduino? Miałeś się zapoznać. Tam jest napisane o tym, że funkcja może zwracać wynik i co to ten return...

  • Pomogłeś! 1
Link do komentarza
Share on other sites

ok czyli w przypadku 4 przycisków bo w tym projekcie są 4 funkcja będzie zwracać 5 wyników.

int readKey(void)
{
    odczytaj_wszystkie_klawisze_i_ustaw_ich_stany();
	if (klawisz_1_zmienił_stan_z_puszczonego_na_wciśnięty()) {
		return 1;
	}
    // ... tu następne klawisze
    return 0; // żaden klawisz nie został wciśnięty
}

int readkey(void) - ta linijka już jest dla mnie zagadką....zmienna int o nazwie readKey? a to (void)? że nie zwraca żadnej wartości? nie wiem no za trudne.

czym jest ta linijka: odczytaj_wszystkie_klawisze_i_ustaw_ich_stany(); czy jest to funkcja? czyli jej nazwa i sama funkcja ?

ta linijka: (klawisz_1_zmienił_stan_z_puszczonego_na_wciśnięty()) { return 1;  } no tutaj to nie wiem jak to zapisać w tych nawiasach z LOW na HIGH, zwraca 1. Kompletnie nie wiem o co chodzi.

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jezeli zwracasz cos z funkcji za pomoca return to typem funkcji musi byc zwracany typ...jesli zwracasz int to bedzie "int funkcja()" jesli float to "float funkcja()" itp...poprostu funkcja musi wiedziec co zwraca..void nie zwraca nic..

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

@SOYER mylisz pojęcia - funkcja w C/C++ jeśli nie jest typu void zwraca dokładnie jeden wynik, natomiast ilość wartości owego wyniku może być różna - np. digitalRead zwraca jedną z dwóch możliwych, analogRead jedną z 1024 i tak dalej. Owszem, istnieją funkcję (generatory, iteratorty i takie tam) co zwracają więcej wyników niż jeden, ale nie w C/C++.

Owszem, można zmusić funkcję w C do bycia taką namiastką generatora - bardzo dobrym przykładem jest strtok - ale wymaga to stworzenia dodatkowych mechanizmów zarówno po stronie funkcji, jak i po stronie pfogramu wywołującego.

@Norbert7630 moja rada - poczytaj sobie najpierw o funkcjach (przecież takie już stosujesz, digitalRead chociażby), a potem zacznik konstruować program po kolei, z małych klocków a nie wszystko na raz

Link do komentarza
Share on other sites

41 minut temu, ethanak napisał:

mylisz pojęcia

nie rozumiemy się, wiem, że zwraca jeden wynik, ale w tym przypadku ten wynik może być w 4 wariantach, jak sam napisałeś. Tylko tego się obawiam, że te cztery warianty to już za dużo na ten etap.

Link do komentarza
Share on other sites

Ja bym to napisal tak..

void sprawdz() {
  if(nacisnieto enter) {
    enter = 1;
    } else {
  enter = 0;
  }
  
  if(nacisnieto up) {
    up = 1;
    } else {
  up = 0;
  }
  
  if(nacisnieto down) {
    down = 1;
    } else {
  down = 0;
  }

a pozniej jak powyzej wspomnialem, w odpowiednich miejscach sprawdzam w if'ach jakie mam wartosci guzikow i wykonuje odpowiednie czynnosci...

Link do komentarza
Share on other sites

2 minuty temu, farmaceuta napisał:

Ja bym to napisal tak..


void sprawdz() {
  if(nacisnieto enter) {
    enter = 1;
    } else {
  enter = 0;
  }
  
  if(nacisnieto up) {
    up = 1;
    } else {
  up = 0;
  }
  
  if(nacisnieto down) {
    down = 1;
    } else {
  down = 0;
  }

a pozniej jak powyzej wspomnialem, w odpowiednich miejscach sprawdzam w if'ach jakie mam wartosci guzikow i wykonuje odpowiednie czynnosci...

To już sposób ethanaka lepszy bo nie trzeba tulu zmiennych, tylu operacji. Po co nadpisywać przy każdym obiegu pętli zmienne od przycisków których nikt nie dotykał. Nas  interesuje tylko zmiana. Nie zajmujemy się czymś co się nie zmienia.

 

if stara !=nowa{stara=nowa;}

 

 

  • Lubię! 1
Link do komentarza
Share on other sites

@farmaceuta robisz dokładnie to co ja, tyle że ja potrzebuję do tego jednej zmiennej a Ty ośmiu.

11 minut temu, SOYER napisał:

Tylko tego się obawiam, że te cztery warianty to już za dużo na ten etap.

Wiesz, aby napisać krótkie opowiadanie należy znać:

  • wszystkie litery alfabetu
  • ortografię (przynajmniej w zakresie wyrazów których będziesz używać w opowiadaniu)
  • jakieś podstawy gramatyki (np. "co to jest zdanie"), z czym wiążą się
  • zasady interpunkcji

Bez tego raczej trudno takie opowiadanie napisać...

Dopiero po spełnieniu tych warunków (koniecznych) można zacząć uczyć się pisać.

Dokładnie tak samo jest z programowaniem.

 

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.