新设置开关盒arduino

时间:2014-09-28 13:35:25

标签: c++ arduino

我有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'

而不是{{1}}

1 个答案:

答案 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。但那更复杂。如果你想让我进入它,请告诉我。