重工电子论坛

标题: 【实验室培训_201810期】+冯洁莹+第五周任务(软件) [打印本页]

作者: 冯洁莹    时间: 2018-12-14 19:34
标题: 【实验室培训_201810期】+冯洁莹+第五周任务(软件)
本帖最后由 冯洁莹 于 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,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
还不错,应该是用心思考了之后再做的




欢迎光临 重工电子论坛 (http://cqutlab.cn/) Powered by Discuz! X3.1