Skocz do zawartości

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


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

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

W tej funkcji mozna tez nie zwracac nic...dopisac tyle zmiennych ile guzikow i jak wcisniety ktorys to przypisac jedynke, a jak nie to zero...a pozniej tylko 

if (enter)
  zrob cos 
  
  if(up)
  zrob cos 
  itp..

 

  • Pomogłeś! 1

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.

 

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

@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

Masz całkowitą racje @ethanak  za bardzo chce od razu wszystko 😅, bo w zasadzie jakiś tam program do sterowania silnikami już mam, ale zaciekawiło mnie to co napisał kolega @SOYER że można to wykonać w inny sposób, no chciałem koniecznie spróbować, ale to nie ta wiedza jeszcze jej mało u  mnie. 

  • Lubię! 1
2 minuty temu, Norbert7630 napisał:

ale to nie ta wiedza jeszcze jej mało u  mnie. 

Spokojnie, zdążysz się nauczyć, nikt tu nie urodził się informatykiem 🙂

 

  • Lubię! 1
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.

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

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

@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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...