王廷杰 发表于 2018-12-17 00:04:13

【实验室培训_201810期】 王廷杰 第五周任务

一、任务要求:根据输出的距离改变跑马灯的样式,并根据按键的输入状态输出米或者厘米。
二、工作环境:Ardunio、SR04超声波传感器,根据串口监视器查看不同按键输入状态时的不同距离尺寸类型。
三、实现步骤:通过扫描按键从而改变不同的尺寸输出类型,当不按下时输出厘米按下输出米。当测量距离小于一米时则用映射将距离映射变为为1到8以内,然后根据距离的远近改变跑马灯亮的个数,当距离大于1米直接亮最大盏。
实验代码:#define Trigpin 2
#define Echopin 3

int led = {4,5,6,7,8,9,10,11};//8个LED口
float Value_cm,Value_m;
int lednum,keynum;//灯亮变量和按键变量

void setup() {
Serial.begin(9600);
pinMode(Trigpin,OUTPUT);
pinMode(Echopin,INPUT);
pinMode(0,INPUT_PULLUP);
for(int i = 0; i < 8; i++)
    {
      pinMode(led,OUTPUT);
    }
}

void loop() {
digitalWrite(Trigpin,LOW);
delayMicroseconds(2);
digitalWrite(Trigpin,HIGH);
delayMicroseconds(10);
digitalWrite(Trigpin,LOW);
Value_cm= float(pulseIn(Echopin,HIGH)*17)/1000;
//将回拨时间换算成cm
//接受到高电平的时间(us)*340m/s=接收到的时间us*17000cm/1000000us=接收到高电平的时间*17/1000

Scankey();//扫描按键

if(keynum==1)      //如果按键被按下
{
Value_m=Value_cm/100;
Serial.print(Value_m);
Serial.println("m");
    }
else               //按键没有被按下
{
Serial.print(Value_cm);
Serial.println("cm");
}



if(Value_cm<100)
lednum=map(Value_cm,0,100,0,8);   //将0~100cm以内的距离映射为0~8,便于用LED将它表示出来
else
lednum=8;                         //超过100cm的距离直接亮最大数目的LED灯

for(int i=0;i<8;i++)
digitalWrite(led,LOW);
delayMicroseconds(1);

for(int i=0;i<lednum;i++)
digitalWrite(led,HIGH);
delay(500);


}



void Scankey()               //扫描函数
{
keynum=0;                     //清空变量
if(digitalRead(0)==LOW)
{
    delay(10);
   if(digitalRead(0)==LOW)
   { keynum=1;}
      }
    else
    keynum=0;
}
实现现象:

鲁亮 发表于 2018-12-18 15:40:35

还不错,可以
页: [1]
查看完整版本: 【实验室培训_201810期】 王廷杰 第五周任务