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);
}