#include #include #include #define LED_PIN (13) //ledka na desce #define PWR_Tx (9) //zapinani napájení pro vysílač a teplomer //---------------------SLEEP----------------------------------------- Sleep sleep; unsigned long sleepTime; //how long you want the arduino to sleep //-------------------------------------------------------------------- // tyto čísla budeme odesílat byte teplota[] = {0,0,0,0,0,0,0,0,0,0}; int ID = 5; //ID je 5 OneWire ds(10); // ds18b20 pin #2 (middle pin) to Arduino pin 10 // ds18b20 pin #1 GND // ds18b20 pin #3 +5vdc // 5k ohm resistor between pins 2 & 3 byte i; byte present = 0; byte data[12]; byte addr[8]; int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; char buf[20]; void setup() { //nastaví pin 9 a 13 jako výstup pinMode(LED_PIN,OUTPUT); //pinMode(PWR_Tx, OUTPUT); // Zapne ser. komunikaci Serial.begin(9600); sleepTime = 5000; //set sleep time in ms, max sleep time is 49.7 days //digitalWrite(PWR_Tx,HIGH); // Data do vysílače jsou na pin 3. // Další číslo je počet opakovaní vysílaní // za sebou, v našem připadě 10x lwtx_setup(7, 10, 0, 140); } void SetTemp() { Serial.print("Test teplomeru"); //nastavení teploměru if (!ds.search(addr)) { Serial.print("Nenalezen"); teplota[4] = B1100; //nastaveni priznaku Nenalezen Serial.println(); ds.reset_search(); delay(250); return; } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC not valid!"); teplota[4] = B1111; //nastaveni priznaku CRC not valid delay(1000); Serial.println(); return; } teplota[4] = B0000; //inicializace v poradku } void getTemp() { int foo, bar; ds.reset(); ds.select(addr); ds.write(0x44,1); present = ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) { data[i] = ds.read(); } LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; // test most sig bit Tc_100 = (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25 } /* //----------------kontrolní sekce pro debug------------------------------------- if (SignBit) { TReading = -TReading; } Whole = Tc_100 / 100; // separate off the whole and fractional portions Fract = Tc_100 % 100; } void printTemp(void) { Serial.print("Teplota: "); Serial.print(Whole); Serial.print(","); Serial.print(Fract); Serial.println(); } //-------------------------------------------------------------------------------- */ void loop() { //digitalWrite(PWR_Tx, LOW); SetTemp(); getTemp(); // rozdělení naměřené teploty na 4 bitové čísla a přiřazení ID zařízení teplota[9] = Tc_100; teplota[8] = Tc_100 >> 4; teplota[7] = Tc_100 >> 8; teplota[6] = Tc_100 >> 12; //konverze teploty teplota[5] = ID; //ID // když je vysílač nezaneprázdněn if (lwtx_free()) { //odešli data lwtx_send(teplota); // odešle zprávu na serial o odeslání Serial.println("Data odeslana"); //Serial.print(teplota[4], BIN); Serial.println(); Serial.print(teplota[9], BIN); Serial.print(teplota[8], BIN); Serial.print(teplota[7], BIN); Serial.print(teplota[6], BIN); Serial.println(); Serial.print(teplota[5], BIN); Serial.println(); Serial.print(teplota[4], BIN); Serial.println(); Serial.print(Tc_100); digitalWrite(LED_PIN, HIGH); //pouhé bliknutí delay(100); digitalWrite(LED_PIN, LOW); //digitalWrite(PWR_Tx, HIGH); delay(500); } sleep.pwrDownMode(); //set sleep mode sleep.sleepDelay(sleepTime); //sleep for: sleepTime delay(100); }