• 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
Menu LCD Nokia 5110_PCD8544 z biblioteką Adafruit
#1
Witam
Zwracam się do Was z prośbą o wytłumaczenie na czym polega logika działania poniższych fragmentów kodu.

tzn. np.: czemu zmienna "menuitems" ma zmienioną wartość na "3" w pierwszej pętli "if" i czemu to ma służyć??

......
Kod:
if (up && page == 1 )      
 {    
   up = false;              
   menuitem--;              
   if (menuitem==0)          
   {
     menuitem=3;            
   }      
 }

 else if (up && page == 2 )  
 {                                                
   up = false;
   contrast--;
   setContrast();
 }

 if (down && page == 1) {
   down = false;
   menuitem++;
   if (menuitem==4)
   {
     menuitem=1;
   }      
 }

else if (down && page == 2 )
 {
   down = false;
   contrast++;
   setContrast();
 }

......

......i tytaj, o co w tym chodzi? Czy mam rozumieć, że ta pętla sprawdza czy nacisnąłem klawisz "dół"??
......
  
Kod:
void checkIfDownButtonIsPressed()
 {
   if (downButtonState != lastDownButtonState)
 {
   if (downButtonState == 0)                  
   {
     down=true;                              
   }
   delay(50);                                
 }
  lastDownButtonState = downButtonState;      
 }

......

Jest to wycinek z przykładowego kodu do wyświetlania menu na wyświetlaczu Nokia 5110 , który znalazłem w internecie. Chciałbym go trochę zmienić, tak aby wyświetlał temperatury z czujników LM35 i dodać funkcję zmiany wartości zmiennych "float". Będę b. wdzięczny za pomoc. A to jest cały kod:

Kod:
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

boolean backlight = true;
int contrast=50;

int menuitem = 1;
int page = 1;      

volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;

int downButtonState = 0;
int upButtonState = 0;  
int selectButtonState = 0;          
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

Adafruit_PCD8544 display = Adafruit_PCD8544( 5, 4, 3);

void setup()
{

 pinMode(2, INPUT_PULLUP);
 pinMode(1, INPUT_PULLUP);
 pinMode(0, INPUT_PULLUP);
 pinMode(7,OUTPUT);

 digitalWrite(7,LOW);
 
 Serial.begin(9600);
 
 display.begin();      
 display.setContrast(contrast);
 display.clearDisplay();
 display.display();  
}

void loop() {
 
 drawMenu();

 downButtonState = digitalRead(2);
 selectButtonState = digitalRead(1);
 upButtonState =   digitalRead(0);

 checkIfDownButtonIsPressed();
 checkIfUpButtonIsPressed();
 checkIfSelectButtonIsPressed();


 if (up && page == 1 )      
 {    
   up = false;            
   menuitem--;              
   if (menuitem==0)          
   {
     menuitem=3;            
   }      
 }
 else if (up && page == 2 )
 {                                                
   up = false;
   contrast--;
   setContrast();
 }

 if (down && page == 1) {
   down = false;
   menuitem++;
   if (menuitem==4)
   {
     menuitem=1;
   }      
 }else if (down && page == 2 )
 {
   down = false;
   contrast++;
   setContrast();
 }

 
 if (middle)
 {
   middle = false;
   
   if (page == 1 && menuitem==2)
   {
     if (backlight)
     {
       backlight = false;
       turnBacklightOff();
       }
     else
     {
       backlight = true;
       turnBacklightOn();
      }
   }


   if(page == 1 && menuitem ==3)
   {
     resetDefaults();
   }


else if (page == 1 && menuitem==1) {
     page=2;
    }
else if (page == 2) {
     page=1;
    }
  }
 
 }
 
 
 void checkIfDownButtonIsPressed()
 {
   if (downButtonState != lastDownButtonState)
 {
   if (downButtonState == 0)                  
   {
     down=true;                              
   }
   delay(50);                                
 }
  lastDownButtonState = downButtonState;      
 }


void checkIfUpButtonIsPressed()
{
 if (upButtonState != lastUpButtonState)
 {
   if (upButtonState == 0) {
     up=true;
   }
   delay(50);
 }
  lastUpButtonState = upButtonState;
}


