基本的Theremin:在Arduino Theremin的同一个引脚上的analogWrite()和tone()命令

时间:2012-02-08 21:28:32

标签: arduino

我试图用我的Arduino建立一个基本的Theremin用于教学目的。 我的想法是读取音量的电位器和音高的光敏电阻。

我现在的代码是:

 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 个答案:

答案 0 :(得分:2)

你是对的。您不能在同一个引脚上使用这两个功能。这两个函数analogWrite和tone都试图用PWM信号控制引脚。按顺序执行两者都会更改其默认值。对于analogWrite,音调为490Hz。

答案 1 :(得分:1)

我没有看到你正在调用noTone()来终止音调输出。

音调会不断产生,直到您通过noTone()明确停止它。

如果你仍然在你的引脚上输出音调,然后决定在同一个引脚上做一个analogWrite(),我认为你不会有太多运气。

可以在此处找到更多信息:http://arduino.cc/en/Reference/Tone