#define Trigpin 2
#define Echopin 3
int led[8] = {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;
}
IMG_6312.JPG (118.01 KB, 下载次数: 1064)
零盏
IMG_6318.JPG (160.13 KB, 下载次数: 1038)
一盏
IMG_6319.JPG (190.26 KB, 下载次数: 1070)
三盏
IMG_6320.JPG (165.38 KB, 下载次数: 1060)
最大距离
NWZ03CBRP05]_M3CUHFI`X0.png (4.72 KB, 下载次数: 1054)
串口监视器
欢迎光临 重工电子论坛 (http://cqutlab.cn/) | Powered by Discuz! X3.1 |