#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27 // adresa zariadenia 0x27
#define LCD_COLUMNS 16 // pocet stlpcov displeja
#define LCD_LINES 2 // pocet riadkov
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
float val = 0;
int volt = A0; // číslo pinu pre meranie napätia
int lastVal = 0;
int poziciasipky = 6;
bool zvysovanie = false;
byte sipkap[8]={ //definicia vlastny znak sipka doprava
B10000,
B01000,
B00100,
B00010,
B00010,
B00100,
B01000,
B10000,
};
byte sipkal[8]={ //definicia vlastny znak sipka dolava
B00001,
B00010,
B00100,
B01000,
B01000,
B00100,
B00010,
B00001,
};
byte sipkapl[8]={ //definicia vlastny znak sipky proti sebe
B00000,
B10000,
B01100,
B10000,
B00010,
B01100,
B00010,
B00000,
};
byte nothing[] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000
};
void setup() {
lcd.init(); // inicializacia lcd
lcd.backlight(); // zapnutie podsvietenia
lcd.createChar(0, sipkap); // vytvorenie vlastneho znaku pre sipku vpravo
lcd.createChar(1, sipkal); // vytvorenie vlastneho znaku pre sipku vlavo
lcd.createChar(2, sipkapl); // vytvorenie vlastneho znaku pre sipky proti sebe
lcd.createChar(3, nothing);
lcd.clear();
}
void loop(){
val = analogRead(volt); // prečítať hodnotu pinu A0
val = val/1024*5.0; // konvertovanie hodnoty pinu do napätie
lcd.setCursor(0,0); // nastavenie kurzoru na stĺpec 0, riadok 0
lcd.print("Napatie: "); // napis na prvy riadok
lcd.setCursor(10,0); // nastavenie kurzoru na stĺpec 10, riadok 0
lcd.print(val); // zobraziť napätie na LCD
lcd.setCursor(15,0); // nastavenie kurzoru na stĺpec 15, riadok 0
lcd.print('V'); // zobrazit "V" na LCD
int roz = val - lastVal; //rozdiel hodnot
if (roz > 0) { //ak rastie
zvysovanie = true; //rastie
lcd.setCursor(0,1);
lcd.print(" ");
for(int i = 0; i <= 15; i++) { //cyklus vykresluje sipky zlava doprava
lcd.setCursor(i, 1); //kurzor i-stlpec, 1 riadok
lcd.write(0); //vykreslenie sipky
delay(100); // cas zobrazenia sipky
lcd.setCursor(i, 1); //kurzor i-stlpec, 1 riadok
lcd.write(3); //vykreslenie prazneho znaku
}
}else if (roz < 0) { //ak klesa
lcd.setCursor(0,1);
lcd.print(" ");
for(int i = 15; i >= 0; i--) {
lcd.setCursor(i, 1); //kurzor i-stlpec, 1 riadok
lcd.write(1); //vykreslenie sipky
delay(100); // cas zobrazenia sipky
lcd.setCursor(i, 1); //kurzor i-stlpec, 1 riadok
lcd.write(3); //vykreslenie prazneho znaku
}
} else {
lcd.setCursor(8,1); //nadstavi poziciu a vypise na predchadzajucom mieste sipky oproti sebe
lcd.write(3);
lcd.setCursor(8,1);
lcd.write(2);
}
lastVal = val; // Aktualizácia predchádzajúcej hodnoty
delay(1000); // počkať 1000 ms
}