|
|
本帖最后由 zhengzaifaya 于 2013-8-21 23:18 编辑
使用一块OLED屏幕来显示温度, 3.7V手机电池供电, 精度是0.125℃.
代码:
- #include <OneWire.h>
- #include <SSD1306.h>
- #define OLED_CLK 9
- #define OLED_MOSI 8
- #define OLED_RESET 7
- #define OLED_DC 6
- #define DS18B20_PIN 2
- SSD1306 oled(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, -1);
- OneWire ds(DS18B20_PIN);
- byte addr[8];
- void setup(void) {
- Serial.begin(9600);
- oled.ssd1306_init(SSD1306_SWITCHCAPVCC);
- oled.clear();
- oled.display();
- while (!ds.search(addr))
- {
- ds.reset_search();
- delay(250);
- }
- }
- void loop(void) {
- byte i;
- byte present = 0;
- byte data[12];
- float celsius;
- ds.reset();
- ds.select(addr);
- ds.write(0x44, 1);
-
- delay(800);
-
- present = ds.reset();
- ds.select(addr);
- ds.write(0xBE);
- for ( i = 0; i < 5; i++) data[i] = ds.read();
- int16_t raw = (data[1] << 8) | data[0];
- byte cfg = (data[4] & 0x60);
- if (cfg == 0x00) raw = raw & ~7; // 9 bit, 93.75 ms
- else if (cfg == 0x20) raw = raw & ~3; // 10 bit, 187.5 ms
- else if (cfg == 0x40) raw = raw & ~1; // 11 bit, 375 ms
- //// default 12 bit, 750 ms
- celsius = (float)raw / 16.0;
- char temp[5];
- dtostrf(celsius, 5, 2, temp);
- strcat(temp, " Celsius.");
- oled.clear();
- oled.drawstring(22, 4, temp);
- oled.display();
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|