Proszę cały kod.
Kod:
#include <MenuBackend.h> //MenuBackend library - copyright by Alexander Brevig
#include <LiquidCrystal_I2C.h> //this library is included in the Arduino IDE
#include <Wire.h>
#include <IRremote.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS18B20.h>
#define ONE_WIRE_BUS 2
#define SENSORS_NUM 3
#define wentylewy 8
#define wentylprawy 7
#define wentprzodlewy 6
#define wentprzodprawy 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27, 2,1,0,4,5,6,7);
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0xFC, 0x60, 0xA2, 0x15, 0x01, 0xAB,
0x28, 0xFF, 0xE1, 0x50, 0xA3, 0x15, 0x01, 0x79,
0x28, 0xFF, 0xA1, 0x60, 0xA3, 0x15, 0x01, 0xD8
};
int RECV_PIN = 3;//pilot
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean stan=0;//pilot
const int lamptyl = 4;
const int lamprzod = 9;
//Menu variables
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
MenuItem menu1Item1 = MenuItem("1. Chlodzenie ");
MenuItem menuItem1SubItem1 = MenuItem("1.1 Tyl lewy ");
MenuItem menuItem1SubItem1Item1 = MenuItem("1.1.1 ON ");
MenuItem menuItem1SubItem1Item2 = MenuItem("1.1.2 OFF ");
MenuItem menuItem1SubItem1Item3 = MenuItem("1.1.3 AUTO ");
MenuItem menuItem1SubItem2 = MenuItem("1.2 Tyl prawy ");
MenuItem menuItem1SubItem2Item1 = MenuItem("1.2.1 ON ");
MenuItem menuItem1SubItem2Item2 = MenuItem("1.2.2 OFF ");
MenuItem menuItem1SubItem2Item3 = MenuItem("1.2.3 AUTO ");
MenuItem menuItem1SubItem3 = MenuItem("1.3 Przod lewy ");
MenuItem menuItem1SubItem3Item1 = MenuItem("1.3.1 ON ");
MenuItem menuItem1SubItem3Item2 = MenuItem("1.3.2 OFF ");
MenuItem menuItem1SubItem3Item3 = MenuItem("1.3.3 AUTO ");
MenuItem menuItem1SubItem4 = MenuItem("1.4 Przod prawy ");
MenuItem menuItem1SubItem4Item1 = MenuItem("1.4.1 ON ");
MenuItem menuItem1SubItem4Item2 = MenuItem("1.4.2 OFF ");
MenuItem menuItem1SubItem4Item3 = MenuItem("1.4.3 AUTO ");
MenuItem menu1Item2 = MenuItem("2. Oswietlenie ");
MenuItem menuItem2SubItem1 = MenuItem("2.1 Tyl ");
MenuItem menuItem2SubItem1Item1 = MenuItem("2.1.1 ON ");
MenuItem menuItem2SubItem1Item2 = MenuItem("2.1.2 OFF ");
MenuItem menuItem2SubItem1Item3 = MenuItem("2.1.3 AUTO ");
MenuItem menuItem2SubItem2 = MenuItem("2.2 Przod ");
MenuItem menuItem2SubItem2Item1 = MenuItem("2.2.1 ON ");
MenuItem menuItem2SubItem2Item2 = MenuItem("2.2.2 OFF ");
MenuItem menuItem2SubItem2Item3 = MenuItem("2.2.3 AUTO ");
MenuItem menu1Item3 = MenuItem("3. Czujki ");
MenuItem menu1Item4 = MenuItem("4. Wylacz wszystko ");
MenuItem menu1Item5 = MenuItem("5. Wlacz wszystko ");
void setup()
{
Serial.begin(9600);
sensors.begin();
irrecv.enableIRIn();//pilot
pinMode(13,OUTPUT);
pinMode(wentylewy, OUTPUT);
pinMode(wentylprawy, OUTPUT);
pinMode(wentprzodlewy, OUTPUT);
pinMode(wentprzodprawy, OUTPUT);
pinMode(lamptyl, OUTPUT);
pinMode(lamprzod, OUTPUT);
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
//configure menu
menu.getRoot().add(menu1Item1);
menu1Item1.addRight(menu1Item2).addRight(menu1Item3).addRight(menu1Item4).addRight(menu1Item5);
menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2).addRight(menuItem1SubItem3).addRight(menuItem1SubItem4);;
menuItem1SubItem1.add(menuItem1SubItem1Item1).addRight(menuItem1SubItem1Item2).addRight(menuItem1SubItem1Item3);
menuItem1SubItem2.add(menuItem1SubItem2Item1).addRight(menuItem1SubItem2Item2).addRight(menuItem1SubItem2Item3);
menuItem1SubItem3.add(menuItem1SubItem3Item1).addRight(menuItem1SubItem3Item2).addRight(menuItem1SubItem3Item3);
menuItem1SubItem4.add(menuItem1SubItem4Item1).addRight(menuItem1SubItem4Item2).addRight(menuItem1SubItem4Item3);
menu1Item2.add(menuItem2SubItem1).addRight(menuItem2SubItem2);;
menuItem2SubItem1.add(menuItem2SubItem1Item1).addRight(menuItem2SubItem1Item2).addRight(menuItem2SubItem1Item3);
menuItem2SubItem2.add(menuItem2SubItem2Item1).addRight(menuItem2SubItem2Item2).addRight(menuItem2SubItem2Item3);
menu.moveUp();
//lcd.print("T ");
delay(500);
lcd.setCursor(1,0);
lcd.print("Czujnik-1: ");
lcd.print(sensors.getTempCByIndex(0));
lcd.setCursor(11,1);
lcd.print("Menu>");
}
void translateIR() // takes action based on IR code received
{
MenuItem currentMenu=menu.getCurrent();
switch(results.value)
{
case 16742535: //if the current menu has a child and has been pressed enter then menu navigate to item below
menu.moveDown();
break;
case 16722135: //otherwise, if menu has no child and has been pressed enter the current menu is used
menu.use();
break;
case 16732335:
menu.moveUp();
break;
case 16728255:
menu.moveRight();
break;
case 16752735:
menu.moveLeft();
break;
case 16771095:
menu.toRoot();
break;
case 16757325:
lcd.noDisplay();
lcd.setBacklight(LOW);
menu.toRoot();
break;
case 16738455:
lcd.display();
lcd.setBacklight(HIGH);
break;
}
delay(300);
}
void czujnik1()
{
sensors.requestTemperatures();
lcd.clear();
lcd.setCursor(1,0);
lcd.print("Czujnik-1: ");
lcd.print(sensors.getTempCByIndex(0));
if(sensors.getTempCByIndex(0) > 27)
{ //digitalWrite(13,HIGH);
digitalWrite( wentylewy, HIGH);
} else
{
digitalWrite( wentylewy, LOW);
}
}
void czujnik2()
{
sensors.requestTemperatures();
// if(sensors.getTempCByIndex(1) >= 26)
{digitalWrite(13,HIGH);
// digitalWrite(wentylprawy, HIGH);
// }
// else
// {
// digitalWrite(wentylprawy, LOW);
}
}
void czujnik3()
{
sensors.requestTemperatures();
// if(sensors.getTempCByIndex(2) >= 27)
{digitalWrite(13,HIGH);
// digitalWrite(wentprzodlewy, HIGH);
// }
// else
//{
// digitalWrite(wentprzodlewy, LOW);
}
}
void czujnik4()
{
sensors.requestTemperatures();
if(sensors.getTempCByIndex(3) >= 27)
{
digitalWrite(wentprzodprawy, HIGH);
}
else
{
digitalWrite(wentprzodprawy, LOW);
}
}
void loop()
{
sensors.requestTemperatures();
navigateMenus(); //in some situations I want to use the button for other purpose (eg. to change some settings)
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
results.value=0;
}
}
void menuChanged(MenuChangeEvent changed){
MenuItem newMenuItem=changed.to; //get the destination menu
lcd.setCursor(0,1); //set the start position for lcd printing to the second row
if(newMenuItem.getName()==menu.getRoot()){
lcd.clear();
lcd.setCursor(11,1);
lcd.print("Menu>");
}else if(newMenuItem.getName()=="1. Chlodzenie "){
lcd.print("1. Chlodzenie ");
}else if(newMenuItem.getName()=="1.1 Tyl lewy "){
lcd.print("1.1 Tyl lewy ");
}else if(newMenuItem.getName()=="1.1.1 ON "){
lcd.print("1.1.1 ON ");
}else if(newMenuItem.getName()=="1.1.2 OFF "){
lcd.print("1.1.2 OFF ");
}else if(newMenuItem.getName()=="1.1.3 AUTO "){
lcd.print("1.1.3 AUTO ");
}else if(newMenuItem.getName()=="1.2 Tyl prawy "){
lcd.print("1.2 Tyl prawy ");
}else if(newMenuItem.getName()=="1.2.1 ON "){
lcd.print("1.2.1 ON ");
}else if(newMenuItem.getName()=="1.2.2 OFF "){
lcd.print("1.2.2 OFF ");
}else if(newMenuItem.getName()=="1.2.3 AUTO "){
lcd.print("1.2.3 AUTO ");
}else if(newMenuItem.getName()=="1.3 Przod lewy "){
lcd.print("1.3 Przod lewy ");
}else if(newMenuItem.getName()=="1.3.1 ON "){
lcd.print("1.3.1 ON ");
}else if(newMenuItem.getName()=="1.3.2 OFF "){
lcd.print("1.3.2 OFF ");
}else if(newMenuItem.getName()=="1.3.3 AUTO "){
lcd.print("1.3.3 AUTO ");
}else if(newMenuItem.getName()=="1.4 Przod prawy "){
lcd.print("1.4 Przod prawy ");
}else if(newMenuItem.getName()=="1.4.1 ON "){
lcd.print("1.4.1 ON ");
}else if(newMenuItem.getName()=="1.4.2 OFF "){
lcd.print("1.4.2 OFF ");
}else if(newMenuItem.getName()=="1.4.3 AUTO "){
lcd.print("1.4.3 AUTO ");
}else if(newMenuItem.getName()=="2. Oswietlenie "){
lcd.print("2. Oswietlenie ");
}else if(newMenuItem.getName()=="2.1 Tyl "){
lcd.print("2.1 Tyl ");
}else if(newMenuItem.getName()=="2.1.1 ON "){
lcd.print("2.1.1 ON ");
}else if(newMenuItem.getName()=="2.1.2 OFF "){
lcd.print("2.1.2 OFF ");
}else if(newMenuItem.getName()=="2.1.3 AUTO "){
lcd.print("2.1.3 AUTO ");
}else if(newMenuItem.getName()=="2.2 Przod "){
lcd.print("2.2 Przod ");
}else if(newMenuItem.getName()=="2.2.1 ON "){
lcd.print("2.2.1 ON ");
}else if(newMenuItem.getName()=="2.2.2 OFF "){
lcd.print("2.2.2 OFF ");
}else if(newMenuItem.getName()=="2.2.3 AUTO "){
lcd.print("2.2.3 AUTO ");
}else if(newMenuItem.getName()=="3. Czujki "){
lcd.print("3. Test - Empty ");
}else if(newMenuItem.getName()=="4. Wylacz wszystko "){
lcd.print("4. Wylacz wszystko ");
}else if(newMenuItem.getName()=="5. Wlacz wszystko "){
lcd.print("5. Wlacz wszystko ");
}
}
void menuUsed(MenuUseEvent used){
lcd.setCursor(0,0);
lcd.print("Wybrano ");
delay(1000);
//menu.moveUp();
lcd.setCursor(0,0);
lcd.print(" ");
if ((used.item.getName()) == "1.1 Chłodzenie")
{
//menu.moveUp(); //back to Main
}
if ((used.item.getName()) == "1.1.1 ON ")
{
digitalWrite(wentylewy, HIGH);}
if ((used.item.getName()) == "1.1.2 OFF ")
{
digitalWrite(wentylewy, LOW);}
if ((used.item.getName()) == "1.1.3 AUTO ")
{
czujnik1();
}
if ((used.item.getName()) == "1.2.1 ON ")
{
digitalWrite(wentylprawy, HIGH)
;}
if ((used.item.getName()) == "1.2.2 OFF ")
{
digitalWrite(wentylprawy, LOW);}
if ((used.item.getName()) == "1.2.3 AUTO ")
{
czujnik3();
;}
if ((used.item.getName()) == "1.3.1 ON ")
{
digitalWrite(wentprzodlewy, HIGH);}
if ((used.item.getName()) == "1.3.2 OFF ")
{
digitalWrite(wentprzodlewy, LOW);}
if ((used.item.getName()) == "1.3.3 AUTO ")
{
czujnik3();
;}
if ((used.item.getName()) == "1.4.1 ON ")
{
digitalWrite(wentprzodprawy, HIGH);}
if ((used.item.getName()) == "1.4.2 OFF ")
{
digitalWrite(wentprzodprawy, LOW);}
if ((used.item.getName()) == "1.4.3 AUTO ")
{
czujnik4();
;}
if ((used.item.getName()) == "2.1.1 ON ")
{
digitalWrite(lamptyl, HIGH);}
if ((used.item.getName()) == "2.1.2 OFF ")
{
digitalWrite(lamptyl, LOW);}
if ((used.item.getName()) == "2.1.3 AUTO ")
{
;}
if ((used.item.getName()) == "2.2.1 ON ")
{
digitalWrite(lamprzod, HIGH);}
if ((used.item.getName()) == "2.2.2 OFF ")
{
digitalWrite(lamprzod, LOW);}
if ((used.item.getName()) == "2.2.3 AUTO ")
{
;}
if ((used.item.getName()) == "4. Wylacz wszystko ")
{
digitalWrite(wentylewy, LOW);
digitalWrite(wentylprawy, LOW);
digitalWrite(wentprzodlewy, LOW);
digitalWrite(wentprzodprawy, LOW);
digitalWrite(lamptyl, LOW);
digitalWrite(lamprzod, LOW);
}
if ((used.item.getName()) == "5. Wlacz wszystko ")
{
digitalWrite(wentylewy, HIGH);
digitalWrite(wentylprawy, HIGH);
digitalWrite(wentprzodlewy, HIGH);
digitalWrite(wentprzodprawy, HIGH);
digitalWrite(lamptyl, HIGH);
digitalWrite(lamprzod, HIGH);
}
// menu.moveLeft(); //back to Main
menu.moveUp();
}
void navigateMenus() {
MenuItem currentMenu=menu.getCurrent();
switch (results.value){
case 16722135:
menu.use();
break;
case 16742535: //if the current menu has a child and has been pressed enter then menu navigate to item below
menu.moveDown();
break;
case 16732335:
menu.moveUp(); //back to main
break;
case 16728255:
menu.moveRight();
break;
case 16752735:
menu.moveLeft();
break;
}
results.value=0; //reset the lastButtonPushed variable
}
Po usunięciu wszystkiego z loopa wszystko działa tak jak powinno. Robiłem już tak wcześniej i nawet o tym pisałem.
Jestem laikiem w tym wiec mi trzeba jak chłopu na miedzy. Dobrze dodane są adresy tych czujników czy nie??