So I am "playing" with an Arduino Uno R3. With an ultrasonic sensor and LED's I programmed the Arduino to measure a distance, and if it gets too close to something, the LEDs start to shine one by one. Now I want to implement a buzzer that beeps in a different interval for each LED shining. Basically like a distance sensor in cars for parking.
My problem is that I tried it with a simple activate, delay, deactivate but figured out fast that it delays the whole program. Does anyone know how I can solve my problem?
#include "SR04.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
#define BUZZER 2
unsigned char led[8]={3,4,5,6,7,8,9,10};
#define MAX 50
void setup() {
Serial.begin(9600);
delay(1000);
for(int i=0;i<8;i++){
pinMode(led[i], OUTPUT);
digitalWrite(led[i], LOW);
}
pinMode(BUZZER, OUTPUT);
}
void loop() {
long a=0;
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
Serial.println(a);
distance_measure(a, sr04);
}
void distance_measure(long a, SR04 sr04){
a=sr04.Distance();
for(int i=7;i>=0;--i){
if(a<=(i+1)*(MAX/8)){
digitalWrite(led[i], HIGH);
beep(i);
}
else{
digitalWrite(led[i],LOW);
}
}
delay(50);
}
void beep(int i){
digitalWrite(BUZZER, HIGH);
delay(50);
digitalWrite(BUZZER, LOW);
delay(i*300);
}