穷创客教育之Arduino编程第二十课:拓展实验雷达
思路就是:舵机从左向右慢慢旋转、转到右侧、再从右侧慢慢向左旋转。就像是一个雷达在扫描前方的180度范围内的障碍物。每次角度改变之后、同时超声波测距一次、全局变量保存当前的角度和当前角度的前方的距离。
一、实验现象
舵机在0-180度范围内不断旋转,超声波不断向外探测,通过串行监视器输出超声波检测情况。
二、电子元件:
UNO开发板、舵机1个、超声波1个和杜邦线若干
三、实验所用函数及语句
①Serial.begin(speed):初始化Arduino的串口通信功能,其中参数speed指串口通信波特率,用于设定串口通信速率的参数。串口通信双方必须使用相同的波特率才可以正确通信。波特率是一个衡量通信速度的参数,表示每秒传送的bit的个数。如9600波特表示每秒发送9600bit的数据。
②Serial.print(val) Serial.println(val):打印输出数据 Serial.println 函数会在输出完指定数据后,再输出一组回车换行符。
③有返回值无参数类型函数:
定义:例如以下定义一个整形函数analogzhi(),返回i值。
int analogzhi()
//首先用int定义这个函数返回的值得类型为int,注意函数定义应在loop()函数外。
{
int i; //定义一个变量用于返回值
i=analogRead(A0);
return(i);//返回i的值
}
调用函数:在调用的时候可以如下所示:
int a; //先定义一个变量
a=analogzhi(); //令这个变量等于analogzhi函数的返回值
四、实验电路:(实物图)
五、编写程序
#include
Servo myservo;
float cm;
int i;
void setup()
{
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, INPUT);
myservo.attach(10);
}
void loop()
{
for(i=0;i<180;i=i+10){
cm=ceju();
shucu(cm);
myservo.write(i);
}
for(i=180;i>=0;i=i-10){
cm=ceju();
shucu(cm);
myservo.write(i);
}
}
void shucu(float cm1 ){
if (cm1 >= 20) {
Serial.print("安全");
Serial.println();
//串口向外发送字符串为空 ,并带回车换行
} else {
Serial.print("方位");
Serial.print(i);
Serial.print("度");
Serial.print(cm);
Serial.print("厘米个有危险");
Serial.println();
}
delay(100);
}
float ceju( ){
float juli;
digitalWrite(2, LOW);
delayMicroseconds(2);
digitalWrite(2, HIGH);
delayMicroseconds(10);
digitalWrite(2, LOW);
juli = pulseIn(3, HIGH) / 58.0; //算成厘米
return(juli);
}
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com