Itt vannak a képek: http://data.hu/get/7183323/hiba.zip
Kód: Egész kijelölése
#include <MenuBackend.h> //MenuBackend library - copyright by Alexander Brevig
#include <LiquidCrystal.h> //this library is included in the Arduino IDE
#include <EEPROM.h>
#include <OneWire.h>
#define debounceDelay 300
const byte buttonPinLeft = 52; // pin for the Up button
const byte buttonPinRight = 53; // pin for the Down button
const byte buttonPinEsc = 50; // pin for the Esc button
const byte buttonPinEnter = 51; // pin for the Enter button
const byte eeprom_fenyero=1;
const byte hattervilagitas=7;
volatile byte lastButtonPushed = 0;
volatile boolean menuben=false;
volatile byte fenyero;
volatile unsigned long utolsoGombnyomasIdeje = 0;
byte addr[8]={40,65,64,5,5,0,0,1}; //a homero 64 bites hardveres címe
byte homeroelerheto=0;
boolean alarm=false;
int egesz, tort;
boolean negativ=false;
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
OneWire ds(38); // homero pin8
//Menu variables
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
MenuItem setTime = MenuItem("setTime");
MenuItem setHour = MenuItem("setHour");
MenuItem setMin = MenuItem("setMin");
MenuItem setSec = MenuItem("setSec");
MenuItem setDisplay = MenuItem("setDisplay");
MenuItem setBrightness = MenuItem("setBrightness");
MenuItem setHoldTime = MenuItem("setHoldTime");
void setup()
{
pinMode(buttonPinLeft, INPUT);
pinMode(buttonPinRight, INPUT);
pinMode(buttonPinEnter, INPUT);
pinMode(buttonPinEsc, INPUT);
pinMode(hattervilagitas, OUTPUT);
fenyero=EEPROM.read(eeprom_fenyero);
analogWrite(hattervilagitas,(byte)(fenyero*2.55));
lcd.begin(20, 4);
//configure menu
menu.getRoot().add(setDisplay);
menu.getRoot().add(setTime);
setTime.addRight(setDisplay);
setTime.add(setSec);
setTime.add(setMin);
setTime.add(setHour);
setHour.addRight(setMin);
setMin.addRight(setSec);
setDisplay.add(setHoldTime);
setDisplay.add(setBrightness);
setBrightness.addRight(setHoldTime);
menu.toRoot();
// setDS18B20resolution(12);
attachInterrupt(0,pushNavigateButton,RISING);
}
void loop()
{
getTemp();
if (menu.getCurrent().getName()==menu.getRoot()) writeTemp();
}
void menuChanged(MenuChangeEvent changed){
lcd.clear();
MenuItem newMenuItem=changed.to; //get the destination menu
lcd.setCursor(0,0); //set the start position for lcd printing to the second row
if(newMenuItem.getName()==menu.getRoot()){
lcd.print("Homerseklet:");
lcd.setCursor(18,0);
lcd.write(223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Ido: ");
}
else if(newMenuItem.getName()=="setTime"){
lcd.print("[Orabeallitas ]");
lcd.setCursor(0,1);
lcd.print("Kijelzo beallitas");
}
else if(newMenuItem.getName()=="setHour"){
lcd.print("[Ora ]");
lcd.setCursor(0,1);
lcd.print("Perc");
lcd.setCursor(0,2);
lcd.print("Masodperc");
}
else if(newMenuItem.getName()=="setMin"){
lcd.print("Ora");
lcd.setCursor(0,1);
lcd.print("[Perc ]");
lcd.setCursor(0,2);
lcd.print("Masodperc");
}
else if(newMenuItem.getName()=="setSec"){
lcd.print("Ora");
lcd.setCursor(0,1);
lcd.print("Perc");
lcd.setCursor(0,2);
lcd.print("[Masodperc ]");
}
else if(newMenuItem.getName()=="setDisplay"){
lcd.print("Orabeallitas");
lcd.setCursor(0,1);
lcd.print("[Kijelzo beallitas ]");
}
else if(newMenuItem.getName()=="setBrightness"){
lcd.print("[Fenyero");
if (fenyero==100) lcd.setCursor(15,0);
else if (fenyero>9) lcd.setCursor(16,0);
else lcd.setCursor(17,0);
lcd.print(fenyero);
lcd.print("%]");
lcd.setCursor(0,1);
lcd.print("Tartasi ido");
}
else if(newMenuItem.getName()=="setHoldTime"){
lcd.print("Fenyero");
if (fenyero==100) lcd.setCursor(16,0);
else if (fenyero>9) lcd.setCursor(17,0);
else lcd.setCursor(17,0);
lcd.print(fenyero);
lcd.print("%]");
lcd.setCursor(0,1);
lcd.print("[Tartasi ido ]");
}
}
void menuUsed(MenuUseEvent used){
if (used.item.getName()==setBrightness && lastButtonPushed==buttonPinRight) {
if (fenyero>0){
fenyero=fenyero-5;
analogWrite(hattervilagitas,(byte)(fenyero*2.55));
if (fenyero==100){
lcd.setCursor(15,0);
lcd.print(fenyero);
}
else if (fenyero>9) {
lcd.setCursor(15,0);
lcd.print(" ");
lcd.print(fenyero);
}
else {
lcd.setCursor(15,0);
lcd.print(" ");
lcd.print(fenyero);
}
}
}
else if (used.item.getName()==setBrightness && lastButtonPushed==buttonPinLeft) {
if (fenyero<100){
fenyero=fenyero+5;
analogWrite(hattervilagitas,(byte)(fenyero*2.55));
if (fenyero==100){
lcd.setCursor(15,0);
lcd.print(fenyero);
}
else if (fenyero>9) {
lcd.setCursor(15,0);
lcd.print(" ");
lcd.print(fenyero);
}
else {
lcd.setCursor(15,0);
lcd.print(" ");
lcd.print(fenyero);
}
}
}
if (used.item.getName()==setMin && lastButtonPushed==buttonPinRight) {
lcd.setCursor(0,0);
lcd.print("PERC+");
}
if (used.item.getName()==setMin && lastButtonPushed==buttonPinLeft) {
lcd.setCursor(0,0);
lcd.print("PERC-");
}
// menu.toRoot(); //back to Main
}
//MEGSZAKITASOK
void pushNavigateButton(){
if (abs(millis()-utolsoGombnyomasIdeje>debounceDelay)){
utolsoGombnyomasIdeje=millis();
if (digitalRead(buttonPinEsc)==HIGH) pushEsc();
else if (digitalRead(buttonPinEnter)==HIGH) pushEnter();
else if (digitalRead(buttonPinLeft)==HIGH) pushLeft();
else if (digitalRead(buttonPinRight)==HIGH) pushRight();
}
}
void pushEnter(){
lastButtonPushed=buttonPinEnter;
MenuItem currentMenu=menu.getCurrent();
if(!(currentMenu.moveDown())) menuben=true;
else menu.moveDown();
}
void pushEsc(){
lastButtonPushed=buttonPinEsc;
MenuItem currentMenu=menu.getCurrent();
if (currentMenu.getName()==setBrightness && menuben==true) EEPROM.write(eeprom_fenyero,fenyero);
if (menuben==true) menuben=false;
else menu.moveUp();
}
void pushRight(){
lastButtonPushed=buttonPinRight;
// MenuItem currentMenu=menu.getCurrent();
if (menuben==false) menu.moveRight();
else menu.use();
}
void pushLeft(){
lastButtonPushed=buttonPinLeft;
// MenuItem currentMenu=menu.getCurrent();
if (menuben==false) menu.moveLeft();
else menu.use();
}
void writeTemp(){
lcd.setCursor(13,0);
if (negativ) // If its negative
{
if (egesz<10) lcd.print(" ");
lcd.print("-");
}
else if (egesz<100 && egesz>=10) lcd.print(" ");
else lcd.print(" ");
lcd.print(egesz);
lcd.print(".");
lcd.print(tort); //tortresz
}
void getTemp() {
int Tc_100, Whole, TReading;
byte i;
byte data[9];
ds.reset();
ds.select(addr);
ds.write(0x44); //elküldi a parancsot a konverzió végrehajtására a hőmérőnek
// delay(850); //a konverzió időbe telik 9bit:100, 10bit:200, 11bit:400, 12bit:800
homeroelerheto=ds.reset();
ds.select(addr);
ds.write(0xBE); // beolvasási parancs küldése a hőmérőnek
if (!homeroelerheto){
lcd.setCursor(0,1);
lcd.print("HIBA");
return;
}
for (i = 0; i < 9; i++) //beolvassuk a SratchPad-et
data[i] = ds.read();
if (OneWire::crc8(data, 8) != data[8]) {
lcd.setCursor(0,1);
lcd.print("CRC HIBA");
return;
}
TReading=(data[1] << 8) + data[0];
if (TReading & 0x8000) // negative
{
TReading = (TReading ^ 0xffff) + 1; // 2's comp
negativ=true;
}
else negativ=false;
Tc_100 = (int)(6.25 * TReading); // multiply by (100 * 0.0625) or 6.25
egesz = Tc_100 / 100; // egeszresz
tort=(Tc_100 % 100)/10; //tortresz
}
void setDS18B20resolution(byte felbontas){
ds.reset();
ds.select(addr);
ds.write(0x4E); // write scratchpad (starts at byte 2)
// note: set high/low temp alarms by changing the next two values
ds.write(0x4B); // default value of TH reg (user byte 1)
ds.write(0x46); // default value of TL reg (user byte 2)
if (felbontas==9) ds.write(0x1F); // 9-bit
else if (felbontas==10) ds.write(0x3F); // 10-bit
else if (felbontas==11) ds.write(0x5F); // 11-bit
else ds.write(0x7F); // 12-bit sampling resolution (default)
}