Skocz do zawartości

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


Norbert7630

Pomocna odpowiedź

12 godzin temu, Norbert7630 napisał:

SprawdzPrzycisk(){....to jest ta osobna funkcja?

tak

 

12 godzin temu, Norbert7630 napisał:

czy nie powinna być jakoś zadeklarowana w programie podobnie jak przyciski define czy zmienne int?

zrobiłeś kurs arduino Forbota?

10 godzin temu, Norbert7630 napisał:

także nic nie wiem co i jak i z czym🥶

napisałem wcześniej, wróć do tego posta jeszcze raz i powoli go czytaj od początku do końca, tam masz napisane jak po kolei rozwiązać problem niezależnego sterowania dwoma ledami i sposobu przekazania aktualnego stanu tych ledów do funkcji switch w której rozpiszesz sobie 4 różne ekrany, po jednym dla każdej z możliwych sytuacji.

Tutaj był fragment o czterech różnych ekranach(tzn. cztery różne informacje wyświetlane na jednym ekranie zależnie od tego jak świecą diody).

13 godzin temu, Norbert7630 napisał:

Teraz ekran i u wreszcie przyda się "switch":

masz cztery opcje(różne treści na ekranie): albo TYLKO jeden silnik jest włączony (1opcja), albo TYLKO drugi silnik jest włączony(2opcja), albo OBA silniki są włączone(3opcja), albo OBA silniki są wyłączone(4opcja)

 

  • Pomogłeś! 1
Link do komentarza
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

SprawdzPrzycisk(){

     if (digitalRead(przyciskZielona)== LOW){
       zrób_coś1;
     }
     if (digitalRead(przyciskCzerwona)== LOW){
        zrób_coś2;
     }
     if (digitalRead(przyciskWylacz)== LOW){
        zrób_coś3;
}

@SOYER przykładowa cześć twoja jak ma to wyglądać a poniżej jak ja to rozumie

#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 wylaczSilnik1 11  //zdefiniowane piny dla przycisków
#define przyciskSilnik1  9
#define przyciskSilnik2  10
#define wylaczSilnik2 8
#define Silnik1 2   //zdefiniowane piny dla silnikow
#define Silnik2 3
int przycisk = 1;   //zmienna z przypisaną wartością



void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(wylaczSilnik2, INPUT_PULLUP);
  pinMode(wylaczSilnik1, INPUT_PULLUP); //ustawienie pinów dla przycisków " wejście" podciągnięty
  pinMode(przyciskSilnik1, INPUT_PULLUP);  //rezystor wewnętrzny PULLUP
  pinMode(przyciskSilnik2, INPUT_PULLUP);
  pinMode(Silnik1, OUTPUT);  //ustawienie pinów dla silnikow "wyjście"
  pinMode(Silnik2, OUTPUT);
  
  
}
void loop() {
  SprawdzPrzycisk();
}
  void SprawdzPrzycisk(){
  if (digitalRead(przyciskSilnik1)== LOW){  //jesli przycisk wcisniety
      digitalWrite(Silnik1, HIGH);}  //  wlacz silnik 1
  if (digitalRead(przyciskSilnik2)== LOW){ //jesli przycisk wcisniety
      digitalWrite(Silnik2, HIGH) ;}  //wlacz silnik 2
  if (digitalRead(wylaczSilnik1)== LOW){ //jesli przycisk wcisniety
       digitalWrite(Silnik1, LOW);} //wylacz silnik 1
  if (digitalRead(wylaczSilnik2)== LOW){ //jesli przycisk wcisniety                              
        digitalWrite(Silnik2, LOW);} //wylacz silnik 2
  }

 

Link do komentarza
Share on other sites

SprawdzPrzycisk(){   //ta sama funkcja inny kod?

     if (digitalRead(przyciskZielona)== LOW){
       LedZiel=1;
     }
     if (digitalRead(przyciskCzerwona)== LOW){
        LedCzer=1;
     }
     if (digitalRead(przyciskWylacz)== LOW){
        zrób_coś3;
}

tak to ma wyglądać?

int silnik1 = 1
int silnik2 = 1
SprawdzPrzycisk(){

     if (digitalRead(przyciskSilnik1)== LOW){
       silnik1 = 1;
     }
     if (digitalRead(przyciskSilnik2)== LOW){
        silnik2 = 1;
     }
     if (digitalRead(wylaczSilnik1)== LOW){
        silnik1 = 0;
     }
     if (digitalRead(wylaczSilnik2)== LOW){
        silnik2 = 0;
     }

 

Link do komentarza
Share on other sites

@SOYER No właśnie tego nie mogłem zrozumieć dlaczego pokazujesz tą samą funkcje 3 razy 😅 , czyli najpierw funkcja SprawdzPrzycisk(), potem funkcja Sterujemy(), następnie warunki ,,if''    if((silnik1==0) && (silnik2==0)){
    opcja = 1;}    a na końcu switch/case?

Link do komentarza
Share on other sites

#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 wylaczSilnik1 11  //zdefiniowane piny dla przycisków
#define przyciskSilnik1  9
#define przyciskSilnik2  10
#define wylaczSilnik2 8
#define Silnik1 2   //zdefiniowane piny dla silnikow
#define Silnik2 3

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(wylaczSilnik2, INPUT_PULLUP);
  pinMode(wylaczSilnik1, INPUT_PULLUP); //ustawienie pinów dla przycisków " wejście" podciągnięty
  pinMode(przyciskSilnik1, INPUT_PULLUP);  //rezystor wewnętrzny PULLUP
  pinMode(przyciskSilnik2, INPUT_PULLUP);
  pinMode(Silnik1, OUTPUT);  //ustawienie pinów dla silnikow "wyjście"
  pinMode(Silnik2, OUTPUT);
   }
void loop() {
  SprawdzPrzycisk();
}
   int opcja = 1;
   int silnik1 = 1;
   int silnik2 = 1;

void SprawdzPrzycisk(){
  if (digitalRead(przyciskSilnik1)== LOW){  //jesli przycisk wcisniety
      digitalWrite(Silnik1, HIGH);
      silnik1 = 1;}  //  wlacz silnik 1
  if (digitalRead(przyciskSilnik2)== LOW){ //jesli przycisk wcisniety
      digitalWrite(Silnik2, HIGH) ;
      silnik2 = 1;}  //wlacz silnik 2
  if (digitalRead(wylaczSilnik1)== LOW){ //jesli przycisk wcisniety
       digitalWrite(Silnik1, LOW);
       silnik1 = 0;} //wylacz silnik 1
  if (digitalRead(wylaczSilnik2)== LOW){ //jesli przycisk wcisniety                              
        digitalWrite(Silnik2, LOW);
       silnik2 = 0; } //wylacz silnik 2
    
  if((silnik1==0) && (silnik2==0)){
    opcja = 1;}
  if((silnik1==1) && (silnik2==0)){
     opcja = 2;}  
  if((silnik1==0) && (silnik2==1)){
     opcja = 3;} 
  if((silnik1==1) && (silnik2==1)){
     opcja = 4;} 

  switch(opcja){
 case 1:
  display.clearDisplay();
     display.setTextSize(1,2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,0);             
  display.println("SILNIK 1:");
  display.setCursor(60,0);
  display.println("STOP");
  display.setCursor(0,20);             
  display.println("SILNIK 2:");
  display.setCursor(60,20);
  display.println("STOP");
   display.setCursor(0,40);
  display.println("STEROWNIK SILNIKOW");
  display.display();  
 break;

 case 2:
  display.clearDisplay(); 
    display.setTextSize(1,2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,0);             
  display.println("SILNIK 1:");
  display.setCursor(60,0);
  display.println("START");
  display.setCursor(0,20);             
  display.println("SILNIK 2:");
  display.setCursor(60,20);
  display.println("STOP");
   display.setCursor(0,40);
  display.println("STEROWNIK SILNIKOW");
  display.display();   
 break;

 case 3:
  display.clearDisplay(); 
    display.setTextSize(1,2);             
  display.setTextColor(SSD1306_WHITE);        
  display.setCursor(0,0);             
  display.println("SILNIK 1:");
  display.setCursor(60,0);
  display.println("STOP");
  display.setCursor(0,20);             
  display.println("SILNIK 2:");
  display.setCursor(60,20);
  display.println("START");
   display.setCursor(0,40);
  display.println("STEROWNIK SILNIKOW");
  display.display();     
 break;

 case 4:
  display.clearDisplay();
    display.setTextSize(1,2);             
  display.setTextColor(SSD1306_WHITE); 
    display.setCursor(0,0);             
  display.println("SILNIK 1:");
  display.setCursor(60,0);
  display.println("STOP");
    display.setCursor(0,20);             
  display.println("SILNIK 2:");
  display.setCursor(60,20);
  display.println("STOP");
  display.setCursor(0,40);
  display.println("STEROWNIK SILNIKOW");
  display.display();   
 break;
}
  }

ten kod programu oczywiście nie działa a przynajmniej nie tak jak bym chciał😅 choć włączając silniki każdy osobno i wyłączając  wyświetlacz zachowuje się poprawnie czyli strat silnik1 wyświetla start, stop wyświetla stop, gorzej już jak włączę oba silniki no zresztą nie ważne, ale może łatwiej ci będzie zrozumieć gdzie tu błąd i jak mi z tym pomóc.

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

22 minuty temu, Norbert7630 napisał:

gorzej już jak włączę oba silniki

a powiedz mi drogi kolego czym u Ciebie różni się case 1 od case 4??

Generalnie brawo za funkcję switch, ładnie ogarnąłeś sprawę wraz z funkcją SprawdzPrzycisk().👍

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

No tak zdublowałem  casy 😅 eh to już zmęczenie było. Ale jedno jest pewne bez twoich porad, pomocy błądziłbym jak ślepy po omacku bardzo, bardzo, bardzo dziękuję @SOYER no i trzeba też z powrotem wrócić do kursu forbota bo się trochę zapomniało mi co nie których nawet prostych rzeczy😀

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

@Norbert7630 teraz pokombinuj jak to obsłużyć z poziomu menu na ekranie. Cztery przyciski jak masz, ale służące jako enter, back, up, down. Wybierasz z pozycji menu konkretny silnik, enter,  wyświetla się on i off, wybierasz która opcja i znowu enter.

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.