|
发表于 2012-10-1 21:52:42
|
显示全部楼层
我确定下面的代码可以满足你的要求。A0端电压变化超过30个AD数值的话,板子上面的d13灯就亮一秒。
- int prevdata = 0, nowdata = 0, mark = 0; //prevdata上一次读到的AD数值,nowdata本次数值,mark是灯亮的标志
- unsigned long lighttime = 0; //计算亮灯时间的存储
- int LED = 13; //LED在13脚
- int ADIN = A0;
- void setup()
- {
- //Serial.begin(9600);
- pinMode(LED, OUTPUT);
- pinMode(ADIN, INPUT);
- prevdata = analogRead(ADIN); //读取一个初值
- }
- void loop()
- {
- nowdata = analogRead(ADIN); //读取当前的AD值
- //Serial.println(nowdata);
- if (mark == 0 && abs(nowdata - prevdata) > 30) //如果灯没亮或者当前AD值比上次读取的超过30(数字越大,灵敏度越低)就执行“亮灯,置mark=1,记下亮灯时间”
- {
- digitalWrite(LED, HIGH);
- mark = 1;
- lighttime = millis();
- }
- if(mark == 1 && (millis() - lighttime > 1000)) //如果灯亮了,并且过了一秒以上,就执行“灭灯,置mark=0”
- {
- digitalWrite(LED, LOW);
- mark = 0;
- }
- }
复制代码 |
|