5-1比熱實驗(南一)

#include <OneWire.h>

#include <DallasTemperature.h>

#include <LiquidCrystal_I2C.h>

#include <SoftwareSerial.h>

#define TX 3 //HC-05 TX接3

#define RX 2 //HC-05 RX接2

#define ONE_WIRE_BUS A0 // Arduino類比接腳A0接到1-Wire裝置

SoftwareSerial BT(TX,RX);

LiquidCrystal_I2C lcd(0x3f,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27

// 運用程式庫建立物件

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

byte cmd;

float T,Tmax,Tmin,T2,T1;

byte Data[5];

int a1,a2,a3;

void setup(void){

Serial.begin(9600);

Serial.println("Temperature Sensor");

BT.begin(9600);

sensors.begin();

lcd.init();

lcd.backlight();

sensors.requestTemperatures(); // 要求匯流排上的所有感測器進行溫度轉換

T = sensors.getTempCByIndex(0);

Tmax=T;

Tmin=T;

}

void loop(void){

// 要求匯流排上的所有感測器進行溫度轉換

do{

sensors.requestTemperatures();

T2 = sensors.getTempCByIndex(0);

}while(T2==-127.0||T2==85.0);

T=T2;

// 取得溫度讀數(攝氏)並輸出,參數0代表匯流排上第0個1-Wire裝置

if(T>Tmax){

Tmax=T;

}

if(T<Tmin){

Tmin=T;

}

bt();

disp();

}

void disp(){

Serial.print(T,1);

Serial.println(" *C");

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Now= ");

lcd.print(T,1);

lcd.print(" ");

lcd.print((char) 0xDF);

lcd.print("C");

lcd.setCursor(0,1);

lcd.print("H=");

lcd.print(Tmax,1);

lcd.print(" ");

lcd.setCursor(8,1);

lcd.print("L=");

lcd.print(Tmin,1);

lcd.print(" ");

}

void bt(){

a1=int(T+100);

a3=int((T+100)*100)%100%10;

if(a3>5){

a2=1+int((T+100)*100)%100/10;

}else{

a2=int((T+100)*100)%100/10;

}

cmd = BT.read();

Data[0]='a';

Data[1]=a1;

Data[2]=a2;

if (cmd == 49){

for(int j=0;j<5;j++){

BT.write(Data[j]);

}

cmd=0;

}

}