2016-07-22 7 views
0

現在、私はArduino、粒子光子、および基本的な電気工学のセットアップを使用してメトロノームを構築するプロジェクトに取り組んでいます。Q:ポテンショメーターからanalogReadを使用しています。

このプロジェクトの目標は、ポテンショメータの調整/回転とOLEDスクリーンからの現在のBPMの表示によって、テンポを調整することです。しかし、問題は、ポテンショメータを回転させると、何かによってテンポの値が変わることではないということです。ブザーが鳴っていないので、私はこのことを知っているし、OLEDは、私は私のブレッドボード/光子にプログラムをフラッシュするたびに、現在のBPMが0

// This #include statement was automatically added by the Particle IDE. 
#include "SparkFunMicroOLED/SparkFunMicroOLED.h" 



#define PIN_RESET D7 
#define PIN_DC D6 
#define PIN_CS A2 

MicroOLED oled(MODE_SPI, PIN_RESET, PIN_DC, PIN_CS); 


int speakerPin = D2; 
int potenMeter = A4; 

void setup() { 
    pinMode(speakerPin, OUTPUT); 
    pinMode(potenMeter, INPUT); 
    oled.begin(); 
    oled.clear(ALL); 

} 

void loop() { 

    oled.clear(PAGE); 
    oled.setFontType(0); 
    oled.setCursor(20,0); 

    int bpm = (analogRead(potenMeter)/4095) * 180; 
    tone(speakerPin, 50, 100); 
    delay(bpm); 


    oled.printf("BPM: %d", bpm); 
    oled.display(); 
} 

であることを読み込み、OLEDは常にbpmが0に等しいことを表示します。 ..私はそれを調整しても。私は、すべてを別々にテストしたので、エレクトロニクスに何も問題はないと確信しています。

+0

のようだ: 'int型BPM =(analogRead(potenMeter)* 180)/ 4095; @EttoreBarattelliが言っている何' –

+0

は正しいです。また、訂正したいことがあるかもしれません。どのArduinoを使用していますか? – dubafek

+0

私はまた、Ettoreに同意します。さらに、Arduinos私は10ビットのADC、1024の値の範囲(0 .. 1023)を提供します。だから私は* 180UL/1024を計算するだろう。 – datafiddler

答えて

0

私はArduinoでの経験はありませんでしたが、アナログ入力にはpinMode(potenMeter, INPUT);を設定しないでください。また、A4はボードのピン番号4である必要はありません。

+0

は必須ではありませんが、傷つけないでください。 – datafiddler

+0

** Arduino **ではありません、Particle Photonの参考文献には の前にあります。Before 0.5.3注意:pinRead()でpinMode()を設定しないでください。 ' – datafiddler

0

analogRead(potenMeter)/ 4095

は整数除算であり、通常は0を返します。

デフォルトはint arithmeticsです。

8ビットArduinoでは、16ビットの整数オーバーフローが発生しやすいでしょう。この粒子光子分割前の乗算を実行するようにしてください32ビットのもの

関連する問題