//---importování knihoven------------------------------------------------------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneButton.h>
//---deklarace proměnných------------------------------------------------------------------
LiquidCrystal_I2C lcd(0x27, 16, 2); //Nastavení adresy LCD na 0x27 pro 16znakový a 2řádkový displej
#define up 4
#define down 5
#define ok 6
#define motor 7
int push = 0;
int h = 0;
int newh = 0;
int oldh = 0;
int m = 0;
int motordelay = 5000;
int setlength1 = 0;
int setlength2 = 0;
int confirm1 = 0;
//---deklarace hlavičky programu-----------------------------------------------------------
void setup(){
pinMode (up, INPUT_PULLUP);
pinMode (down, INPUT_PULLUP);
pinMode (ok, INPUT_PULLUP);
pinMode (motor, OUTPUT);
Serial.begin (9600); //Inicializace sériové komunikace arduina a PC
lcd.init(); //Inicializace komunikace LCD s arduinem
lcd.backlight(); //Zapnutí podsvícení displaye
lcd.clear(); //Vymazání případného textu na displayi
digitalWrite(27, HIGH);
}
//---deklarace těla programu---------------------------------------------------------------
void loop(){
if(!digitalRead(ok) == 1){
push++;
delay(200);
}
switch (push){ //Použití funkce switch pro zobrazování jednotlivých screenů displaye
case 0:
homescreen(); //Volání funkce Domovská obrazovka
break;
case 1:
setlengthh(); //Volání screenu pro nastavení délky vodiče
if(!digitalRead(up) == 1){
h++;
delay(100);
}
if(!digitalRead(down) == 1){
h--;
delay(100);
}
break;
case 2:
setlengthm(); //Volání screenu pro nastavení délky vodiče
if(!digitalRead(up) == 1){
m++;
delay(100);
}
if(!digitalRead(down) == 1){
m--;
delay(100);
}
break;
case 3:
confirm(); //Volání screenu pro rekapitulace požadovaných hodnot
newh = m*60+h*60*60;
oldh = newh - motordelay/1000;
break;
case 4:
finish(); //Volání screenu po dokončení stříhání
break;
}
}
//---deklarace funkci pro jednotlivá tlačítka----------------------------------------------
//---deklarace funkci pro jednotlivé screeny-----------------------------------------------
void homescreen(){ //fuknce pro domovskou obrazovku
lcd.setCursor(0, 0);
lcd.print(" ZAVLAZOVACKA ");
lcd.setCursor(0, 1);
lcd.print(" -->");
setlength1 = 0;
setlength2 = 0;
confirm1 = 0;
h = 0;
m = 0;
newh = 0;
oldh = 0;
}
//-------------------------------
void setlengthh(){ //funkce pro screen nastavení délky vodiče
if(setlength1 == 0){
lcd.clear();
setlength1++;
}
lcd.setCursor(0, 0);
lcd.print("OPAKOVANI [hod] ");
lcd.setCursor(0, 1);
lcd.print("<--");
lcd.setCursor(6, 1);
lcd.print(h);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("-->");
setlength2 = 0;
confirm1 = 0;
}
//-------------------------------
void setlengthm(){ //funkce pro screen nastavení délky vodiče
if(setlength2 == 0){
lcd.clear();
setlength2++;
}
lcd.setCursor(0, 0);
lcd.print("OPAKOVANI [min] ");
lcd.setCursor(0, 1);
lcd.print("<--");
lcd.setCursor(6, 1);
lcd.print(m);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print("-->");
setlength1 = 0;
confirm1 = 0;
}
//-------------------------------
void confirm(){ //funkce pro screen rekapitulace požadovaných hodnot
if(confirm1 == 0){
lcd.clear();
confirm1++;
}
lcd.setCursor(0, 0);
lcd.print("hodin = ");
lcd.setCursor(8, 0);
lcd.print(h);
lcd.setCursor(0, 1);
lcd.print("minut = ");
lcd.setCursor(8, 1);
lcd.print(m);
lcd.setCursor(11, 1);
lcd.print("READY");
setlength2 = 0;
}
//-------------------------------
void finish(){ //funkce pro screen během stříhání
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ZALEVANI ZA ");
while(!digitalRead(ok) != 1){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ZALEVANI ZA ");
lcd.setCursor(7, 1);
lcd.print(newh);
delay(1000);
newh--;
if(newh<0){
newh=oldh;
digitalWrite(motor, HIGH);
delay(motordelay);
digitalWrite(motor, LOW);
}
}
confirm1 = 0;
push = 0;
}