问:使用电位计中的analogRead

时间:2016-07-22 14:36:36

标签: arduino

我目前正在开展一个使用Arduino,粒子光子和基本电气工程设置的节拍器项目。

我的目标是通过调整/旋转电位计并在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 ......即使我调整它。我很确定电子设备没有任何问题,因为我已经分别测试了一切。

2 个答案:

答案 0 :(得分:0)

我没有Arduino的经验,但我认为你不能为模拟输入设置pinMode(potenMeter, INPUT);。另请注意A4不必是您的电路板的第4号引脚。

答案 1 :(得分:0)

  

analogRead(potenMeter)/ 4095

是整数除法,通常返回0。

默认为int算术。

在8位Arduino上,你很容易遇到16位整数溢出。 但是这个粒子光子似乎是一个32位的东西