#include <LiquidCrystal.h>
#include <BigNumbers.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Na PIN 7 cteni cidel
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//prectené adresy Cidel DS18b20
DeviceAddress Probe01 = { 0x28, 0xCC, 0x36, 0xB4, 0x01, 0x00, 0x00, 0xD0 };
DeviceAddress Probe02 = { 0x28, 0x27, 0x23, 0x9D, 0x01, 0x00, 0x00, 0x4C };
//zapojeni PINu 12, 11, 5, 4, 3, 2 do arduina
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//inicializace velkych pismen
BigNumbers bigNum(&lcd);
//nastaveni promenne
float tempC1, tempC1C;
unsigned int temp, tempA, tempB, tempC;
//smazani
byte RR[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B00000
};
//Stupen
byte RT[8] =
{
B00000,
B01110,
B01010,
B01010,
B01010,
B01010,
B01110,
B00000
};
//zobrazení mínusu
byte LR[8] =
{
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111,
B11111
};
byte MB[8] =
{
B11111,
B11111,
B11111,
B00000,
B00000,
B00000,
B00000,
B00000
};
//konec zobrazení mínusu
//desetinna carka
byte th[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B01110,
B01110,
B01110
};
void setup()
{
lcd.createChar(0,RR);
lcd.createChar(1,RT);
lcd.createChar(2,LR);
lcd.createChar(3,MB);
lcd.createChar(4,th);
sensors.begin();
sensors.setResolution(Probe01, 12);
sensors.setResolution(Probe02, 12);
lcd.begin(20,4);
lcd.clear();
}
void loop()
{
//inicializuje cidlo
sensors.requestTemperatures();
//precte teplotu z Probe02
tempC1 = sensors.getTempC(Probe02);
// tempc1 = -127 pak napise error
if (tempC1 == -127.00)
{
//smazani desetinne tecky
lcd.setCursor(9,3);
lcd.write(byte(0));
//konec
//vykresleni stupne
lcd.setCursor(17,0);
lcd.write(byte(0));
//KONEC stupne
//smaze minus
lcd.setCursor(0,1);
lcd.write(byte(0));
lcd.setCursor(0,2);
lcd.write(byte(0));
//KONEC minus
bigNum.clearLargeNumber(2);
bigNum.displayLargeNumber(12,2); //zobrazi pismeno E
bigNum.clearLargeNumber(6);
bigNum.displayLargeNumber(13,6); //zobrazi pismeno R
bigNum.clearLargeNumber(10);
bigNum.displayLargeNumber(14,10); //zobrazi pismeno O jao olga
bigNum.clearLargeNumber(14);
bigNum.displayLargeNumber(13,14);
bigNum.clearLargeNumber(18);
} else{
//kdyz teplota bude mensi nez -0.05 pak vykresli znamenko minus na displeji
if(tempC1 <= -0.05){
//vykresleni minus
lcd.setCursor(0,1);
lcd.write(2);
lcd.setCursor(0,2);
lcd.write(3);
//KONEC minus
tempC1C = tempC1 * -1;
//Serial.println(tempC1);
//vypise prvni cislo na displeji 10.00
temp = tempC1C/10;
//Serial.println(temp);
//vypise druhe cislo na displeji 01.00
tempA = tempC1C - (temp*10);
//Serial.println(tempA);
//vypise treti cislo na displeji 00.10
tempB = tempC1C*10-(temp*100+tempA*10);
//Serial.println(tempB);
//vypise ctvrte cislo na displeji 00.1
tempC = tempC1C*100-(temp*1000+tempA*100+tempB*10);
//Serial.println(tempC);
bigNum.clearLargeNumber(2);
bigNum.displayLargeNumber(temp,2);
bigNum.clearLargeNumber(6);
bigNum.displayLargeNumber(tempA,6);
//vykresleni desetinne tecky
lcd.setCursor(9,3);
lcd.write(4);
//KONEC
bigNum.clearLargeNumber(10);
bigNum.displayLargeNumber(tempB,10);
bigNum.clearLargeNumber(14);
bigNum.displayLargeNumber(tempC,14);
//vykresleni pismene C
bigNum.displayLargeNumber(11,18);
//konec
//vykresleni stupne
lcd.setCursor(17,0);
lcd.write(1);
//KONEC stupne
//kdyz teplota bude v plusi tak zapise teplotu a vymaze znamenko
}else{
//smazani minus
lcd.setCursor(0,1);
lcd.write(byte(0));
lcd.setCursor(0,2);
lcd.write(byte(0));
//KONEC minus
//Serial.println(tempC1);
//vypise prvni cislo na displeji 10.00
temp = tempC1/10;
//Serial.println(temp);
//vypise druhe cislo na displeji 01.00
tempA = tempC1 - (temp*10);
//Serial.println(tempA);
//vypise treti cislo na displeji 00.10
tempB = tempC1*10-(temp*100+tempA*10);
//Serial.println(tempB);
//vypise ctvrte cislo na displeji 00.1
tempC = tempC1*100-(temp*1000+tempA*100+tempB*10);
//Serial.println(tempC);
bigNum.clearLargeNumber(2);
bigNum.displayLargeNumber(temp,2);
bigNum.clearLargeNumber(6);
bigNum.displayLargeNumber(tempA,6);
bigNum.clearLargeNumber(10);
//vykresleni desetinne tecky
lcd.setCursor(9,3);
lcd.write(4);
//KONEC
bigNum.displayLargeNumber(tempB,10);
bigNum.clearLargeNumber(14);
bigNum.displayLargeNumber(tempC,14);
//vykresleni pismene C
bigNum.displayLargeNumber(11,18);
//konec
//vykresleni stupne
lcd.setCursor(17,0);
lcd.write(1);
//KONEC stupne
}
}
}