I code it

Code and Life

Arduino URM37 温度探测

上一篇关于Arduino的文章中,介绍了使用URM37模块来探测距离,这一篇讨论如何使用URM37来探测温度,连线方式和上一篇文章一样。只是发送的命令变了:

命令 功能 描述
0x11+NC+NC+0x11
如:
0x11+0x00+0x00+0x11
启动16位温度读取 成功:
0x11+high(temp)+low(temp)+sum
如果是0度以上,则high的前4位置0
如果是0度以下,
则high的前4位置1

high的其余4位于low的8位共12位表示温度,精度为0.1

失败:
0x11+0xff+0xff+sum

有了这个功能表,剩余的事情就简单了,只需要接好线,然后将表格的描述翻译成代码即可:

   1: int val = 0;
   2: int usval = 0;
   3: int sign = 0;
   4: 
   5: boolean flag = false;
   6:  
   7: uint8_t DMCmd[4] ={0x11, 0x00, 0x00, 0x11};//温度读取命令
   8:  
   9: void setup()
  10: {
  11:     Serial.begin(9600);
  12:     delay(200);
  13: }
  14:  
  15: void loop()
  16: {
  17:     flag = true;
  18:     
  19:     //写入命令
  20:     for(int i = 0; i < 4; i++){
  21:         Serial.write(DMCmd[i]);
  22:     }
  23:     
  24:     delay(100);
  25:     
  26:     while(flag){
  27:         if(Serial.available() >; 0){
  28:             int head = Serial.read();//读头部
  29:             int high = Serial.read();
  30:             int low = Serial.read();
  31:             int sum = Serial.read();
  32:             
  33:             if(high == 0xFF && low == 0xFF){//非法值
  34:                 Serial.println();
  35:             }else{
  36:                 if(high &; 0xF0 == 240){
  37:                     sign = 1;
  38:                 }else(high & 0xF0 == 0){
  39:                     sign = 0;
  40:                 }
  41:                 
  42:                 usval = (high &; 0x0f) * 255 + low;
  43:                 Serial.print("temperature=");
  44:                 if(sign){
  45:                     Serial.print("-");
  46:                 }else{
  47:                     Serial.print("+");
  48:                 }
  49:                 
  50:                 Serial.print(usval/100);
  51:                 Serial.print((usval%100)/10);
  52:                 Serial.print(".");
  53:                 Serial.print(usval%10);
  54:             }
  55:             flag = flase;
  56:         }
  57:     }
  58:     delay(100);
  59: }

当温度在0度以上时,输出一个加号(+),否则输出一个减号(-),然后是温度值。运行结果如下:

arduino-temperature

另外,arduino自带的串口查看器略显粗糙,可以参看这篇文章,使用SecureCRT作为串口的查看器。

Comments