本帖最后由 greenfort 于 2012-8-13 01:49 編輯
初學(xué)Arduino,制作的通過(guò)12864顯示多個(gè)18B20溫度的程序
接線
請(qǐng)參考本論壇中的18B20及LCD12864與Arduino接線,這里不再重復(fù),只是強(qiáng)調(diào)一點(diǎn),18B20的PIN1和PIN3要同時(shí)接地,否則會(huì)在返回若干值后出現(xiàn)一次錯(cuò)誤值(85.00)不知道什么原因
鑒于12864的顯示大小,程序最多接9個(gè)18B20傳感器,多了顯示不了
程序代碼如下- /*
- LCD Arduino
- PIN1 = GND
- PIN2 = 5V
- RS(CS) = 8;
- RW(SID)= 9;
- EN(CLK) = 3;
- PIN15 PSB = GND;
- */
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <stdlib.h>
- #define ONE_WIRE_BUS 2
- #include "LCD12864RSPI.h"
- #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- char str[4]; //定義溫度值存儲(chǔ)數(shù)組,4位,其中3位為數(shù)字,1位為小數(shù)點(diǎn)
- double temp =0; //定義中間變量,用于將獲取的float型溫度值轉(zhuǎn)變?yōu)閡nsigned char數(shù)組
- unsigned char show[]={
- 0xB5,0xB1,0xC7,0xB0,0xBB,0xB7,0xBE,0xB3,0xCE,0xC2,0xB6,0xC8};//當(dāng)前環(huán)境溫度
- int numberOfDevices;
- void setup()
- {
- Serial.begin(9600);
- sensors.begin(); //傳感器初始化
- numberOfDevices = sensors.getDeviceCount();
- LCDA.Initialise(); // 屏幕初始化
- LCDA.DisplayString(0,0,show,AR_SIZE(show));//第一行第1格開(kāi)始,顯示文字“當(dāng)前環(huán)境溫度”
- }
- void loop()
- {
- sensors.requestTemperatures(); //獲取溫度值
- for(int i=0;i<numberOfDevices; i++) //逐個(gè)獲取傳感器的溫度
- {
- temp=sensors.getTempCByIndex(i); //使用索引序號(hào)獲得攝氏度數(shù)值
- dtostrf(temp,4,2,str); //將獲取的數(shù)值轉(zhuǎn)換為字符型數(shù)組
- if (i<=2)
- {
- LCDA.DisplayString(1,i*3,(unsigned char *)str,sizeof(str));
- } //自第2行第1列開(kāi)始顯示溫度值
- else
- {
- if(i>2&&i<=5)
- {
- LCDA.DisplayString(2,(i-3)*3,(unsigned char *)str,sizeof(str));
- }
- else
- {
- LCDA.DisplayString(3,(i-6)*3,(unsigned char *)str,sizeof(str));
- }
- }
- }
- }
復(fù)制代碼
|