Skocz do zawartości

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


Pomocna odpowiedź

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

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;
  }
}

 

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
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
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
4 minuty temu, SOYER napisał:

??

Takie tam... as far as I remember correctly. To z czasów, kiedy w necie używało się trochę więcej niż 'lol' i 'hahaha' 😉

  • Pomogłeś! 1
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".

@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

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