2012-02-08 18 views
0

私は教科目的のために私のArduinoで基本的なテルミンを構築しようとしていました。 私の考えは、音量のためのポテンショメータと音程のためのフォトレジスタを読み取ることでした。今基本的なテルミン:Arduinoテルミンのための同じピンのanalogWrite()とtone()コマンド

私のコードは次のとおりです。

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); 
} 

これは動作していない、それはソフトウェアの問題ではない回路間違いです。最初のブロックと2番目のブロックの両方がコメントの1つであれば動作していますが、一緒には動作しません。だから私の質問です:私は同じピンでのtone()とanalogWriteを使用できますか?

答えて

2

あなたは正しいですか?両方の機能を同じピンで使用することはできません。 analogWriteとtoneの2つの機能は、両方ともPWM信号でピンを制御しようとします。両方を順番に実行すると、デフォルト値が変更されます。 analogWriteの場合、トーンは490Hzです。

+0

たTHX @jdhを、私はそれを疑ったが、トーンの説明()メソッドは、私にとって非常に明確ではありませんでした:)あなたは両方を実装する方法のいずれかの提案があれば2つの基本的なアナログセンサーで機能(音量とピッチ)を調整することができます。とにかくThx! –

+0

ところで、私は何か重要なことは言及していませんでしたが、正しい方向に私を向けることができます。私はテストをしました:Arduinoによってポットによって設定された電圧を読み取る代わりに、ピエゾをPWMするために、ピエゾの+をポテンショメータの出力に直接接続して機能させました。私は「ポテンショメーターによって設定されたVを使用して電源を供給していると思ったので、正しくなければなりません」。そしてそれは働いていた。しかし、同じ時間に動作している可能性があるのは、フォトレジスタの値で指定されたanalogWriteでPWM処理しているのでしょうか? –

1

トーン出力を終了するためにnoTone()を呼び出しているところはありません。

noTone()で明示的に停止するまで、トーンは継続的に生成されます。

まだピンにトーンを出力していて、同じピンでanalogWrite()を実行することにした場合、私はあなたに多くの運がないと思います。

詳細情報はここで見つけることができます:http://arduino.cc/en/Reference/Tone

+0

thx @Jonathanあなたの答えはnoTone()は問題を解決していません... –

+0

@ Sr.Richie analogWrite()を別のピンに移動しようとしましたか? – Jonathan

+0

OMG私は今すぐ試してみよう –

関連する問題