2014-09-28 69 views
-2

我有2个按钮和一个液晶显示器。这些按钮用于降低/提高麦克风传感器的阈值。 我的旧的传感器代码:新的设置开关案例arduino

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

首先,使用'如果'比'开关'更通用。例如,如果值是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。但是这更复杂。让我知道你是否想让我进入它。