• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
LCD zmiana przyciskiem "ekranów"
#1
Witam, 
mam pytanie odnośnie stworzenia 3 ekranów z danymi, zmieniane po wciśnięciu przycisku. I tu powstaje pytanie jakiej funkcji mam użyć.... Wstępnie mam cały sketch napisany tylko nie wiem jak "ugryźć" ten temat. 
Miałoby to wyglądać tak -->
Przyciśnięcie - Ekran1
Przyciśnięcie - Ekran2
Przyciśnięcie - Ekran3(zapętlone)
Będę wdzięczny za każdą podpowiedz lub nakierowanie na jakiś podobny temat. 

Dziękuję i pozdrawiam  Wink
 
Odpowiedź
#2
Po każdym naciśnięciu przycisku inkrementuj zmienną. Jeśli wartość zmiennej będzie > 2 to przypisz jej 0.
Ekrany wyswietlaj na podstawie wartości zmiennej używając 'if' lub 'switch ... case': 0-> ekran1 .. 2->ekran3.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
Przyznam się, że trochę za fachowo to wytłumaczyłeś Wink Coś takiego ?

Kod:
switch (var) {
    case 1:
            lcd.setCursor(0, 1);
            lcd.print("Ekran1");
            break;
    case 2:
            lcd.setCursor(0, 1);
            lcd.print("Ekran2");
            break;
    case 3:
            lcd.setCursor(0, 1);
            lcd.print("Ekran3");
            break;
  }
 
Odpowiedź
#4
Powinno zadziałać.
Dodaj jeszcze warunek default:
Kod:
default:
           lcd.setCursor(0, 1);
           lcd.print("Blad???");
           break;

Dlaczego? Znajdziesz w sieci Wink.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#5
Docelowo zrobiłem to tak :
Kod:
int switchPin = 8;   PIN 8
int Display = 0;

void setup()
{
lcd.begin(20, 4);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH);
}

void loop()
{
if (digitalRead(switchPin) == LOW){  
  delay(200);                        // trzymanie przycisku

  Display = Display + 1;
  if(Display > 3){
    lcd.clear();
    Display = 1;
  }
 
  switch (Display) {
    case 1: {
      lcd.setCursor(0, 1);
      lcd.print("ekran");
     
      break;
    }
     
    case 2: {
      lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("ekran");
      break;
    }
     
     case 3: {
       lcd.clear();
       lcd.setCursor(0, 1);
       lcd.print("ekran");
       break;
}
 }
   }
     }

I mam problem dopiero po wciśnięciu pokazuje się 1 ekran, a druga modernizacja chciałbym aby zawsze była wyświetlana w 1 linijce godzina i czas. 
Kod:
byte decToBcd(byte val){ return( (val/10*16) + (val%10) ); }
byte bcdToDec(byte val){ return( (val/16*10) + (val%16) ); }


void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)
{
 Wire.beginTransmission(DS3231_I2C_ADDRESS);
 Wire.write(0);
 // okieśla, że następna wartość ma trafić do rejestru sekund
 Wire.endTransmission();
 Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
 // request seven bytes of data from DS3231 starting from register 00h
 *second = bcdToDec(Wire.read() & 0x7f);
 *minute = bcdToDec(Wire.read());
 *hour = bcdToDec(Wire.read() & 0x3f);
 *dayOfWeek = bcdToDec(Wire.read());
 *dayOfMonth = bcdToDec(Wire.read());
 *month = bcdToDec(Wire.read());
 *year = bcdToDec(Wire.read());
}