void checkIfSelectButtonIsPressed()
{
  if (selectButtonState != lastSelectButtonState)
 {
   if (selectButtonState == 0)
   {
     middle=true;
   }
   delay(50);
 }
  lastSelectButtonState = selectButtonState;
}

 
 void drawMenu()
 {
   
 if (page==1)                          
 {    
   display.setTextSize(1);            
   display.clearDisplay();            
   display.setTextColor(BLACK, WHITE);  
   display.setCursor(25, 0);            
   display.print("MENU");              
   display.drawFastHLine(0,10,83,BLACK);
   

   display.setCursor(0, 15);            
   if (menuitem==1)                      
   {
     display.setTextColor(WHITE, BLACK);
   }
   else
   {
     display.setTextColor(BLACK, WHITE);
   }
   display.print(">Contrast");        
   

   display.setCursor(0, 25);            
   if (menuitem==2)                      
   {
     display.setTextColor(WHITE, BLACK);
   }
   else
   {
     display.setTextColor(BLACK, WHITE);
   }    
   display.print(">Light: ");          

   if (backlight)
   {
     display.print("ON");
   }
   else
   {
     display.print("OFF");
   }
   display.display();


   if (menuitem==3)
   {
     display.setTextColor(WHITE, BLACK);
   }
   else
   {
     display.setTextColor(BLACK, WHITE);
   }  
   display.setCursor(0, 35);
   display.print(">Reset");
   display.display();
 }
   


 else if (page==2)                      
 {
   
   display.setTextSize(1);
   display.clearDisplay();
   display.setTextColor(BLACK, WHITE);
   display.setCursor(15, 0);
   display.print("CONTRAST");
   display.drawFastHLine(0,10,83,BLACK);
   display.setCursor(5, 15);
   display.print("Value");
   display.setTextSize(2);
   display.setCursor(5, 25);
   display.print(contrast);

   display.setTextSize(2);
   display.display();
 }
 
 }


 void resetDefaults()
 {
   contrast = 50;
   setContrast();
   backlight = true;
   turnBacklightOn();
 }

 void setContrast()
 {
   display.setContrast(contrast);
   display.display();
 }

 void turnBacklightOn()
 {
   digitalWrite(7,LOW);
 }

   void turnBacklightOff()
 {
   digitalWrite(7,HIGH);
 }
 
#2
Skąd masz ten kod?
 
#3
ze str.
http://educ8s.tv/arduino-nokia-5110-menu/
ale tam jest opis ogólny
 
#4
Zmienne menuitem w pętlach są po to byś nie przekroczył menu (jak będzie 0 to automatycznie przeniesie cię do menu3, a jak przekroczysz 3 to cofnie cię do menu 1.
 
#5
Dziękuję, już rozumiem Smile
A Napisz mi, co oznaczają te puste nawiasy przy zmiennych:

checkIfDownButtonIsPressed();
checkIfUpButtonIsPressed();
checkIfSelectButtonIsPressed();

Czy to znaczy że można im przypisać jakąś wartość np: w pętli "if"??
 
#6
Nawiasy są konieczne, byś wiedział, że to jest funkcja. Każda funkcja może przyjmować jakieś argumenty w nawiasach, lub ich nie mieć. Jak zdefiniujesz, że ma mieć np. 3 argumenty to zawsze musisz 3 argumenty jej dać. A jak zdefiniujesz że argumentów nie dostaje, to nic podczas użytkowania takiej funkcji dawać jej nie możesz. Dla odmiany funkcja zwracać może tylko jedną wartość lub żadnej - to też Ty definiujesz tworząc funkcję. Nie możesz sobie w te nawiasy nic wstawić, jeśli nie zdefiniowałeś funkcji, która sobie z tych nawiasów będzie brała coś do działania.
Przejdź kurs Arduino, poczytaj o C i C++, bo nic sensownego nie stworzysz nie mając pojęcia o programowaniu, Arduino jest najprostsze dla "nieprogramistów", ale i tak nie można nic nie wiedzieć: https://forbot.pl/blog/kursy.
Miło być decenianym https://buycoffee.to/kaczakat
 
#7
(21-10-2018, 14:29)rafal.ab napisał(a): A Napisz mi, co oznaczają te puste nawiasy przy zmiennych:
Nie odróżniasz zmiennej od funkcji, to jak nie odróżniać litery od wyrazu a sa jeszcze zdania.
Zacznij od kursu Arduino, nauki C ćwicz na działających przykładach (tu uważaj, bo w necie często przykłady mają błędy) , dopiero później zabierz się za pisanie własnych programów czy modyfikowanie programów napisanych przez innych.
Nie jestem w stanie jednoznacznie napisać, czy łatwiej modyfikować programy innych czy pisać swoje, bywa różnie.
 
#8
rozumiem, wracam do podstaw. Zagłębie się w treść kursu na forbot
 
  


Skocz do:


Przeglądający: 1 gości