Разъяснение инструкции Arduino If

#arduino-uno #arduino-c

#arduino-uno #arduino-c

Вопрос:

Нужна помощь с этим кодом. В нем говорится об ошибке компиляции для платы. Я знаю, что проблема в инструкции if.

Я пытаюсь запрограммировать, если расстояние от ультразвука составляет от 1 до 150 см, отправьте звуковой сигнал на пьезо, иначе я хочу, чтобы он продолжался с основным циклом.

 // Include the library:
#include <NewPing.h>

// Define Trig, Echo pin and Piezo pin:
#define trigPin 3
#define echoPin 5
#define piezoPin 9

// Define maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-600 cm:
#define MAX_DISTANCE 400

// NewPing setup of pins and maximum distance.
NewPing sonar = NewPing(trigPin, echoPin, MAX_DISTANCE);

void setup() {
  // Open the Serial Monitor at 9600 baudrate to see ping results:
  Serial.begin(9600);
}
    
void loop() {
  // Wait 1s between pings. 29ms should be the shortest delay between pings:
  delay(1000);

  // Measure distance and print to the Serial Monitor:
  Serial.print("Distance = ");

  // Send ping, get distance in cm and print result (0 = outside set distance range):
  Serial.print(sonar.ping_cm()); 
  Serial.println(" cm");

  if ((sonar.ping_cm() >= 1) amp;amp; (sonar.ping_cm() <= 150)) {
    tone(piezoPin, 1000, 500);
  } else { 
  }
}
  

Спасибо

Комментарии:

1. NewPing и tone () хотят использовать один и тот же таймер

Ответ №1:

Как упоминал @Juraj, возможно tone , и NewPing.h использовать те же ресурсы из AVR.

В частности, NewPing.h библиотека использует прерывания по таймеру.

Я бы предложил попробовать использовать короткий импульс PWM для управления пьезо вместо использования tone .

Попробуйте использовать другие контакты с поддержкой PWM. Здесь у вас есть один пример того, как это сделать. Вы можете адаптировать его к своим потребностям.