重工电子论坛

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

作者: 谭世耀    时间: 2018-12-17 15:27
标题: 【实验室培训_201810期】+谭世耀+第五周任务(软件)
一、任务要求:了解并掌握运用ardunio单片机控制SR04超声波实现对距离数据的采集,并且根据输出的距离数据来改变跑马灯的样式,并根据不同按键的输入状态输出不距离数据类型(厘米,米,英尺,英寸)。
二、工作环境:通过ardunio软件编程对SR04超声波实现对距离数据的采集。
三、实现步骤:对原有的程序进行改写,运用一个个按键实现通过串口监视器输出四种种不同的距离信息;再通过距离数据对LED灯进行控制(10cm-20cm亮一盏灯,20-30cm亮两盏灯)。

[C] syntaxhighlighter_viewsource syntaxhighlighter_copycode
#define IN 3
#define OUT 2
#define Keyone 4
#define LED1 7
#define LED2 8
#define LED3 9
#define LED4 10
#define LED5 11  
#define LED6 12  
#define LED7 13  
float val;
int state=0;

void LED()//点亮LED
{
  int j;
  for(j=LED1;j<=LED7;j++)
  digitalWrite(j,LOW);
  if(val<80)
  for(j=LED1;j<val/10+LED1-1;j++)
  digitalWrite(j,HIGH);
}
  void Metre()//串口输出距离单位为米
{
Serial.print("Metre:");
Serial.println(val/100.0);
}


  void Inch()//串口输出距离为英寸
{
  Serial.print("Inch:");
  Serial.println(val/2.54);
}

  void Cm()//串口输出距离为厘米
{
  Serial.print("Cm:");
  Serial.println(val);
}

void Distance()//计算距离
{
float distance;
digitalWrite(OUT,LOW);
delayMicroseconds(2);
digitalWrite(OUT,HIGH);//开始触发
delayMicroseconds(10);
digitalWrite(OUT,LOW);//结束触发
distance=pulseIn(IN,HIGH);
distance=distance/58;
val=distance;
}


void setup() {
Serial.begin(9600);//串口初始化
pinMode(IN,INPUT);
pinMode(OUT,OUTPUT);
pinMode(Keyone,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(LED7,OUTPUT);
}


void loop() {
  Distance();//计算距离
  if(digitalRead(Keyone)==1)//按键按下
  {
    delay(20);
    while(digitalRead(Keyone));
    state++;
  }
  switch(state%3)//控制输出的单位
  {
  case 0:Cm();break;
  case 1:Metre();break;
  case 2:Inch();break;
  default :break;
  }
  LED();  
  delay(20);
}

chaoshengbo.rar (771 Bytes, 下载次数: 0)
通过本次对超声波模块的学习,让我的编程变得更加的熟练。

作者: 鲁亮    时间: 2018-12-18 15:48
基本功能实现,还可以




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