我试图用我的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吗?
答案 0 :(得分:2)
你是对的。您不能在同一个引脚上使用这两个功能。这两个函数analogWrite和tone都试图用PWM信号控制引脚。按顺序执行两者都会更改其默认值。对于analogWrite,音调为490Hz。
答案 1 :(得分:1)
我没有看到你正在调用noTone()来终止音调输出。
音调会不断产生,直到您通过noTone()明确停止它。
如果你仍然在你的引脚上输出音调,然后决定在同一个引脚上做一个analogWrite(),我认为你不会有太多运气。
可以在此处找到更多信息:http://arduino.cc/en/Reference/Tone