我目前正在开展一个使用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 ......即使我调整它。我很确定电子设备没有任何问题,因为我已经分别测试了一切。
答案 0 :(得分:0)
我没有Arduino的经验,但我认为你不能为模拟输入设置pinMode(potenMeter, INPUT);
。另请注意A4
不必是您的电路板的第4号引脚。
答案 1 :(得分:0)
analogRead(potenMeter)/ 4095
是整数除法,通常返回0。
默认为int算术。
在8位Arduino上,你很容易遇到16位整数溢出。 但是这个粒子光子似乎是一个32位的东西