//knihovny
#include <LiquidCrystal_I2C.h>
//Definované piny
// - Joystick
#define joyX A0
#define joyY A1
#define joyZ 3
// - Motor
#define motorPin 9
//nastavení displaye
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
//Promenné
// - čidla vlhkosti
int V1 = 01;
int V2 = 2;
int V3 = 30;
int V4 = 40;
int C1 = 70;
// - proměnné k ovládání joystickem
int xValue, yValue,zValue;
int stavX, stavY, stavZ;
int posledStavX, posledStavY, posledStavZ;
// - proměnné k menu
int menuStav = 0;
//!!!!!!!!!!!!!!!!!!!!!!!! dořešit proměnné zapínání a vypínání čidel vlhkosti a jejich změnu!!!!!!!!!!!
// - proměnné k čidlům vlhkosti
int v1on; //hodnota kdy sepne čerpadlo
int v2on; //hodnota kdy sepne čerpadlo
int v3on; //hodnota kdy sepne čerpadlo
int v4on; //hodnota kdy sepne čerpadlo
int v1off; //hodnota kdy vypne čerpadlo
int v2off; //hodnota kdy vypne čerpadlo
int v3off; //hodnota kdy vypne čerpadlo
int v4off; //hodnota kdy vypne čerpadlo
// - proměnné k ovládání motoru čerpadla
int motorMin = 0;
int motorMax = 255;
int motorProcent=50;
int motorVykon=89;
int startPocitadloM = 0;
//Definovaná pole
// - Texty menu
String menuText[1][10] = {
{" V1 V2 V3 V4 ", "Sepne pri V1 = %", "Sepne pri V2 = %", "Sepne pri V3 = %", "Sepne pri V4 = %", "Vypne pri V1 = %", "Vypne pri V2 = %","Vypne pri V3 = %","Vypne pri V4 = %","Vykon cerpadla %"}, //Stavy menu 1. řádku
};
// - Pole hodnot cidel vlhkosti
int V[1][5] = {
{V1, V2, V3, V4}, //hodnoty vlhkoměrů
};
//!!Funkce!!
// - funkce pro ukládání hodnot Joystiku
void stavJoy(){
//ukládání hodnot do proměnných
xValue = analogRead(joyX);
yValue = analogRead(joyY);
zValue = digitalRead(joyZ);
//zápis směru x joystiku do stavu
if (xValue > 700){
stavX=1;}
else if (xValue < 300){
stavX=-1;}
else
stavX=0;
//zápis směru y joystiku do stavu
if (yValue > 700){
stavY=1;}
else if (yValue < 300){
stavY=-1;}
else
stavY=0;
//zápis tlačítka Z joystiku do stavu
if (zValue == 1)
stavZ=0;
else
stavZ=1;
}
void smerJoy(){
//výpočet pokynů směru Joystiku
stavJoy();
//hodnoty na Joysticku
Serial.print("hodnota xValue je ");
Serial.println(xValue);
//Serial.print("hodnota yValue je ");
//Serial.println(yValue);
//Serial.print("hodnota zValue je ");
//Serial.println(zValue);
Serial.print("hodnota stavX je ");
Serial.println(stavX);
//Serial.print("hodnota stavY je ");
//Serial.println(stavY);
// Serial.print("hodnota stavZ je ");
//Serial.println(stavZ);
}
// - funkce pro pozvolné zapnutí a chod motoru podle proměnné motorProcent (0 - 100%)
void motor(int motorProcent) {
if (startPocitadloM <1){
for (int motorStart = 0; motorStart <= motorProcent; motorStart++) {
int motorStartVykon = ((255*motorStart)/100);
analogWrite(motorPin, motorStartVykon);
/* //volitelná kontrola hodnot pro PVM
Serial.print("Start ");
Serial.println(motorStartVykon);*/
startPocitadloM++;
delay(30);
}
}
else {
motorVykon = ((255*motorProcent)/100);
analogWrite(motorPin,motorVykon);
/* //volitelná kontrola hodnot pro PVM
Serial.print("běh ");
Serial.println(motorVykon);*/
}
}
// - funkce nastavení rychlosti otáček motoru
void rychlostMotoru(){
if (stavY == 0){
motorProcent = motorProcent;
}
else if (stavY>0){
if (motorProcent < 100){
motorProcent=motorProcent+1;
}
else {
motorProcent=100;
}
}
else{
if (motorProcent > 0){
motorProcent=motorProcent-1;
}
else {
motorProcent=0;
}
}
Serial.print("motorProcent ");
Serial.println(motorProcent);
//motor(motorProcent);
}
// - funkce ovládání menu
void ovladaniMenu(){
if (stavX == 0){
menuStav = menuStav;
}
else if (stavX>0){
if (menuStav < 9){
menuStav=menuStav+1;
}
else {
menuStav=9;
}
}
else{
if (menuStav > 0){
menuStav=menuStav-1;
}
else {
menuStav=0;
}
}
}
// - funkce zobrazení jednotlivých stránek menu
void m0() {
if (stavX!=0 || millis()< 2000){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][0]);
lcd.rightToLeft();
lcd.setCursor(2,1);
lcd.print(V[0][0]);
lcd.setCursor(6,1);
lcd.print(V[0][1]);
lcd.setCursor(10,1);
lcd.print(V[0][2]);
lcd.setCursor(14,1);
lcd.print(V[0][3]);
}
}
void m1(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][1]);
lcd.setCursor(0,1);
lcd.print(V[0][0]);
}
}
void m2(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][2]);
lcd.setCursor(0,1);
lcd.print(V[0][1]);
}
}
void m3(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][3]);
lcd.setCursor(0,1);
lcd.print(V[0][2]);
}
}
void m4(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][4]);
lcd.setCursor(0,1);
lcd.print(V[0][3]);
}
}
void m5(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][5]);
lcd.setCursor(0,1);
lcd.print(V[0][0]);
}
}
void m6(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][6]);
lcd.setCursor(0,1);
lcd.print(V[0][1]);
}
}
void m7(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][7]);
lcd.setCursor(0,1);
lcd.print(V[0][2]);
}
}
void m8(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][8]);
lcd.setCursor(0,1);
lcd.print(V[0][3]);
}
}
void m9(){
if (stavX != 0|| stavY != 0) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menuText[0][9]);
lcd.setCursor(0,1);
lcd.print(motorProcent);
}
}
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight(); // nastavení podsvícení
// nastavení pinů pro Joystick
pinMode(joyZ, INPUT_PULLUP); //nastavení digitálního pinu - PullUp zapne pullup rezistor, jinak to bude zlobit
pinMode (motorPin, OUTPUT);
//zapnutí serioveho monitoru pro kontrolu
Serial.begin(115200);
}
void loop()
{
/*//!!TEST zobrazní na LCD!!
m0();
//delay(2000);
m1();
delay(2000);
m2();
delay(2000);
m3();
delay(2000);
m4();
delay(2000);
m5();
delay(2000);
*/
// Volba případu (menu) Joystickem
ovladaniMenu();
// volba zobrazení MENU
switch (menuStav){
case 1:
m1();
break;
case 2:
m2();
break;
case 3:
m3();
break;
case 4:
m4();
break;
case 5:
m5();
break;
case 6:
m6();
break;
case 7:
m7();
break;
case 8:
m8();
break;
case 9:
m9();
rychlostMotoru();
break;
default:
m0();
}
Serial.println("rychlost motoru = ");
Serial.println(motorProcent);
//TEST ovládání Joystikem
smerJoy();
//ovládání motoru
//motor(50); //funkce zapnutí motoru
//rychlostMotoru(); //funkce nastavení rychlosti motoru
//pauza
delay(800);
}