float readTemperature(bit mode) { byte tempH, tempL; float returnData; initDS18B20(); writeOneByte( 0xCC ); // 跳过读序号列号的操作 writeOneByte( 0x44 ); // 启动温度转换 if( mode ) { delayMS(800); //12位分辨率,需要750ms测温 } initDS18B20(); writeOneByte( 0xCC ); //跳过读序号列号的操作 writeOneByte( 0xBE ); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 tempL = readOneByte(); //低位 tempH = readOneByte(); //高位 if( tempH & 0x80 ) returnData=(~( tempH * 256 + tempL) + 1) * (-0.0625); //零度以下, 温度转换,把高位低位做相应的运算转换为实际的温度 else returnData=( tempH * 256 + tempL ) * 0.0625; //零度以上 return( returnData ); }
/** * setup * * Arduino setup function */ void setup() { // Initialize power pins pinMode(POWER_0_PIN, OUTPUT); digitalWrite(POWER_0_PIN, LOW); // Init panStamp panstamp.init(); // multiple of 8 is optimal (see PANSTAMP::goToSleep) byte interval[2] = {0, 8}; // high low // set initial TX Interval panstamp.setTxInterval(interval, 1); // Transmit product code getRegister(REGI_PRODUCTCODE)->getData(); // Enter SYNC state panstamp.enterSystemState(SYSTATE_SYNC); // Transmit periodic Tx interval getRegister(REGI_TXINTERVAL)->getData(); // Transmit power voltage getRegister(REGI_VOLTSUPPLY)->getData(); // Switch to Rx OFF state panstamp.enterSystemState(SYSTATE_RXOFF); initDS18B20(); //Serial.begin(38400); }