void displayTime()
{
 byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
                &year);
 if (hour < 10)
 {
   lcd.setCursor(1, 0);
   lcd.print("0");
   lcd.setCursor(2, 0);
   lcd.print(hour , DEC);
 }
 if (hour > 9)
 {
   lcd.setCursor(1, 0);
   lcd.print(hour , DEC);
 }
 lcd.setCursor(3, 0);
 lcd.print(":");
 if (minute < 10)
 {
   lcd.setCursor(4, 0);
   lcd.print("0");
   lcd.setCursor(5, 0);
   lcd.print(minute , DEC);
 }
 if (minute > 9)
 {
   lcd.setCursor(4, 0);
   lcd.print(minute , DEC);
 }
 lcd.setCursor(6, 0);
 lcd.print(":");
 if (second < 10)
 {
   lcd.setCursor(7, 0);
   lcd.print("0");
   lcd.setCursor(8, 0);
   lcd.print(second, DEC);
 }
 if (second > 9)
 {
   lcd.setCursor(7, 0);
   lcd.print(second, DEC);
 }
 if (dayOfMonth < 10)
 {
   lcd.setCursor(10, 0);
   lcd.print("0");
   lcd.setCursor(11, 0);
   lcd.print(dayOfMonth, DEC);
   lcd.setCursor(12, 0);
   lcd.print("-");
 }
 if (dayOfMonth > 9)
 {
   lcd.setCursor(10, 0);
   lcd.print(dayOfMonth, DEC);
   lcd.setCursor(12, 0);
   lcd.print("-");
 }
 if (month < 10)
 {
   lcd.setCursor(13, 0);
   lcd.print("0");
   lcd.setCursor(14, 0);
   lcd.print(month, DEC);
   lcd.setCursor(15, 0);
   lcd.print("-");
 }
 if (month > 9)
 {
   lcd.setCursor(13, 0);
   lcd.print(month, DEC);
   lcd.setCursor(15, 0);
   lcd.print("-");
 }
 lcd.setCursor(16, 0);
 lcd.print("20");
 lcd.setCursor(18, 0);
 lcd.print(year, DEC);
 }
 
Odpowiedź
#6
Cytat:I mam problem dopiero po wciśnięciu pokazuje się 1 ekran
A czego się spodziewałeś skoro na początku zmienna Display ma wartość 0 a Ekran1 jest wyświetlany dla wartości 1?


Cytat:a druga modernizacja chciałbym aby zawsze była wyświetlana w 1 linijce godzina i czas.
Skoro tak to przy zmianie ekranów nie czyść całego wyświetlacza(lcd.clear()) tylko nadpisuj drugi wiersz.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#7
Niestety ani zmiana jednej ani drugiej wartości nie powoduje wyświetlenia Sad
 
Odpowiedź
#8
https://www.youtube.com/watch?v=mLW8l6sw1-k  Coś w ten deseń ?

A te ify żeby zero było na przedzie zastąpi to
Kod PHP:
void LCDprint2digits(int number) {
 
 if (number >= && number 10) {
 
   lcd.write('0');
 
 }
 
 lcd.print(number);  

Jak to ma coś wyświetlać jak to moment przeleci ?
 
Odpowiedź
#9
Nie zauważyłem że switch .. case jest wewnątrz if. Wyświetlanie musi być niezależne od przyciskania. Program powinien wyglądać mniej więcej(nie wnikam w logikę programu):
Kod:
int switchPin = 8;   PIN 8
int Display = 1;

void loop()
{
    if (digitalRead(switchPin) == LOW){  
        delay(200);                        // trzymanie przycisku
        
        Display = Display + 1;
            if(Display > 3){
            lcd.clear();
            Display = 1;
        }
    }
        
    switch (Display) {
        case 1: {
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
        
        case 2: {
            lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
        
        case 3: {
            lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
    void loop()
{
    if (digitalRead(switchPin) == LOW){  
        delay(200);                        // trzymanie przycisku
        
        Display = Display + 1;
            if(Display > 3){
            lcd.clear();
            Display = 1;
        }
    }
        
    switch (Display) {
        case 1: {
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
        
        case 2: {
            lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
        
        case 3: {
            lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("ekran");
            break;
        }
    }

}
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#10
(13-01-2017, 20:54)-adamek napisał(a): https://www.youtube.com/watch?v=mLW8l6sw1-k  Coś w ten deseń ?

Taki zegarek to już bajer Smile muszę mierzyć siły na zamiary
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości