穷创客教育之Arduino编程第二十课:拓展实验雷达

网友投稿 2019-10-26 13:11

思路就是:舵机从左向右慢慢旋转、转到右侧、再从右侧慢慢向左旋转。就像是一个雷达在扫描前方的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函数的返回值

四、实验电路:(实物图)

https://cdn.china-scratch.com/timg/191028/1311455119-0.jpg

五、编写程序

#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