Skocz do zawartości

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


Norbert7630

Pomocna odpowiedź

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 nie chciałem wam przeszkadzać w dyskusji dla was merytorycznej a dla mnie ciemnej masy nic nie zrozumiałej😅,  i w zasadzie tak bardziej już dla rozrywki żeby odejść na chwilę od tego problemu to stworzyłem na if-ach i switch/case,  twór rodem z prehistorii komputerowej hahahaha 🤣 oczywiście wszystko w ramach żartu.

#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 8  //zdefiniowane piny dla przycisków
#define przyciskGora  9
#define przyciskDol  10
#define przyciskBack 11
#define Silnik1 2   //zdefiniowane piny dla silnikow
#define Silnik2 3

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(przyciskEnter, 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() {
  menuGlowne();
}
int menuEkran = 1;


void menuGlowne(){
  
  switch(menuEkran){
    
  case 1:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("> SILNIK 1"); 
  display.setCursor(0,35);          
  display.println(" SILNIK 2");
  display.display(); 
  if (digitalRead(przyciskEnter)== LOW){  
      menuEkran = 2;}
 if (digitalRead(przyciskDol)== LOW){  
      menuEkran = 4;}
 
    break;
 case 2:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 1");
  display.setCursor(30,20);             
  display.println("> OFF");
  display.setCursor(30,40);             
  display.println(" ON");
  display.display();
  if (digitalRead(przyciskDol)== LOW){
      (digitalWrite(Silnik1, HIGH));
  menuEkran = 3;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;

  case 3:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 1");
  display.setCursor(30,20);            
  display.println(" OFF");
  display.setCursor(30,40);             
  display.println("> ON");
  display.display();
  if (digitalRead(przyciskGora)== LOW){
    (digitalWrite(Silnik1, LOW));
  menuEkran --;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;
 
  case 4:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println(" SILNIK 1"); 
  display.setCursor(0,35);           
  display.println("> SILNIK 2");
  display.display(); 
  if (digitalRead(przyciskEnter)== LOW){  
      menuEkran = 5;}
 if (digitalRead(przyciskGora)== LOW){  
      menuEkran = 1;}
      break;

   case 5:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 2");
  display.setCursor(30,20);             
  display.println("> OFF");
  display.setCursor(30,40);             
  display.println(" ON");
  display.display();
  if (digitalRead(przyciskDol)== LOW){
    (digitalWrite(Silnik2, HIGH));
  menuEkran = 6;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;

  case 6:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 2");
  display.setCursor(30,20);             
  display.println(" OFF");
  display.setCursor(30,40);             
  display.println("> ON");
  display.display();
  if (digitalRead(przyciskGora)== LOW){
    (digitalWrite(Silnik2, LOW));
  menuEkran --;}
  if (digitalRead(przyciskBack)== LOW){ 
  menuEkran=4;}
  break;
  }
}

 

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

a stoję dalej tu i jestem już chyba zmęczony tym na dzisiaj

void loop() {
  menuGlowne();
}
int menuEkran = 1;


void menuGlowne(){
  
  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(); 
  if (digitalRead(przyciskDol)== LOW){  //jesli przycisk wcisniety
      menuEkran = 2;}
 
 
    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();
  if (digitalRead(przyciskGora)== LOW){  //jesli przycisk wcisniety
  menuEkran = 1;}
  break;
  }
}

 

Link do komentarza
Share on other sites

13 minut temu, Norbert7630 napisał:

no nie chciałem wam przeszkadzać w dyskusji dla was merytorycznej a dla mnie ciemnej masy nic nie zrozumiałej😅,  i w zasadzie tak bardziej już dla rozrywki żeby odejść na chwilę od tego problemu to stworzyłem na if-ach i switch/case,  twór rodem z prehistorii komputerowej hahahaha 🤣 oczywiście wszystko w ramach żartu.


#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 8  //zdefiniowane piny dla przycisków
#define przyciskGora  9
#define przyciskDol  10
#define przyciskBack 11
#define Silnik1 2   //zdefiniowane piny dla silnikow
#define Silnik2 3

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(przyciskEnter, 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() {
  menuGlowne();
}
int menuEkran = 1;


void menuGlowne(){
  
  switch(menuEkran){
    
  case 1:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println("> SILNIK 1"); 
  display.setCursor(0,35);          
  display.println(" SILNIK 2");
  display.display(); 
  if (digitalRead(przyciskEnter)== LOW){  
      menuEkran = 2;}
 if (digitalRead(przyciskDol)== LOW){  
      menuEkran = 4;}
 
    break;
 case 2:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 1");
  display.setCursor(30,20);             
  display.println("> OFF");
  display.setCursor(30,40);             
  display.println(" ON");
  display.display();
  if (digitalRead(przyciskDol)== LOW){
      (digitalWrite(Silnik1, HIGH));
  menuEkran = 3;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;

  case 3:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 1");
  display.setCursor(30,20);            
  display.println(" OFF");
  display.setCursor(30,40);             
  display.println("> ON");
  display.display();
  if (digitalRead(przyciskGora)== LOW){
    (digitalWrite(Silnik1, LOW));
  menuEkran --;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;
 
  case 4:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,10);             
  display.println(" SILNIK 1"); 
  display.setCursor(0,35);           
  display.println("> SILNIK 2");
  display.display(); 
  if (digitalRead(przyciskEnter)== LOW){  
      menuEkran = 5;}
 if (digitalRead(przyciskGora)== LOW){  
      menuEkran = 1;}
      break;

   case 5:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 2");
  display.setCursor(30,20);             
  display.println("> OFF");
  display.setCursor(30,40);             
  display.println(" ON");
  display.display();
  if (digitalRead(przyciskDol)== LOW){
    (digitalWrite(Silnik2, HIGH));
  menuEkran = 6;}
  if (digitalRead(przyciskBack)== LOW){  
  menuEkran=1;}
  break;

  case 6:
  display.clearDisplay();
  display.setTextSize(2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(20,0);             
  display.println("SILNIK 2");
  display.setCursor(30,20);             
  display.println(" OFF");
  display.setCursor(30,40);             
  display.println("> ON");
  display.display();
  if (digitalRead(przyciskGora)== LOW){
    (digitalWrite(Silnik2, LOW));
  menuEkran --;}
  if (digitalRead(przyciskBack)== LOW){ 
  menuEkran=4;}
  break;
  }
}

 

Brawo!! o to chodziło... pięknie wszystko napisałeś, sprawdzałeś ten kod? Powinno działać, prawidłowe odniesienia if do case, 👍👍👍

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

13 minut temu, Norbert7630 napisał:

a stoję dalej tu i jestem już chyba zmęczony tym na dzisiaj


void loop() {
  menuGlowne();
}
int menuEkran = 1;


void menuGlowne(){
  
  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(); 
  if (digitalRead(przyciskDol)== LOW){  //jesli przycisk wcisniety
      menuEkran = 2;}
 
 
    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();
  if (digitalRead(przyciskGora)== LOW){  //jesli przycisk wcisniety
  menuEkran = 1;}
  break;
  }
}

 

tu nie rozumiem o co Ci chodzi? Co nie pasuje?

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

12 minut temu, Norbert7630 napisał:

a dla mnie ciemnej masy nic nie zrozumiałej

Nie jęcz tylko zajmij się odpowiednim rozdziałem kursu (AFAIRC ktoś Ci już podawał którym).

Chcesz proste zadanie? No to napisz kawałek kodu, który wypisze Ci na wyjściu serial "Wcisniety" jeśli wcisnąłeś przycisk, "Puszczony" jeśli puściłeś, ale nic nie będzie pisać jeśli trzymasz przycisk albo go nie trzymasz...

 

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

14 minut temu, ethanak napisał:

as far as I remember correctly.

o ile dobrze pamiętam? No mniejsza  z tym 😅 czyli jak wcisnę przycisk ma sie wyświetlić w monitorze szeregowym ''wciśniety' a po jego puszczeniu ''puszczony''. Informacja ma się pojawić tylko raz, czyli muszę wyeliminować sytuację żę gdy wcisne przycisk odpowiedz w monitorze szeregowym ,,wciśniety " nie bedzie się powtarzała aż do momentu puszczenia i analogicznie do tego ,,puszczony".

Link do komentarza
Share on other sites

@SOYER ten kod napisany dla żartu działa, oczywiście tak jak jest napisany, a jeśli chodzi o tą część kodu przy której stoje to poprostu zdechłem bo już nie wiem co dalej, działa jak powinien, po załadowaniu na wyświetlaczu pojawia się menu silnik1 poniżej silnik2 z markerem na silnik1, wciskam przycisk w dół marker wędruje na silnik2 i przycisk góra marker na silnik1 więc ok. Alez opcji silnik1 chce wejsć do opcji silnik1 off/on z markerem na off

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.