Skocz do zawartości

Przeskakiwanie na ekranie funkcji przyciskiem


piotrek_brt

Pomocna odpowiedź

@ethanak @ethanak Sory  juz sie poprawilem wlasnie zastanawialem sie jak dodac kod a teraz juz wiem dzieki . Własnie o to mi chodzi aby byl jeden szkic tylko jak dopisac wlasnie aby chodzila mi ten wskaznik a jak przelacze aby mi pokazal tenperature tylko wlasnie mi chodzi jak wstawic ten wskaznik aby jak bede krecil potenciometrem aby wskaznik sie podnosil jak dopisac czujnik do wyswietlanego wlasnie wskaznika 

 

Link do komentarza
Share on other sites

Rozumiem, że nie chcesz gotowego kodu a sam go napiszesz.

Oczywiście - nie da się na jednym rdzeniu robić dwóch rzeczy na raz. Ale można to zrobić szybciutko po kolei - a jeśli dobrze to przemyślisz to będziesz miał swój efekt.

Załóżmy, że na początku funkcji loop siedzi Twój kod menu. Kod wykonuje się szybko, nie blokuje praktycznie procesora (pomijając jakieś delaje w debouncingu, które nie są do niczego potrzebne), a gdzieś w jakiejś zmiennej (masz już taką, możesz skorzystać z WhichScreen) siedzi numerek wyświetlanego ekranu.

Teraz trzeba tylko dopisać część wyświetlającą właściwe rzeczy. W telegraficznym skrócie wyglądałoby to tak:

void loop()
{
	    
	//wybieramy ekran tak jak poprzednio

    switch (WhichScreen) {
      case 1:
        obsluga_paliwomierza();
        break;
      case 2:
        obsluga_szybkosciomierza();
        break;
     // i tak dalej

Musisz tylko pamiętać, że masz pozbyć się każdego jednego delaya. Dla debouncingu będzie to proste: zamiast kombinować zastosuj po prostu bibliotekę Bounce2 (w przykładach jest pokazana obsługa kilku klawiszy). A w procedurach obsługi... cóż, musisz doczytać jak pozbyć się delay i zastosować millis (na przykład tutaj).

Wystarczy?

Ogólnie te kursy po coś są, warto do nich sięgnąć.

Edytowano przez ethanak
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

Wygrałem taki kod ale gdy wejdę w LcdBarGraph czyli paliwomierz to pokaże  mi wartość ale gdy grece czujnikiem nie zmienia się wartość dopiero jak przelecę menu i wrócę znów to paliwomierza to zmieni się wartość chodzi o to ze nie zmienia się wartość tak jak by na żywo jak kręcę  

#include <Wire.h>
#include <LiquidCrystal.h>
#include <LcdBarGraph.h>

  byte lcdNumCols = 16; // -- number of columns in the LCD
byte sensorPin = A5;  
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
LcdBarGraph lbg(&lcd, lcdNumCols);
 
int WhichScreen =1;   // This variable stores the current Screen number
boolean hasChanged = true;
const int buttonPin = 8;    // the number of the pushbutton pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers
 
void setup()
{
  lcd.begin(16, 2);
  pinMode(buttonPin, INPUT);
   
}
void loop()
{
 
  if (hasChanged == true) {
   
  switch(WhichScreen) {
    case 1:
    {
      LcdBarGraph();

   
    }  
      break;
   
    case 2:
      {
        secondScreen();
      }
      break;
   
    case 3:
      {
        thirdScreen();
      }
      break;
   
    case 4:
      {
        fourthScreen();
      }
      break;
   
    case 5:
      {
        fifthScreen();
      }
      break;
   
    case 6:
      {
        temperatura();
      }
      break;
    case 0:
      {
       
      }
      break;
    }
}
 
    //-------------------------------
    // BEGIN of the switch debouncing code
    int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
 
if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:
 
    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;
 
      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
        hasChanged = true;
        WhichScreen++;
       
       
      }
    } else {
      hasChanged = false;
    }
  }
  lastButtonState = reading;
  // END of the switch Debouncing code
  // --------------------------------------
  if (WhichScreen > 6){
    WhichScreen = 1;
  }
}
 
void LcdBarGraph()
  {
  
   
  lcd.begin(2, lcdNumCols);
  lcd.clear();
  delay(100);
  lcd.setCursor(5,1);
  lcd.print("Paliwo");
  lcd.setCursor(0,1);
  lcd.print("E");
  lcd.setCursor(15,1);
  lcd.print("F");


 {lbg.drawValue( analogRead(A5), 1010);
    delay(1000);}
  }
void secondScreen()
  {
    lcd.clear();
    lcd.setCursor(0,0); // Column, line
    lcd.print("  Drugi ekran");
    lcd.setCursor(0,1);
    lcd.print("mojego menu !!");
  }
void thirdScreen()
  {
    lcd.clear();
    lcd.setCursor(0,0); // Column, line
    lcd.print("Witaj świecie!");
    lcd.setCursor(0,1);
    lcd.print("Trzeci ekran (3)");
  }
void fourthScreen()
  {
    lcd.clear();
    lcd.setCursor(0,0); // Column, line
    lcd.print("To jest ekran 4");
    lcd.setCursor(0,1);
    lcd.print("Just press btn");
  }
void fifthScreen()
  {
    lcd.clear();
    lcd.setCursor(0,0); // Column, line
    lcd.print("   Piąty ekran");
    lcd.setCursor(0,1);
    lcd.print("i2C LCD screen");
  }
void temperatura()
  {
    lcd.clear();
    lcd.begin(16, 2);
    lcd.print("Temperatura: ");

 
  }

jak przypisać dany pin do wyświetlanej wartość ??????

Link do komentarza
Share on other sites

No to popatrz sobie na swój program.

if (hasChanged == true) {

Co to oznacza? Czyżby nie to, że "jak zmieniam menu to wyświetlaj" (a w podtekście: "jak nie zmieniam to nie wyświetlaj")?

7 minut temu, piotrek_brt napisał:

jak przypisać dany pin do wyświetlanej wartość ??????

Możesz to jakoś na polski przetłumaczyć? A najlepiej napisz co chcesz osiągnąć, bo chyba coś strasznie naokoło kombinujesz.

 

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

No to to chcesz tu przypisywać...

Masz dwie możliwości.

Pierwsza: oddzielne funkcje paliwomierza i termometru. Trywialne, bo:
 

void paliwomierz()
{
	int paliwo = analogRead(a5);
	// wyświetl paliwo, np:
	lcd.print(paliwo) ;// no, może nie tak prosto ale podobnie
}

void termometr()
{
	int temp = analogRead(a4);
	// wyświetl temperaturę
}

Ale rozumiem, że chcesz skorzystać se swojego bargrafu. Ja bym i tak zrobił oddzielne funkcje, coś w stylu:

void paliwomierz()
{
   lbg.drawValue(analogRead(a5), MAX_FUEL);
}

void termometr()
{
  lbg.drawValue(analogRead(a4), MAX_TEMP);
}

I w zależności od tego na którym menu jesteś wywołujesz którąś z tych funkcji zamiast swoich "screenFirst" i podobnych ładnie nazwanych. A stałe MAX_FUEL i MAX_TEMP musisz sobie zdefiniować.

Oczywiście to straszliwe uproszczenie, warto by było napisać co właściwie wyświetlasz i wyświetlać wyniki co jakiś czas (kłania się millis(), zapomnij o delay()), ale to już sobie dopiszesz.

 

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