心之永恒 发表于 2012-10-20 13:10:18

有人用过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 13:36:13

解决了!!

wing 发表于 2012-10-20 14:19:25

不如你顺便说下是怎么解决的

心之永恒 发表于 2012-10-20 15:29:30

本帖最后由 心之永恒 于 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();
}
}

桌面到天花板的距离 满准确的 不过扇形太大了


心之永恒 发表于 2012-10-20 15:45:43

默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74

rockyao 发表于 2012-11-25 00:25:47

请教LZ,该如何在arduino上接线呢?

zcbzjx 发表于 2012-11-25 12:53:18

应该接A4和A5吧。

kingofpop 发表于 2013-11-8 08:45:34

心之永恒 发表于 2012-10-20 15:29 static/image/common/back.gif
因为之前把配置命令0x72当成了探测指令 实际上应该是0x72发送一次即可,之后每次检测发送检测指令0xb0(设置 ...

我想问下。。。这个每次发Wire.write(byte(0x02));

是什么意思。。没有理解。

kingofpop 发表于 2013-11-11 16:36:06

心之永恒 发表于 2012-10-20 15:45 static/image/common/back.gif
默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74

懂了懂了。。。那个0x02是寄存器。。。不过我觉得不用加byte好像也可以。。。
页: [1]
查看完整版本: 有人用过ks103这个测距模块么。。