本帖最后由 冯洁莹 于 2018-12-14 19:34 编辑
一、任务要求:,根据输出的距离改变跑马灯的样式,并根据按键的输入状态输出不同距离尺寸(公制【米,厘米】,英制【英寸】)。
二、工作环境:通过ardunio软件编程和SR04超声波传感器改变输出距离,根据串口监视器查看不同按键输入状态时的不同距离尺寸类型。
三、实现步骤:通过设定一个按键变量值,用以通过改变不同的按键输入从而改变不同的尺寸类型。以10为基准。若输出距离大于10,则偶数灯亮;若输出距离小于10,则奇数灯亮;
实验现象:
1、按键改变不同的尺寸类型
2、距离小于10,奇数灯亮时
3、距离大于10,偶数灯亮时
四、代码展示:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode const int TrigPin = 2;
const int EchoPin = 3;
int led[8]={4,5,6,7,8,9,10,11};
int key=13;
int i,k,j;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
for(i=0;i<8;i++)
pinMode(led[i],OUTPUT);
pinMode(key,INPUT_PULLUP);
Serial.println("Ultrasonic sensor:");
}
void loop() {
// put your main code here, to run repeatedly:
float distance;
// 检测脉冲宽度,并计算出距离
distance = sr04_read();
Serial.print(".....distance is:");
scankey();
if(k==1)
{ distance=distance*2.54;//英寸
distance= (int(distance*100.0))/100.0;
Serial.print(distance);
Serial.print("in");
Serial.println();
delay(1000);}
else
{ distance = (int(distance*100.0))/100.0;
//保留两位小数
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(1000);}
if(distance<10)
{
for(i=0;i<8;i=i+2)
{digitalWrite(led[i],HIGH);
delay(500);
digitalWrite(led[i],LOW);
delay(500);}
}
if(distance>10)
for(i=1;i<8;i=i+2)
{digitalWrite(led[i],HIGH);
delay(500);
digitalWrite(led[i],LOW);
delay(500);}
}
float sr04_read(void)
{ float distance;
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin,HIGH);
Serial.print(distance);
Serial.print("ms");
Serial.println();
delay(500);
distance = distance/58; //厘米
return distance; }
void scankey( ){
k=0;
if(digitalRead(13)==LOW)
{ delay(20);
if(digitalRead(13)==LOW)
k=1;
}
else
k=0;
}
五、心得总结:熟练掌握函数间的调用与被调用关系;超声波传感器采用IO触发测距,给至少10us的高电平信号;按键的变量赋值时,要注意防抖动程序的编写。 |