有人用过ks103这个测距模块么。。
本帖最后由 心之永恒 于 2012-10-20 13:36 编辑淘宝上买这个声波测距模块
用的是IIC通信。
有人用过么?
#include "Wire.h"
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
Wire.beginTransmission(0x74);
Wire.write(2); //寄存器2
delay(1);
Wire.write(0x72);//发送命令
delay(1);
Wire.endTransmission(); // 停止
Wire.requestFrom(0x74,8);
while(Wire.available()>0) // 当主机接收到从机数据时
{
byte c = Wire.read(); //接收一个字节赋值给c
Serial.print(c);
}
delay(1000);//延时1s
Serial.println( " ");
}
写了这个代码 但是接收到都是00450000
数据对着任何地方都不会变化
解决了!! 不如你顺便说下是怎么解决的 本帖最后由 心之永恒 于 2012-10-20 15:49 编辑
因为之前把配置命令0x72当成了探测指令 实际上应该是0x72发送一次即可,之后每次检测发送检测指令0xb0(设置量程为5米)
读取返回值。
下面是参考卖家提供的代码写的:
#include <Wire.h>
#define KS103ADD0x74
word distance=0;
void setup()
{
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(KS103ADD);
Wire.write(byte(0x02));
Wire.write(0x71); // 发送降噪指令
Wire.endTransmission();
delay(1000);
}
void loop()
{
KS103_read();
Serial.println(distance);
delay(200);
}
word KS103_read(){
Wire.beginTransmission(KS103ADD);
Wire.write(byte(0x02));
Wire.write(0xb0); //量程设置为5m 不带温度补偿
Wire.endTransmission();
delay(1);
Wire.beginTransmission(KS103ADD);
Wire.write(byte(0x02));
Wire.endTransmission();
Wire.requestFrom(KS103ADD, 2);
if(2 <= Wire.available())
{
distance = Wire.read();
distance =distance << 8;
distance |= Wire.read();
}
}
桌面到天花板的距离 满准确的 不过扇形太大了
默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74
请教LZ,该如何在arduino上接线呢? 应该接A4和A5吧。 心之永恒 发表于 2012-10-20 15:29 static/image/common/back.gif
因为之前把配置命令0x72当成了探测指令 实际上应该是0x72发送一次即可,之后每次检测发送检测指令0xb0(设置 ...
我想问下。。。这个每次发Wire.write(byte(0x02));
是什么意思。。没有理解。 心之永恒 发表于 2012-10-20 15:45 static/image/common/back.gif
默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74
懂了懂了。。。那个0x02是寄存器。。。不过我觉得不用加byte好像也可以。。。
页:
[1]