Skocz do zawartości

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


Pomocna odpowiedź

30 minut temu, Norbert7630 napisał:

😱yyyyyy....nie wiem co ci odpisać 😅że niby ja takie coś mogę wykonać??? 

Tak😉 To wlasnie Ty mozesz cos takiego wykonac...zadnego przypisywania konkretnych guzikow do silnika, guziki sluza tylko do poruszania sie po menu i wyboru/zmian interesujacych Cie danych...switch case przyjdzie Ci z pomoca..😉 

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

@Norbert7630 kilka osobnych funkcji(menu główne, opcje, cokolwiek) każda ma w środku swojego switch(pozycja)/case, przyciski góra dół zwiększają lub zmniejszają zmienną "pozycja", przyciski enter i back zmieniają  aktualną funkcję.

Case-y w kolejnych switchach to po prostu wyświetlane ekrany i instrukcje które mają się w danym momencie wykonać(np: on/off).

 

 

Edytowano przez SOYER
  • Lubię! 1
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

No właśnie teraz mam chwilkę na zastanowienie się nad tym, bo calutki dzień zajęty, próbuję sobie to inne menu wyobrazić. Tylko zastanawia mnie bo kolega @farmaceuta napisał: ,,żadnego przypisywania konkretnych guzików do silnika...'' Tak na mój chłopski rozum a naprawdę mam chłopski🤣 to czy program odczyta wciśniecie przycisku ''enter'' jako uruchomienie silnika po wejściu do opcji ON/OFF? np.:

#define przyciskEnter 2 // przyciski do poruszania się po menu
#define przyciskGora 3  
#define przyciskDol 4
#define przyciskBack 5  

i jeśli chodzi o przyciski to tyle? Domyślam się @SOYER że jedna funkcja tu już nie przejdzie SprawdzPrzyciski() 😅. Czyli stare menu było takie: na wyświetlaczu u góry ''silnik1' obok pojawia się albo ,,start'' albo ''stop" zależy czy włączony czy wyłączony, poniżej ,,silnik2" i to samo co powyżej. Nowe menu to ,,silnik1" potem pojawia się ,,ON/OFF" i jeżeli chce go włączyć to zostaje tylko ,,ON" ? Czy może ma być znacznikiem zaznaczone 

  > ON   OFF   //włączony
    ON  >OFF   //wyłączony

Jeżeli miałbym zacząć to raczej od warunków ,,if" Hm....trochę zmęczony już jestem i chyba bredzę, musiałbym robić funkcje dla przycisków, funkcję dla menu wyświetlacza, no i funkcja sterowania silników to znaczy żeby program wiedział że w momencie pojawienia się na wyświetlaczu opcji ,,ON" ma uruchomić np. ,,silnik1" ?

 

Link to post
Share on other sites
(edytowany)

Musisz zrobic sobie maszyne stanow...wciskasz enter, wchodzisz do menu, wyswietlasz co chcesz i przechodzisz "automatycznie" do kolejnego case lub switch case...i wtedy twoj enter reaguje tylko w zakresie tego case w ktorym sie znajdujesz...i mozesz zarzadzac silnikiem...i tak jest ze wszystkimi guzikami...w skrocie zamiar jest prosty, masz kilka guzikow a mozesz nimi obsluzyc mnostwo funkcji

Edytowano przez farmaceuta
Link to post
Share on other sites

Chociaż może jednak nie, i początek zostawiłbym w tej formie:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED szerokość
#define SCREEN_HEIGHT 64 // OLED wysokość
#define OLED_RESET     4 
#define SCREEN_ADDRESS 0x3c //adres fizyczny wyswietlacza
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define przyciskEnter 2  //zdefiniowane piny dla przycisków
#define przyciskGora 3
#define przyciskDol 5
#define przyciskBack 6
#define Silnik1 2   //zdefiniowane piny dla silnikow
#define Silnik2 3

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(przyciskEnter 2, INPUT_PULLUP);
  pinMode(przyciskGora, INPUT_PULLUP); //ustawienie pinów dla przycisków " wejście" podciągnięty
  pinMode(przyciskDol, INPUT_PULLUP);  //rezystor wewnętrzny PULLUP
  pinMode(przyciskBack, INPUT_PULLUP);
  pinMode(Silnik1, OUTPUT);  //ustawienie pinów dla silnikow "wyjście"
  pinMode(Silnik2, OUTPUT);
   }
void loop() {

 

Link to post
Share on other sites
(edytowany)
3 minuty temu, Norbert7630 napisał:

@farmaceuta maszyna stanów? czy dałbyś mi jakiś link gdzie mógłbym o tym poczytać?😀 Na forbocie mają może taki kurs?

Napewno na Forbocie cos jest...maszyna stanow to wykorzystanie switch-case  w taki sposob ze latasz w kolko i wchodzisz w taki case ktory Cie interesuje i po danej reakcji przechodzisz dalej lub wracasz na poczatek lub co tam chcesz...

Edytowano przez farmaceuta
Link to post
Share on other sites

@Norbert7630 Popatrz:

IMG_20220113_190119.thumb.jpg.54515483dfa19a43c1c1b5fdd64df903.jpg

te trzy kwadraty to osobne funkcje, napisałem Ci nad nimi nawet przykładowe nazwy, w środku każdej funkcji siedzi switch, pierwszy case w funkcji to kiedy wskaźnik jest na pierwszej pozycji, a drugi case gdy wskaźnik jest na drugiej pozycji. Po wciśnięciu enter wywołujesz kolejną funkcję (z on i off)dla tego silnika przy którym był wskaźnik, a będąc w funkcji silnik_1 lub silnik_2 i wciskając BACK, wracasz (wywołujesz) znowu funkcję menu_glowne().

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

void menuGlowne(){
  if(przycisk jakis tam ==LOW){
    menuEkran = 1;
    
    switch(menuEkran){
      case 1:
    wyswietl cos tam....

czy to ma być cos takiego odnośnie np. funkcji pierwszej?

Link to post
Share on other sites

Najlepiej z guzikow zrobic funkcje i wywolujesz w tych case gdzie potrzebujesz uzycia tych guzikow...wtedy poruszasz sie w obszarze programu ktory Cie interesuje...

Link to post
Share on other sites
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;
} 
}

przy tym kodzie wskaźnik przeskakuje z góry na dół i na odwrót no można powiedzieć że ok, ale mam problem z pozostałymi funkcjami no niech się nazywają bo łatwiej mi ogarnąć

menuSilnik1();
  menuSilnik2();

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

menuSilnik1();
menuSilnik2();

menuEkran1 = 1;
menuEkran2 = 1;

void menuSilnik1(){
  if(przycisk)==LOW{
    menuEkran1 = 1;
    
    switch(menuEkran1){
      case 1:
        //wyswietl na oled cos tam....
        
 void menuSilnik2(){
   //i dalej analogicznie do menuSilnik1..?

 

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