Skocz do zawartości

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


Pomocna odpowiedź

29 minut temu, Norbert7630 napisał:

czyli mam tworzyć następne funkcje analogicznie do pierwszej?

Tak.

  • Lubię! 1
Link to post
Share on other sites
(edytowany)

Potem napisz kompletny kod, tzn. z przejściem pomiędzy menu_glowne do menu_silnik1 i menu_silnik2.

Edytowano przez SOYER
  • Lubię! 1
Link to post
Share on other sites

No i właśnie tu zaczynają się schody nie mogę poradzić sobie z tym przejściem z jednej funkcji do drugiej

void loop() {
  menuGlowne();
}

int menuEkran = 1;

void menuGlowne(){
 if (digitalRead(przyciskGora)== LOW){  //jesli przycisk wcisniety
     menuEkran = 1;}  
 if (digitalRead(przyciskDol)== LOW){  //jesli przycisk wcisniety
     menuEkran = 2;}  
  
 
     switch(menuEkran){  //instrukcja sterująca głównym menu na wyswietlaczu
  case 1:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("> SILNIK 1"); //menu glowne 
  display.setCursor(0,35);        //  znacznik na silnik 1   
  display.println("  SILNIK 2");
  display.display(); 
  break;
 case 2:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("  SILNIK 1"); //menu glowne 
  display.setCursor(0,35);        //  znacznik na silnik 2   
  display.println("> SILNIK 2");
  display.display(); 
break;
} 
}

