HC-SR04 и зумер

спасибо за высокую информативность вашего сообщениея.дающее некоторое понимание о вашей компитенции

#include <HCSR04.h>

/*
driver for the HCSR04 ultrasonic sensor, including a buzzer that blips at increasing frequency as the distance decreases
sensor is on D12 and D13
*/

#include <HCSR04.h>

#define NEAR_DISTANCE 1.0 // near point (cm) at which the sensor becomes unreliable
#define FAR_DISTANCE 400.0 // far point (cm) at which the sensor becomes unreliable
#define NEAR_PIP_DELAY 500 // inter-pip period (mS) at NEAR_DISTANCE
#define FAR_PIP_DELAY 2000 // inter-pip period (mS) at FAR_DISTANCE
#define PIP_TIME 50 // pip period (mS)
#define PIEZO_PIN 14
#define TONE_HZ 700

#define LOOP_DELAY 250 // delay in the loop (mS)
#define BUFFSIZE 10 // number of readings used to arrive at a moving average

float buffer[BUFFSIZE];
byte i = 0; // index of the next free element in buffer
float d, av, sum;

UltraSonicDistanceSensor distanceSensor(12, 13); // Initialize sensor useing digital pins 13 and 12
unsigned long last_pip_time;
unsigned long inter_pip_delay;

void setup () {
Serial.begin(9600); // We initialize serial connection so that we could print values from sensor.
for (byte j=0; j<BUFFSIZE; j++)
buffer[j] = 0.0;

last_pip_time = millis();

}

void loop () {
buffer[i] = distanceSensor.measureDistanceCm(); // read the sensor and buffer the result (in cm)
i = (i++)%BUFFSIZE;

// get the average of the readings in the buffer
sum = 0.0;
for (byte j=0; j<BUFFSIZE; j++)
  sum += buffer[j];

av = sum/BUFFSIZE;
Serial.println(av);

// work out a new inter-pip delay based on the distance measured
if(av > FAR_DISTANCE)
  inter_pip_delay = FAR_PIP_DELAY;
else
  if(av < NEAR_DISTANCE)
    inter_pip_delay = NEAR_PIP_DELAY;
  else
    inter_pip_delay = (int)(((((FAR_DISTANCE - NEAR_DISTANCE)*1000)/av)/(FAR_PIP_DELAY - NEAR_PIP_DELAY))*100);

// see if it is time for a pip, based on the current distance
if((millis() - last_pip_time) > (last_pip_time + inter_pip_delay))
{
   Serial.print("inter pip delay "); Serial.println((int)inter_pip_delay);

  // time for a pip
  // sound the pip for (PIP_TIME) mS
  tone(PIEZO_PIN, TONE_HZ, PIP_TIME);
  last_pip_time = millis();
}

delay(LOOP_DELAY);

}

Не за что, обращайтесь ещё.

Нельзя этого делать. Они потом на голову садятся, что мы и наблюдаем.

Продолжайте пытаться, не сдавайтесь, мы в Вас верим!

1 лайк

Вставь код по правилам, бестолочь

Сколько можно-то?

1 лайк

/*
  driver for the HCSR04 ultrasonic sensor, including a buzzer that blips at increasing frequency as the distance decreases
  sensor is on D12 and D13
*/

#include <HCSR04.h>

#define NEAR_DISTANCE 1.0   // near point (cm) at which the sensor becomes unreliable  
#define FAR_DISTANCE 400.0  // far point (cm) at which the sensor becomes unreliable  
#define NEAR_PIP_DELAY 500  // inter-pip period (mS) at NEAR_DISTANCE  
#define FAR_PIP_DELAY 2000  // inter-pip period (mS) at FAR_DISTANCE  
#define PIP_TIME 50         // pip period (mS)  
#define PIEZO_PIN 14
#define TONE_HZ 700

#define LOOP_DELAY 250      // delay in the loop (mS)  
#define BUFFSIZE 10         // number of readings used to arrive at a moving average

float buffer[BUFFSIZE];
byte i = 0;                 // index of the next free element in buffer
float d, av, sum;


UltraSonicDistanceSensor distanceSensor(12, 13);  // Initialize sensor useing digital pins 13 and 12
unsigned long last_pip_time;
unsigned long inter_pip_delay;

void setup () {
    Serial.begin(9600);  // We initialize serial connection so that we could print values from sensor.
    for (byte j=0; j<BUFFSIZE; j++)
      buffer[j] = 0.0;
     
    last_pip_time = millis();
}

void loop () {    
    buffer[i] = distanceSensor.measureDistanceCm(); // read the sensor and buffer the result (in cm)
    i = (i++)%BUFFSIZE;
   
    // get the average of the readings in the buffer
    sum = 0.0;
    for (byte j=0; j<BUFFSIZE; j++)
      sum += buffer[j];
 
    av = sum/BUFFSIZE;
    Serial.println(av);
   
    // work out a new inter-pip delay based on the distance measured
    if(av > FAR_DISTANCE)
      inter_pip_delay = FAR_PIP_DELAY;
    else
      if(av < NEAR_DISTANCE)
        inter_pip_delay = NEAR_PIP_DELAY;
      else
        inter_pip_delay = (int)(((((FAR_DISTANCE - NEAR_DISTANCE)*1000)/av)/(FAR_PIP_DELAY - NEAR_PIP_DELAY))*100);
   
    // see if it is time for a pip, based on the current distance
    if((millis() - last_pip_time) > (last_pip_time + inter_pip_delay))
    {
       Serial.print("inter pip delay "); Serial.println((int)inter_pip_delay);

      // time for a pip
      // sound the pip for (PIP_TIME) mS
      tone(PIEZO_PIN, TONE_HZ, PIP_TIME);
      last_pip_time = millis();
    }
   
    delay(LOOP_DELAY);
}

Ну пока не добавиться в описание что три апострофа в отдельной строке?

скандал это скрытый секс.Карл Юнг

Да кто его читает-то, то описание? ))

1 лайк

Это для последователей Юнга.

ну какой же скрытый, в СССР пока едешь на работу в автобусе кто-нибудь обязательно показательный сеанс устроит
PS у Литвака с показательными примерами об этом красочно рассказано

1 лайк

Зато остановку свою не проспишь! :smiley:

1 лайк

добрый знак!с Литвака начинал.Принцип сперматозоида

психологическое айкидо - мы тут с тобой всех не перебьём?

1 лайк

конструктивно!а такая критика шлифует умения

Ну, чё? ТС, вроде, даже код сумел выложить!

Кто-нить ему

выдаст? Или трындеть всю пятницу будем?

1 лайк

так сколько пятниц впустую, может хоть сёдня срастётся )))

одна фраза и виден уверенный навык амортизации

К вопросу из первого поста

#define PIEZO_PIN 14

Пин для зуммера назначается в этой строке