我有2个按钮和一个液晶显示屏。这些按钮用于降低/提高麦克风传感器的阈值。 我旧的传感器代码是:
int val = analogRead(0);
switch(val)
{
case 600:
{
digitalWrite(FLASH_PIN, HIGH);
delay(100);
digitalWrite(FLASH_PIN, LOW);
break;
}
如您所见,我使用switch
,当麦克风升至600
时,我会触发LED,
我的问题是:如何让代码通过按钮获取阈值的新设置?
因此,case 600
应该是case 'new setting'
答案 0 :(得分:1)
首先,使用'if'比'switch'更通用。例如,如果值为601,您仍然希望LED闪烁,但您当前的代码不会这样做。
您需要的是在函数之外定义的持久变量。您无法在setup()中定义它,否则将无法在loop()中识别它。然后,您可以查找从开关读取的值的更改,并相应地调整变量。例如:
int threshold=600;
int prevUp=LOW;
int prevDown=LOW;
const int increment=10;
const int flashPin=13;
const int upButtonPin=12;
const int downButtonPin=11;
const int micPin=0;
void setup() {
pinMode(flashPin,OUTPUT);
pinMode(upButtonPin,INPUT);
pinMode(downButtonPin,INPUT);
digitalWrite(flashPin,LOW);
}
void loop() {
int up=digitalRead(upButtonPin);
int down=digitalRead(downButtonPin);
if (up==HIGH && prevUp==LOW) threshold+=increment;
if (down=HIGH && prevDown==LOW) threshold-=increment;
threshold=constrain(threshold,0,1023);
int (analogRead(micPin)>=threshold){
digitalWrite(flashPin, HIGH);
delay(100);
digitalWrite(flashPin, LOW);
}
prevUp=up;
prevDown=down;
}
请注意我在这里写的方式,每次打开设备时阈值都会重置为600。如果您希望即使在拔下设备时阈值仍然存在,您将需要使用Arduino的EEPROM。但那更复杂。如果你想让我进入它,请告诉我。