URM37_V3_2_PWM.pde:
/*
Name: Arduino UNO 单片机 URM37 V3.2 超声波测距模块演示代码
Mode: PWM 脉冲 脉宽输出
By: Nuclear'Atk
Url: https://lcx.cc/post/1691/
Time: 2011年6月17日, 19:46:29
*/
int inputPin = 10; //定义超声波信号接收接口
int outputPin = 7; //定义超声波信号发送接口
void setup()
{
Serial.begin(9600);
pinMode(inputPin, INPUT);
pinMode(outputPin, OUTPUT);
}
void loop()
{
digitalWrite(outputPin, LOW); //使超声波信号发送接口低电平2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); //使超声波信号发送接口高电平10μs
delayMicroseconds(10);
float distance = pulseIn(inputPin,LOW); //读低脉冲时间
distance = distance/50; //将脉冲时间转化为距离(单位:厘米,超声波模块PWM输出规定50us为1cm。详情请参阅URM37V3.2超声波传感器的使用手册。)
Serial.print("Distance: ");Serial.print(distance);Serial.println(" cm"); //输出距离值
delay(100); //100ms
} |
URM37_V3_2_TTL.pde:
/*
Name: Arduino UNO 单片机 URM37 V3.2 超声波测距模块演示代码
Mode: TTL 电平 串口
By: Nuclear'Atk
Url: https://lcx.cc/post/1691/
Time: 2011年6月17日, 19:46:29
*/
int distance = 0; //距离变量
boolean flag = true; //循环判断
uint8_t DMcmd[4] = {0x22, 0x00, 0x00, 0x22}; //距离命令
void setup() {
Serial.begin(9600);
}
void loop() {
flag = true;
for(int i=0;i<4;i++)
{
Serial.print(DMcmd[i],BYTE); //发送超声波测距命令
}
delay(100);
while(flag)
{
if(Serial.available() > 0) //查询串口有无数据
{
int header=Serial.read(); //0x22开始接收距离数据
int highbyte=Serial.read(); //距离数据高8位
int lowbyte=Serial.read(); //距离数据低8位
int sum=Serial.read(); //sum校验和
if(highbyte == 255) distance = 65525; //数据无效
distance = highbyte * 255 + lowbyte; //计算结果
if (distance < 0) distance = 0; //处理负数
Serial.flush(); //清空缓冲器
Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); //输出距离值
flag = false;
}
delay(100);
}
} |
文章作者
Nuclear'Atk
上次更新
2011-08-16
许可协议
Nuclear'Atk(核攻击)网络安全实验室版权所有,转载请注明出处。