https://www.servocity.com/structure/
不仅是技术上的融合,更应该有有意思的东西和技术上的结合。
int lastGoodPot;
void setup(){
Serial.begin(9600);
}
void loop(){
int pot = analogRead(A0);
if(abs(pot-lastGoodPot) >300){
lastGoodPot = pot;
}
Serial.println(lastGoodPot);
delay(400);
}
//- 抗抖动/过滤
电位器在旋转或者接触不良时,`analogRead()` 得到的数值可能会快速跳动。
代码通过 `if(abs(pot - lastGoodPot) > 300)` 设置了一个 **阈值 (300)**:
- 只有当新读数和上次保存的数值差别特别大(大于 300)时,才会认为这是一个“有效的新值”,并更新 `lastGoodPot`。
- 如果只是小幅度变化(比如噪声、抖动),就忽略掉。
- **输出稳定的值**
`Serial.println(lastGoodPot);` 打印的不是瞬时值,而是过滤后的稳定值。
这意味着串口里你看到的数值不会一直乱跳,而是只在电位器明显转动时才会更新。
- **采样间隔**
`delay(400);` 控制了每次输出的间隔,避免刷屏。
int lastGoodPot;
void setup(){
Serial.begin(9600);
pinMode(3,OUTPUT);
}
void loop(){
int pot = analogRead(A0);
if(abs(pot-lastGoodPot) >300){
lastGoodPot = pot;
}
Serial.println(lastGoodPot);
digitalWrite(3,HIGH);
delayMicroseconds(lastGoodPot);
digitalWrite(3,LOW);
delayMicroseconds(lastGoodPot);
}