当analogRead()返回200到250之间的内容而不播放音符时,可以递增计数器。要解决此问题,请在两个呼叫上使用相同的阈值(即检查> 200和< = 200而不是> 200和< 250)。
另一个可能的问题是您的压力传感器正在弹跳。你可以将analogRead()包装成如下所示的函数来防止这种情况:
void read_dbnc_low(int pin) { while (1) { if (analogRead(pin) < 200) { delay(1); // 1ms if (analogRead(pin) < 200) { delay(1); // 1ms if (analogRead(pin) < 200) { return; } } } } } void read_dbnc_high(int pin) { while (1) { if (analogRead(pin) >= 200) { delay(1); // 1ms if (analogRead(pin) >= 200) { delay(1); // 1ms if (analogRead(pin) >= 200) { return; } } } } }
并修改你的for循环:
for (int i = 0; i < sizeof(mariomelody) / sizeof(mariomelody[0]); i++) { read_dbnc_low(pressurePin); digitalWrite(ledPin, LOW); read_dbnc_high(pressurePin); digitalWrite(ledPin, HIGH); tone(buzzerPin, mariomelody[i], 20); }