Как использовать тон в двух пинах?

У меня есть зуммер и ИК-светодиодный излучатель, поэтому мне приходится использовать функцию тона, чтобы подать звуковой сигнал зуммером и модулировать выходной сигнал светодиода. Я подключил светодиодный вывод 5 Arduino, вывод зуммера A0.

int tones[] = {261, 277, 294, 280, 230};
const int pinBuzzer = A0;
const int cr_pin = 5;

void setup(){
  Serial.begin(1200);
  tone(cr_pin, 38000);  /* For modulation at 38kHz */
  pinMode(pinBuzzer, OUTPUT);
}

void soundBuzzer() {
  for (int i = 0; i < sizeof tones; i ++) { 
    tone(pinBuzzer, tones[i]);
  } 
    noTone(pinBuzzer);  
}


void irLED() {
  Serial.println("Hello");
}

Это мой код, но я не могу заставить светодиод и зуммер работать одновременно, видимо, на зуммер влияет тональная линия (cr_pin, 38000); / * Для модуляции на частоте 38 кГц * /.

Я попробовал удалить (cr_pin, 38000); / * Для модуляции на 38 кГц * /. из настройки и оставить код следующим образом.

int tones[] = {261, 277, 294, 280, 230};
const int pinBuzzer = A0;
const int cr_pin = 5;

void setup(){
  Serial.begin(1200);
  pinMode(pinBuzzer, OUTPUT);
}

void soundBuzzer() {
  for (int i = 0; i < sizeof tones; i ++) { 
    tone(pinBuzzer, tones[i]);
  } 
    noTone(pinBuzzer);  
}


void irLED() {
tone(cr_pin, 38000);  /* For modulation at 38kHz */
      Serial.println("Hello");
noTone(cr_pin);
    }

В первом коде работает светодиод, но не зуммер, а во втором коде теперь работает зуммер, но не светодиод.

, 👍2


1 ответ


Лучший ответ:

1

В один момент времени может быть сгенерирован только один тон. Если тон уже воспроизводится на другом выводе, вызов tone() не даст никакого эффекта. Если тон воспроизводится на том же выводе, вызов установит его частоту. Источник: arduino.cc - tone().

noTone() Останавливает генерацию прямоугольной волны, вызванную tone(). Не оказывает никакого эффекта, если тон не генерируется. Источник: arduino.cc - noTone()

,