//-------------------------------------- //file :say_th.ino //fn :說出溫濕度值 //author:Victor Chen //web :www.vic8051.com //-------------------------------------- int led = 13; //設定LED腳位 int k1 =7; //設定按鍵腳位 int gnd=19; //設定地線控制腳位 int v5=18; //設定5v控制腳位 int ck=14;int sd=15; int rdy=16; int rst=17; //設定語音合成控制腳位 #include "SevenSegmentTM1637.h" int PIN_CLK = 4; // define CLK pin (any digital pin) int PIN_DIO = 5; // define DIO pin (any digital pin) int bz=8; SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); #include dht11 DHT11; int cio= 10; char mess[]="1234"; int te, hu; //-------------------------------------- void setup()//初始化設定 { pinMode(v5, OUTPUT); pinMode(gnd, OUTPUT); digitalWrite(v5, HIGH); digitalWrite(gnd, LOW); delay(1000); pinMode(ck, OUTPUT); pinMode(rdy, INPUT); digitalWrite(rdy, HIGH); pinMode(sd, OUTPUT); pinMode(rst, OUTPUT); pinMode(led, OUTPUT); pinMode(k1, INPUT); digitalWrite(k1, HIGH); digitalWrite(rst, HIGH); digitalWrite(ck, HIGH); Serial.begin(9600); pinMode(bz, OUTPUT); digitalWrite(bz, LOW); Serial.begin(9600); Serial.println("DTH11 test:"); display.begin(); display.setBacklight(100); display.print(mess); delay(1000); display.clear(); mess[0]='5'; mess[1]='6';mess[2]='7';mess[3]='8'; display.print(mess); delay(1000); display.clear(); be(); } //----------------------------------- void led_bl()//LED 閃動 { int i; for(i=0; i<2; i++) { digitalWrite(led, HIGH); delay(150); digitalWrite(led, LOW); delay(150); } } //-------------------------------- void be() { int i; for(i=0; i<100; i++) { digitalWrite(bz, HIGH); delay(1); digitalWrite(bz, LOW); delay(1); } delay(50); } //----------------------------------- void op(unsigned char c) //輸出語音合成控制碼 { unsigned char i,tb; while(1) // if(RDY==0) break; if( digitalRead(rdy)==0) break; digitalWrite(ck, 0); tb=0x80; for(i=0; i<8; i++) { // send data bit bit 7 first o/p if((c&tb)==tb) digitalWrite(sd, 1); else digitalWrite(sd, 0); tb>>=1; // clk low digitalWrite(ck, 0); delay(10); digitalWrite(ck, 1); } } /*-------------------------------------------------------------------*/ void say(unsigned char *c) //將字串內容輸出到語音合成模組 { unsigned char c1; do{ c1=*c; op(c1); c++; } while(*c!='\0'); } /*-----------------------*/ void reset()//重置語音合成模組 { digitalWrite(rst,0); delay(50); digitalWrite(rst, 1); } // 中文big5 內碼,內容:語音合成 unsigned char m0[]={0xbb, 0x79, 0xad,0xb5, 0xa6, 0x58, 0xa6,0xa8,0}; //溫度 unsigned char mte[]={0xB7,0xC5,0xAB,0xD7,0}; //濕度 unsigned char mhu[]={0xC0,0xE3,0xAB,0xD7,0}; void say_dig(int d) { int c; c=d/10; if(c!=0) op(c+0x30); c=d%10; op(c+0x30); } void say_data() { say(mte); say_dig(te); led_bl(); delay(1500); say(mhu); say_dig(hu); } void loop()//主程式迴圈 { int c,d; reset(); led_bl(); say(mte); say(mhu); //語音合成輸出 while(1) //無窮迴圈 { // k1c=digitalRead(k1); //偵測按鍵有按鍵則語音合成輸出 if(digitalRead(k1)==0) { say_data(); led_bl(); } if (Serial.available() > 0) //偵測串口有信號傳入,則語音合成輸出 { c= Serial.read(); //有信號傳入 if(c=='1') { say(mte); led_bl(); } if(c=='2') { say(mhu); led_bl(); } } c=DHT11.read(cio); if (c==0) { Serial.print("hum %:"); Serial.print(DHT11.humidity); Serial.print(" temp oC: "); Serial.println(DHT11.temperature); te=DHT11.temperature; if(te>=28) be(); hu=DHT11.humidity; d=DHT11.temperature/10; mess[0]=d+0x30; d=DHT11.temperature%10; mess[1]=d+0x30; d=DHT11.humidity/10; mess[2]=d+0x30; d=DHT11.humidity%10; mess[3]=d+0x30; display.print(mess); } else Serial.println("DTH11 i/o error"); delay(500); } }