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;
}
}