Разработка электронных часов с использованием микроконтроллера

дипломная работа

1.8 Листинг программы

#include<LiquidCrystal.h>

#include <OneWire.h>

OneWireds(10); // Подключаем датчик к 8 цифровому пину

LiquidCrystallcd(12, 11, 5, 4, 3, 2); //Подключаем LCD

void setup(void)

{

pinMode(A0,INPUT);

pinMode(7, OUTPUT);

Serial.begin(9600);// Связь с ПК

lcd.begin(16, 2); //16 знаков, 2 строки

lcd.print("Temperature:"); //Печатаем верхнюю строку LCD

}

void loop(void)

{

bytei;

bytetype_s;

byte data[12];

byteaddr[8];

floatcelsius, fahrenheit;

inttemp_r;

// Ищем адрес датчика

if (!ds.search(addr))

{

Serial.println("No more addresses.");

Serial.println();

ds.reset_search();

delay(250);

return;

}

// Проверяем не было ли помех при передаче

if (OneWire::crc8(addr, 7)!= addr[7])

{

Serial.println("CRC is not valid!");

return;

}

Serial.println();

// Определяем серию датчика

switch (addr[0])

{

case 0x10:

Serial.println(" Chip = DS18S20");

type_s = 1;

break;

case 0x28:

Serial.println(" Chip = DS18B20");

type_s = 0;

break;

case 0x22:

Serial.println(" Chip = DS1822");

type_s = 0;

break;

default:

Serial.println("Device is not a DS18x20 family device.");

return;

}

ds.reset();

ds.select(addr); // Выбираем адрес

ds.write(0x44, 1); // Производим замер, в режиме паразитного питания

delay(1000);

ds.reset();

ds.select(addr);

ds.write(0xBE); // Считываем оперативную память датчика

for(i = 0; i < 9; i++)

{

data[i] = ds.read(); // Заполняем массив считанными данными

} // Данные о температуре содержатся в первых двух байтах, переведем их в одно значение и преобразуем в шестнадцатиразрядное число

int16_t raw = (data[1] << 8) | data[0]; // Переводим температуру в шкалы по Цельсию и Фаренгейту

if (type_s)

{

raw = raw << 3;

}

if (data[7] == 0x10)

{

raw = (raw & 0xFFF0) + 12 - data[6];

} else {

bytecfg = (data[4] & 0x60);

if (cfg == 0x00)

raw = raw << 3;

else if (cfg == 0x20)

raw = raw << 2;

else if (cfg == 0x40)

raw = raw << 1;

}

celsius = (float)raw / 16.0;

temp_r = analogRead(A0) / 51+20;

if (celsius>temp_r)

{

digitalWrite(7, HIGH);

}

else

{

digitalWrite(7, LOW);

}

Serial.print("Temp = "); //ПишемвПКинформацию

Serial.print(celsius);

Serial.print(" C, ");

Serial.print(fahrenheit);

Serial.println(" Т");

lcd.setCursor(0, 1); //Пишем в LCD на 2 строке

lcd.print("C:");

lcd.setCursor(2, 1);

lcd.print(celsius); //Цельсии

lcd.setCursor(8, 1);

lcd.print("Т:");

lcd.setCursor(10, 1);

lcd.print(temp_r); // Задаваемаятемпература

}

Делись добром ;)