用外部中断解决问题了
attachInterrupt(5,echo_time,FALLING);//18PIN
当18pin高电平转到低电平开始中断,
计算发送完检测信号到进入中断时候经历的时间。- void len_distance()
- {
- noInterrupts();
- digitalWrite(EchoPin, HIGH);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(20);//>10us
- interrupts();
- digitalWrite(TrigPin, LOW);
- len_now = micros();//当前时间(us)
- }
- void echo_time()
- {
- len_in_time = micros();//当前时间(us)
- Time_Echo_us =len_in_time - len_now;
- if((Time_Echo_us < 60000) && (Time_Echo_us > 1)) //a valid pulse width should be between (1, 60000).
- {
- Len_cm = (Time_Echo_us*34/1000)/2;
- }
- }
复制代码 |