Основной Термен: команды analogWrite () и tone () на одном выводе для Термен Arduino - PullRequest
0 голосов
/ 09 февраля 2012

Я пытался создать базовый термен с моим Arduino для дидактических целей. Моя идея состояла в том, чтобы прочитать потенциометр для объема и фоторезистор для поля.

Мой код сейчас:

 int piezoPin = 5;
 int sensorPin = 1;
 int potPin = 2;

 int sogliaMinima = 20;
 int sogliaMassima = 160;

 void setup () {
   pinMode (piezoPin, OUTPUT);
   Serial.begin (9600);
 }

 void loop () {
  // first block of code working
  int potLevel = analogRead (potPin);
  int levelVolume = map (potLevel, 0, 1022, 0, 170);
  analogWrite (piezoPin, levelVolume);


  // second block of code working
  int sensorValue = analogRead (sensorPin);
  int pitchLevel = map (sensorValue, sogliaMinima, sogliaMassima, 100, 1000);
  tone (piezoPin, pitchLevel);
 }

Это не работает, и это проблема программного обеспечения, а не ошибка схемы. И первый блок, и второй блок работают, если комментируют один из них, но не работают вместе. Итак, мой вопрос: могу ли я использовать tone () и analogWrite на одном выводе?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Вы правы. Вы не можете использовать обе функции на одном выводе. Обе функции - аналоговый и тональный, пытаются управлять выводом с помощью ШИМ-сигнала. Выполнение обоих последовательно меняет их значения по умолчанию. Для аналогового письма тон 490 Гц.

1 голос
/ 09 февраля 2012

Я нигде не вижу, чтобы вы вызывали noTone () для прекращения тонального вывода.

Тон будет непрерывно генерироваться, пока вы явно не остановите его с помощью noTone ().

Есливы по-прежнему выводите тон на своем выводе, а затем решаете выполнить аналоговыйWrite () на этом же выводе, я не думаю, что вам повезет.

Более подробную информацию можно найти здесь: http://arduino.cc/en/Reference/Tone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...