极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19257|回复: 8

有人用过ks103这个测距模块么。。

[复制链接]
发表于 2012-10-20 13:10:18 | 显示全部楼层 |阅读模式
本帖最后由 心之永恒 于 2012-10-20 13:36 编辑

淘宝上买这个声波测距模块
用的是IIC通信。
有人用过么?



  1. #include "Wire.h"

  2. void setup()
  3. {
  4. Wire.begin();
  5. Serial.begin(9600);
  6. }

  7. void loop()
  8. {
  9.   Wire.beginTransmission(0x74);
  10.   Wire.write(2); //寄存器2
  11.   delay(1);
  12.   Wire.write(0x72);//发送命令
  13.   delay(1);
  14.   Wire.endTransmission(); // 停止
  15.   Wire.requestFrom(0x74,8);
  16.   while(Wire.available()>0)    // 当主机接收到从机数据时
  17.     {
  18.     byte c = Wire.read(); //接收一个字节赋值给c
  19.       Serial.print(c);
  20.     }
  21.     delay(1000);//延时1s
  22.      Serial.println( " ");
  23. }
复制代码


写了这个代码 但是接收到都是00450000
数据对着任何地方都不会变化

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2012-10-20 13:36:13 | 显示全部楼层
解决了!!
回复 支持 反对

使用道具 举报

发表于 2012-10-20 14:19:25 | 显示全部楼层
不如你顺便说下是怎么解决的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-20 15:29:30 | 显示全部楼层
本帖最后由 心之永恒 于 2012-10-20 15:49 编辑

因为之前把配置命令0x72当成了探测指令 实际上应该是0x72发送一次即可,之后每次检测发送检测指令0xb0(设置量程为5米)
读取返回值。

下面是参考卖家提供的代码写的:
  1. #include <Wire.h>
  2. #define KS103ADD  0x74
  3. word distance=0;
  4. void setup()
  5. {
  6.   Wire.begin();                    
  7.   Serial.begin(9600);            
  8.   Wire.beginTransmission(KS103ADD);
  9.   Wire.write(byte(0x02));     
  10.   Wire.write(0x71);   // 发送降噪指令   
  11.   Wire.endTransmission();     
  12.   delay(1000);                    
  13. }
  14. void loop()
  15. {
  16.   KS103_read();
  17.   Serial.println(distance);
  18.   delay(200);
  19. }

  20. word KS103_read(){
  21.   Wire.beginTransmission(KS103ADD);
  22.   Wire.write(byte(0x02));     
  23.   Wire.write(0xb0);     //量程设置为5m 不带温度补偿
  24.   Wire.endTransmission();     
  25.   delay(1);               
  26.   Wire.beginTransmission(KS103ADD);
  27.   Wire.write(byte(0x02));   
  28.   Wire.endTransmission();   
  29.   Wire.requestFrom(KS103ADD, 2);  
  30.   if(2 <= Wire.available())   
  31.   {
  32.     distance = Wire.read();
  33.     distance =  distance << 8;   
  34.     distance |= Wire.read();
  35.   }
  36. }
复制代码


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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-20 15:45:43 | 显示全部楼层
默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74
回复 支持 反对

使用道具 举报

发表于 2012-11-25 00:25:47 | 显示全部楼层
请教LZ,该如何在arduino上接线呢?
回复 支持 反对

使用道具 举报

发表于 2012-11-25 12:53:18 | 显示全部楼层
应该接A4和A5吧。
回复 支持 反对

使用道具 举报

发表于 2013-11-8 08:45:34 | 显示全部楼层
心之永恒 发表于 2012-10-20 15:29
因为之前把配置命令0x72当成了探测指令 实际上应该是0x72发送一次即可,之后每次检测发送检测指令0xb0(设置 ...

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

是什么意思。。没有理解。
回复 支持 反对

使用道具 举报

发表于 2013-11-11 16:36:06 | 显示全部楼层
心之永恒 发表于 2012-10-20 15:45
默认地址是0xe8 但是ARDUINO支持的是7位从机地址,所以要右移一位,变成0x74

懂了懂了。。。那个0x02是寄存器。。。不过我觉得不用加byte好像也可以。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 03:20 , Processed in 0.055798 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表