冯洁莹 发表于 2018-12-14 19:34:11

【实验室培训_201810期】+冯洁莹+第五周任务(软件)

本帖最后由 冯洁莹 于 2018-12-14 19:34 编辑

一、任务要求:,根据输出的距离改变跑马灯的样式,并根据按键的输入状态输出不同距离尺寸(公制【米,厘米】,英制【英寸】)。
二、工作环境:通过ardunio软件编程和SR04超声波传感器改变输出距离,根据串口监视器查看不同按键输入状态时的不同距离尺寸类型。
三、实现步骤:通过设定一个按键变量值,用以通过改变不同的按键输入从而改变不同的尺寸类型。以10为基准。若输出距离大于10,则偶数灯亮;若输出距离小于10,则奇数灯亮;
实验现象:
1、按键改变不同的尺寸类型

2、距离小于10,奇数灯亮时


3、距离大于10,偶数灯亮时


四、代码展示:
const int TrigPin = 2;
const int EchoPin = 3;
int led={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,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,HIGH);
      delay(500);
      digitalWrite(led,LOW);
      delay(500);}
      }
      if(distance>10)
       for(i=1;i<8;i=i+2)
      {digitalWrite(led,HIGH);
      delay(500);
      digitalWrite(led,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的高电平信号;按键的变量赋值时,要注意防抖动程序的编写。

鲁亮 发表于 2018-12-18 14:55:28

还不错,应该是用心思考了之后再做的
页: [1]
查看完整版本: 【实验室培训_201810期】+冯洁莹+第五周任务(软件)