Пример #1
0
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 );
}
Пример #2
0
/**
 * 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);
}