上一篇关于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自带的串口查看器略显粗糙,可以参看这篇文章,使用SecureCRT作为串口的查看器。