重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3469|回复: 1
打印 上一主题 下一主题

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

[复制链接]

3

主题

3

帖子

61

积分

注册会员

Rank: 2

积分
61
跳转到指定楼层
楼主
发表于 2018-12-14 19:34:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 冯洁莹 于 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的高电平信号;按键的变量赋值时,要注意防抖动程序的编写。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

14

主题

69

帖子

485

积分

学生管理组

Rank: 8Rank: 8

积分
485
QQ
沙发
发表于 2018-12-18 14:55:28 | 只看该作者
还不错,应该是用心思考了之后再做的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-4-26 12:43 , Processed in 0.172703 second(s), 33 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表