20-10-2018, 23:26
(Ten post był ostatnio modyfikowany: 21-10-2018, 11:10 przez CEO.
Powód edycji: Proszę używać znaczników [code]!
)
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ć??
......
......
......i tytaj, o co w tym chodzi? Czy mam rozumieć, że ta pętla sprawdza czy nacisnąłem klawisz "dół"??
......
......
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:
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);
}