a i fakt pisałem ten program dawno odświeża temperatury co sekundę ....
Kod: Zaznacz cały
#include <EEPROMex.h>
#include <EEPROMVar.h>
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <avr/wdt.h>
#define ONE_WIRE_BUS 8
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress czuj1, czuj2, czuj3;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
unsigned long previousMillis = 0;
//ZMIENNE WARTOSCI MENU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int menuin = 0;
int menu = 1;
float val = 0;
float valold = 0;
//#########################################################################################################################################################################################
//ZMIENNE KLAWIATURY /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int klaw;
int klawold;
int kwart;
int klawsek = 0;
//#########################################################################################################################################################################################
float temp1;
float temp1min = 20;
float temp1max = 90;
float temp2;
float temp2min = 30 ;
float temp2max = 100;
float temp3;
float temp3min = 40;
float temp3max = 110 ;
int al1 = 0;
int al2 = 0;
int al3 = 0;
int ton = 0;
int dzwiek = 0;
int al1stan = 0;
int al2stan = 0;
int al3stan = 0;
int al1min = 0;
int al1max = 0;
int al2min = 0;
int al2max = 0;
int al3min = 0;
int al3max = 0;
unsigned long czas;
int klawsek1;
byte st1[8] = {
0b01000,
0b10100,
0b01000,
0b00011,
0b00100,
0b00100,
0b00100,
0b00011
};
byte st2[8] = {
0b01110,
0b01110,
0b01110,
0b01110,
0b01110,
0b00000,
0b01110,
0b01110
};
byte al[8] = {
0b00010,
0b00101,
0b00111,
0b00101,
0b10000,
0b10000,
0b10000,
0b11100
};
byte b1[8] = {
0b00001,
0b00001,
0b00001,
0b00001,
0b00001,
0b00001,
0b00001,
0b00001
};
byte b2[8] = {
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000,
0b10000
};
byte b3[8] = {
0b01010,
0b01011,
0b01010,
0b01010,
0b01011,
0b01000,
0b01011,
0b01111
};
byte b4[8] = {
0b01010,
0b10010,
0b01010,
0b01010,
0b10010,
0b00010,
0b11010,
0b11110
};
void setup() {
wdt_enable(WDTO_4S);
sensors.begin();
sensors.getAddress(czuj1, 0);
sensors.getAddress(czuj2, 1);
sensors.getAddress(czuj3, 2);
sensors.setResolution(czuj1, TEMPERATURE_PRECISION);
sensors.setResolution(czuj2, TEMPERATURE_PRECISION);
sensors.setResolution(czuj3, TEMPERATURE_PRECISION);
sensors.setWaitForConversion(false);
lcd.begin(16, 2);
lcd.clear();
lcd.createChar(1, st1);
lcd.createChar(2, st2);
lcd.createChar(3, al);
lcd.createChar(4, b1);
lcd.createChar(5, b2);
lcd.createChar(6, b3);
lcd.createChar(7, b4);
czas = millis();
temp1min = EEPROM.readFloat(1);
temp1max = EEPROM.readFloat(10);
temp2min = EEPROM.readFloat(20);
temp2max = EEPROM.readFloat(30);
temp3min = EEPROM.readFloat(40);
temp3max = EEPROM.readFloat(50);
}
void loop() {
if ((millis()-czas) > 1000){ czas = millis(); klawsek = klawsek + 1; };
// ODCZYT Z A1 I USTALENIE KLAWISZA /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
kwart = analogRead(A1);
if (kwart > 1000 ) {klaw = 4;delay(200);}else
if (kwart > 500 & kwart < 520 ){klaw = 3;delay(200);}else
if (kwart > 330 & kwart < 350 ){klaw = 2;delay(200);}else
if (kwart > 240 & kwart < 270 ){klaw = 1;delay(200);} else {klaw = 0;};
if (klaw > 0) {klawsek = 0;};
if (klawsek > 2000){klawsek = 100;};
if (klawsek > 15){menuin = 0;};
// STEROWANIE MENU //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 0 && klaw == 1){menuin = 1; menu = 0;klaw = 0;lcd.clear();lcd.setCursor(0, 0); lcd.print(F("Menu"));lcd.setCursor(0, 1); lcd.print(F("Ustawien"));delay(1000);}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 0 && klaw == 2 && al1 == 0){al1=1;klaw = 0;} else if (menuin == 0 && klaw == 2 && al1 == 1){al1=0;}
if (menuin == 0 && klaw == 3 && al2 == 0){al2=1;klaw = 0;} else if (menuin == 0 && klaw == 3 && al2 == 1){al2=0;}
if (menuin == 0 && klaw == 4 && al3 == 0){al3=1;klaw = 0;} else if (menuin == 0 && klaw == 4 && al3 == 1){al3=0;}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 0 && al1==1) {
if (temp1min > 0 && temp1min >= temp1) {al1min = 1;} else {al1min = 0;};
if (temp1max > 0 && temp1max <= temp1) {al1max = 1;} else {al1max = 0;};
if (al1min == 1 || al1max == 1) {al1stan = 1;} else {al1stan = 0;};
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 0 && al2==1) {
if (temp2min > 0 && temp2min >= temp2) {al2min = 1;} else {al2min = 0;};
if (temp2max > 0 && temp2max <= temp2) {al2max = 1;} else {al2max = 0;};
if (al2min == 1 || al2max == 1) {al2stan = 1;} else {al2stan = 0;};
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 0 && al3==1) {
if (temp3min > 0 && temp3min >= temp3) {al3min = 1;} else {al3min = 0;};
if (temp3max > 0 && temp3max <= temp3) {al3max = 1;} else {al3max = 0;};
if (al3min == 1 || al3max == 1) {al3stan = 1;} else {al3stan = 0;};
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menuin == 1){
if (klaw == 0){delay(100); ;}
lcd.clear();
if (klaw == 1 && menu < 9){menuin = 0;lcd.clear();menu = 0;}
if (klaw == 2 && menu < 99){menu = menu-1;}
if (klaw == 3 && menu < 99){menu = menu+1;}
if (klaw == 4 && menu < 99 ){menu = menu*10;klaw = 0;}
if (klaw == 1 && menu > 9){menu = menu/10;}
if (klaw == 1 && menu > 99){menu = menu/10;}
if (klaw == 2 && menu > 99){val = val - 0.1;}
if (klaw == 3 && menu > 99){val = val + 0.1;}
val=constrain(val,0,120);
switch (menu) {
case 0:
menu=1;
break;
case 1:
lcd.setCursor(0, 0); lcd.print(F("1. Ustaw. Al."));
lcd.setCursor(0, 1); lcd.print(F("Termometr 1"));
break;
case 9:
menu = 10;
break;
case 10:
lcd.setCursor(0, 0); lcd.print(F("1.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min [ ] "));
lcd.setCursor(9, 1); lcd.print(temp1min,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 100:
val = temp1min;
menu = 101;
klaw = 0;
break;
case 101:
if (klaw == 4 && menu > 99){temp1min = val;menu = menu/10; EEPROM.writeFloat(1,val);}
lcd.setCursor(0, 0); lcd.print(F("1.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 11:
lcd.setCursor(0, 0); lcd.print(F("1.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max [ ] "));
lcd.setCursor(9, 1); lcd.print(temp1max,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 110:
val = temp1max;
menu = 111;
klaw = 0;
break;
case 111:
if (klaw == 4 && menu > 99){temp1max = val;menu = menu/10;EEPROM.writeFloat(10,val);}
lcd.setCursor(0, 0); lcd.print(F("1.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 12:
menu = 11;
break;
case 2:
lcd.setCursor(0, 0); lcd.print(F("2. Ustaw. AL."));
lcd.setCursor(0, 1); lcd.print(F("Termometr 2"));
break;
case 19:
menu = 20;
break;
case 20:
lcd.setCursor(0, 0); lcd.print(F("2.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min [ ] "));
lcd.setCursor(9, 1); lcd.print(temp2min,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 200:
val = temp2min;
menu = 201;
klaw = 0;
break;
case 201:
if (klaw == 4 && menu > 99){temp2min = val;menu = menu/10;EEPROM.writeFloat(20,val);}
lcd.setCursor(0, 0); lcd.print(F("2.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 21:
lcd.setCursor(0, 0); lcd.print(F("2.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max [ ] "));
lcd.setCursor(9, 1); lcd.print(temp2max,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 210:
val = temp2max;
menu = 211;
klaw = 0;
break;
case 211:
if (klaw == 4 && menu > 99){temp2max = val;menu = menu/10;EEPROM.writeFloat(30,val);}
lcd.setCursor(0, 0); lcd.print(F("2.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 22:
menu = 21;
break;
case 3:
lcd.setCursor(0, 0); lcd.print(F("3. Ustaw. AL."));
lcd.setCursor(0, 1); lcd.print(F("Termometr 3"));
break;
case 29:
menu = 30;
break;
case 30:
lcd.setCursor(0, 0); lcd.print(F("3.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min [ ] "));
lcd.setCursor(9, 1); lcd.print(temp3min,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 300:
val = temp3min;
menu = 301;
klaw = 0;
break;
case 301:
if (klaw == 4 && menu > 99){temp3min = val;menu = menu/10;EEPROM.writeFloat(40,val);}
lcd.setCursor(0, 0); lcd.print(F("3.1 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Min > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 31:
lcd.setCursor(0, 0); lcd.print(F("3.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max [ ] "));
lcd.setCursor(9, 1); lcd.print(temp3max,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 310:
val = temp3max;
menu = 311;
klaw = 0;
break;
case 311:
if (klaw == 4 && menu > 99){temp3max = val;menu = menu/10;EEPROM.writeFloat(50,val);}
lcd.setCursor(0, 0); lcd.print(F("3.2 Ustaw. Alarmu."));
lcd.setCursor(0, 1); lcd.print(F("Max > < "));
lcd.setCursor(9, 1); lcd.print(val,1);
lcd.setCursor(15, 1); lcd.write(byte(1));
break;
case 32:
menu = 31;
break;
case 4:
menu=3;
break;
}}
if (menuin == 0){
delay(100);
lcd.clear();
//lcd.setCursor(8, 1); lcd.write(byte(5));
if (temp1 > 99) {lcd.setCursor(1, 0);} else {lcd.setCursor(2, 0);}
lcd.print(temp1,1);
lcd.setCursor(6, 0);
lcd.write(byte(1));
if (temp2 > 99) {lcd.setCursor(10, 0);} else {lcd.setCursor(11, 0);}
lcd.print(temp2,1);
lcd.setCursor(15, 0);
lcd.write(byte(1));
if (temp3 > 99) {lcd.setCursor(1, 1);} else {lcd.setCursor(2, 1);}
lcd.print(temp3,1);
lcd.setCursor(6, 1);
lcd.write(byte(1));
//lcd.setCursor(12, 1);
//lcd.print(klawsek);
dzwiek = 0;
if (al1stan == 0 && al1==1) {lcd.setCursor(0, 0);lcd.write(byte(3));};
if (al1stan == 1 && al1==1) {lcd.setCursor(0, 0);lcd.write(byte(2));dzwiek = 1;};
if (al2stan == 0 && al2==1) {lcd.setCursor(9, 0);lcd.write(byte(3));};
if (al2stan == 1 && al2==1) {lcd.setCursor(9, 0);lcd.write(byte(2));dzwiek = 1;};
if (al3stan == 0 && al3==1) {lcd.setCursor(0, 1);lcd.write(byte(3));};
if (al3stan == 1 && al3==1) {lcd.setCursor(0, 1);lcd.write(byte(2));dzwiek = 1;};
if (millis() - previousMillis > 1000)
{
temp1 = sensors.getTempC(czuj1);
temp2 = sensors.getTempC(czuj2);
temp3 = sensors.getTempC(czuj3);
sensors.setWaitForConversion(false);
sensors.requestTemperatures();
previousMillis = millis();
}
}
if (dzwiek == 1) { if (ton==0){ton=1;tone(10,2000);} else if (ton==1){ton=0;tone(10,1000);};} else {noTone(10);}
wdt_reset();
}