LZ,仔细一看电路还真有问题,IO 你用的3和4,不是4和5啊,按键电路一般要加上上拉电阻,用4.7kΩ,点亮按键没有按下时IO口是高电平,当按下点亮按键时IO口是低电平,这时单片机读回来的电平是低电平,点亮LED;熄灭按键也是一样,要用上拉电阻才可靠。回去我画个图和程序给你。
该用户从未签到
电路没问题,程序没有进行抖动处理,LZ应该很少写程序
小白一个。。。。入门都没入,大神指点一下,可以吧
求,大神
// Handle the Button 抖动
// bytsaiwn@ydu.edu.tw 育达科大 多媒体与游戏系; 苗栗; 台湾
int btA = 3; // 5 ? 压下开灯 pin 3 ? pin 5 ? change it by yourself; 0.168 second should be enough
int btB = 4; // 压下熄灭灯
int led = 13;
int bounce = 168; // bounce time for 抖动判断; you can change it to test it
void setup( ) {
pinMode (btA,INPUT_PULLUP);
pinMode (btB,INPUT_PULLUP);
pinMode (led,OUTPUT);
}
int aStat = HIGH; //没按下是 HIGH (因INPUT_PULLUP)
int bStat = HIGH;
void loop( ) {
if( clickA( ) ) digitalWrite(led,HIGH);
if( clickB( ) ) digitalWrite(led, LOW);
} // loop(
long lastHitAA = 0;
long lastHitBB = 0;
bool clickCheck(int btn, int& status, long& lastTime); // declare
bool clickA( ) {
return clickCheck(btA, aStat, lastHitAA);
}
bool clickB( ) {
return clickCheck(btB, bStat, lastHitBB);
}
bool clickCheck(int bt, int& xxStat, long& lastHit) {
int a = digitalRead(bt);
if(a == xxStat) return false; // no change
long m = millis( );
if(a == LOW) { // 压下 !
if(m - lastHit