One-Wire라는 이름 처럼 1개의 라인을 이용해서 양방향 통신을 한다. One-Wire는 Dallas Semiconductor 에서 만들었다. 구조 하나의 마스터라 여러개의 슬레이브 IC로 구성이 된다. 마스터가 명령을 내린다. 회로 특징: 통신선에 4.7k ohm 풀업 저항을 사용한다. 참고 * http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf * http://www.pjrc.com/teensy/td_libs_OneWire.html * http://www.arduino.cc/playground/Learning/OneWire/ ===== DS18B20 연결하기 ===== {{http://i.imgur.com/6BoiQ.png}} {{http://tushev.org/images/stories/arduino/ds18x20/ds18b20_bb.png}} {{{ #include #define DS18S20_ID 0x10 #define DS18B20_ID 0x28 int pin_number = 3; float temp; OneWire ds(pin_number); boolean getTemperature(){ byte i; byte present = 0; byte data[12]; byte addr[8]; //find a device if (!ds.search(addr)) { ds.reset_search(); return false; } if (OneWire::crc8( addr, 7) != addr[7]) { return false; } if (addr[0] != DS18S20_ID && addr[0] != DS18B20_ID) { return false; } ds.reset(); ds.select(addr); // Start conversion ds.write(0x44, 1); // Wait some time... delay(850); present = ds.reset(); ds.select(addr); // Issue Read scratchpad command ds.write(0xBE); // Receive 9 bytes for ( i = 0; i < 9; i++) { data[i] = ds.read(); } // Calculate temperature value temp = ( (data[1] << 8) + data[0] )*0.0625; return true; } void setup(void) { // initialize inputs/outputs // start serial port Serial.begin(9600); } void loop(void) { Serial.print("."); if (getTemperature()) { Serial.print(temp); Serial.print(" "); } } }}} http://arduino.cc/playground/Learning/OneWire?action=sourceblock&num=1