|
實驗器件 :
Arduino 控制板 1 塊、USB 數據線 1 根、面包板 1 塊、面包板專用跳線 1 盒、鑷子 1 把、DS1307 RTC 模塊。
實驗電路圖:
DS18B20.jpg (84.06 KB, 下載次數: 96)
下載附件
創客集結號
2018-9-30 14:40 上傳
實驗原理 :
本實驗需要使用 OneWire 庫。DS1307 RTC模塊,上面集成了一個DS18B20溫度傳感器,還集成了另外一個存儲芯片。
Arduino代碼 :
- #include <OneWire.h>
- // DS18S20 Temperature chip i/o
- OneWire ds(2); // on pin 2
- void setup(void) {
- // initialize inputs/outputs
- // start serial port
- Serial.begin(9600);
- }
- void loop(void) {
- byte i;
- byte present = 0;
- byte data[12];
- byte addr[8];
- if ( !ds.search(addr)) {
- Serial.print("No more addresses.\n");
- ds.reset_search();
- return;
- }
- Serial.print("R=");
- for( i = 0; i < 8; i++) {
- Serial.print(addr[i], HEX);
- Serial.print(" ");
- }
- if ( OneWire::crc8( addr, 7) != addr[7]) {
- Serial.print("CRC is not valid!\n");
- return;
- }
- if ( addr[0] == 0x10) {
- Serial.print("Device is a DS18S20 family device.\n");
- }
- else if ( addr[0] == 0x28) {
- Serial.print("Device is a DS18B20 family device.\n");
- }
- else {
- Serial.print("Device family is not recognized: 0x");
- Serial.println(addr[0],HEX);
- return;
- }
- ds.reset();
- ds.select(addr);
- ds.write(0x44,1); // start conversion, with parasite power on at the end
- delay(1000); // maybe 750ms is enough, maybe not
- // we might do a ds.depower() here, but the reset will take care of it.
- present = ds.reset();
- ds.select(addr);
- ds.write(0xBE); // Read Scratchpad
- Serial.print("P=");
- Serial.print(present,HEX);
- Serial.print(" ");
- for ( i = 0; i < 9; i++) { // we need 9 bytes
- data[i] = ds.read();
- Serial.print(data[i], HEX);
- Serial.print(" ");
- }
- Serial.print(" CRC=");
- Serial.print( OneWire::crc8( d
- ata, 8), HEX);
- Serial.println();
- }
復制代碼
[創客集結號轉載]
|
|