do tego momentu to rozumie przynajmniej tak mi się wydaje, utworzona funkcja menuGlowne(); void menuGłowne(){ co się ma w niej dziać, if wciśnij przycisk i  dalej  za pomocą instrukcji sterującej switch(menuEkranu){ case 1: wyświetla jeden ekran , case 2: wyświetla drugi ekran, i teraz już dalej nie bardzo wiem jak to zrobić, miałem wrażenie że powinienem zrobić jeszcze jeden if w void menuGlowne(){

if (digitalRead(przyciskEnter)==LOW){  //jesli przycisk wcisnięty przejdz do nowej funkcji
   menuSilnik1();
  
  void menuSilnik1(){
    //i tutaj dalej z tym instrukcjami warukowymi "if" analogicznie co w funkcji void menuGlowne(){

 

  • Lubię! 1
Link to post
Share on other sites

jednak jak jakimś cudem uda mi się stworzyć tą druga funkcje menusilnik1(); i nie wywali mi takiego błędu :

exit status 1
  'menuSilnik1' was not declared in this scope

to znowu przesuwanie znacznika z silnik1 na silnik2 i z powrotem jest ok ale kiedy wciskam enter to  menu główne miga bardzo szybko z menu silnik1 masakra 🤔 po prostu nie wiem jak ułożyć ten blok kodu a kilka opcji zmiany kodu w inny sposób próbowałem. Coś robię źlei nie mogę znaleźć błędu.

Link to post
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

(edytowany)

Bo to troche nie tak...naciskasz guzik, wchodzisz do pierwszego case, wyswietlasz, przechodzisz do kolejnego case w ktorym sprawdzasz guziki...jesli znow wcisnales to wchodzisz do kolejnego case lub switch-case (w zaleznosci co potrzebujesz) wyswietlasz, robisz co chcesz, przechodzisz do nastepnego case/switch i znowu sprawdzasz guzik..

Chodzi o to zeby guzik zmienial tylko to co chcesz...nie moze on byc dostepny w petli loop() bo jesli bedziesz w podmenu i nacisniesz, to znow wskoczysz w menuglowne..

Edytowano przez farmaceuta
  • Lubię! 1
Link to post
Share on other sites

@farmaceutasorki ale twojej podpowiedzi też nie rozumiem, w ogóle to już nic nie wiem pomieszało mi się totalnie. @SOYER na początku widziałem to tak że miały być 3 funkcje każdy ze switch/case przejście z pierwszej do drugiej potem powrót i przejście z pierwszej do trzeciej czyli  

menuGlowne > silnik1 > back do menuGlownego > silnik2 back do menuGlownego

w menuGlownym w którymś if-ie powinno być przekierowanie do menu silnik1 w menu silnik1 powinno być przekierowanie do menuGlowne i znowu z menuGlownego do menu silnik2 i back do głównego. ale okazuje się że tak banalną sprawę nie mogę rozwiązać żeby to głupie arduino zrozumiało czego chce 😡 (sorki poniosło mnie)

  • Lubię! 1
Link to post
Share on other sites
9 minut temu, Norbert7630 napisał:

początku widziałem to tak że miały być 3 funkcje każdy ze switch/case przejście z pierwszej do drugiej potem powrót i przejście z pierwszej do trzeciej czyli  


menuGlowne > silnik1 > back do menuGlownego > silnik2 back do menuGlownego

w menuGlownym w którymś if-ie powinno być przekierowanie do menu silnik1 w menu silnik1 powinno być przekierowanie do menuGlowne i znowu z menuGlownego do menu silnik2 i back do głównego. ale okazuje się że tak banalną sprawę nie mogę rozwiązać żeby to głupie arduino zrozumiało czego chce 😡 (sorki poniosło mnie)

Dobrze to widzisz.

Wklej cały kod z menu_glownym i menu_silnik1 i 2.

Będziemy poprawiać po kolei.

  • Pomogłeś! 1
Link to post
Share on other sites

@SOYER  Oki zajmę się tym  jutro z rana, moja żoneczka pojedzie do pracy zrobię sobie kawę i siądę do tego, bo dzisiaj już mam taki bajzel w głowie i prawie się zagotowałem jak mi błędy zaczęło wywalać. Napisze jutro i wkleję, dzięki Ci za cierpliwość😅.

Link to post
Share on other sites
void loop() {
  menuGlowne();
} 
int menuEkran = 1;
int menuEkran1 = 1;

void menuGlowne(){
 if (digitalRead(przyciskGora)== LOW){  //jesli przycisk wcisniety
     menuEkran = 1;}  
  
 if (digitalRead(przyciskDol)== LOW){  //jesli przycisk wcisniety
     menuEkran = 2;}  
 
 if (digitalRead(przyciskEnter)== LOW){  //jesli przycisk wcisniety
   menuSinik1(); }  
    
     switch(menuEkran){
  case 1:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("> SILNIK 1"); //menu glowne 
  display.setCursor(0,35);        //  znacznik na silnik 1   
  display.println("  SILNIK 2");
  display.display(); 
  break;
 case 2:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("  SILNIK 1"); //menu glowne 
  display.setCursor(0,35);        //  znacznik na silnik 2   
  display.println("> SILNIK 2");
  display.display(); 
break;
 }

menuSinik1();
}
void menuSilnik1(){
 if (digitalRead(przyciskGora)== LOW){  //jesli przycisk wcisniety
     menuEkran1 = 1;} 
     if (digitalRead(przyciskDol)== LOW){  //jesli przycisk wcisniety
     menuEkran1 = 2;} 
  if (digitalRead(przyciskBack)== LOW){  //jesli przycisk wcisniety
     menuGlowne();}    

switch(menuEkran1){
 case 1:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,10);             
  display.println("SILNIK 1");
  display.setCursor(10,40);   //menu silnik 1(wylaczony)          
  display.println(" ON");
  display.setCursor(60,40);             
  display.println("> OFF");
  display.display(); 
break;

case 2:
display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,10);             
  display.println("SILNIK 1");
  display.setCursor(10,40);   //menu silnik 2(wylaczony)          
  display.println("> ON");
  display.setCursor(60,40);             
  display.println(" OFF");
  display.display(); 
break;
}
 }

oczywiście nie działa, 3 funkcji nawet nie 😔

Link to post
Share on other sites

Żeby było na razie prosto i zrozumiale, skasuj if-y sprawdzające przyciski sprzed switch-a i wstaw je do case-ów, (wszystkich).

Zrób to z głową, pomyśl które ify do którego case. 

To pomysł toporny ale prosty.

  • Lubię! 1
  • Pomogłeś! 1
Link to post
Share on other sites
(edytowany)
3 minuty temu, farmaceuta napisał:

Masz zly nawias klamrowy przy menusilnik1...dlatego blad Ci wywala

Dokładnie, policz i sprawdź nawiasy klamrowe w tej funkcji.

Edytowano przez SOYER
  • Pomogłeś! 1
Link to post
Share on other sites
15 minut temu, SOYER napisał:

Żeby było na razie prosto i zrozumiale, skasuj if-y sprawdzające przyciski sprzed switch-a i wstaw je do case-ów, (wszystkich).

Zrób to z głową, pomyśl które ify do którego case. 

To pomysł toporny ale prosty.

Dokladnie tak...i wcale nie taki toporny, jak juz czlowiek zalapie gdzie co dawac to mozna na grubo rozbudowac takie menu bez wiekszego uszczerbku na zdrowiu psychicznym😅

  • Pomogłeś! 1
Link to post
Share on other sites
  • Gieneq zmienił tytuł na: Menu na oled 1306 z obsługą silników

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.