повесить debouncer на расширитель ввода\вывода

MXPain
Offline
Зарегистрирован: 13.06.2014

Друзья, подкиньте плиз идейку как можно реализовать следующую штуку:

Цепляю по i2c кнопочки при помощи расширителя pcf8574 например так

Wire.requestFrom(32,1); 
    
    if(Wire.available() /*&& !test*/)     //If the request is available
    {
        x = Wire.read();    

    }
    if(x<=255)                     
    {
        if (x==224) { Serial.print("1 \t"); }; //P0
        if (x==208) { Serial.print("2 \t"); }; //P1
        if (x==200) { Serial.print("3 \t"); }; //P2
        if (x==196) { Serial.print("4 \t"); }; //P3
        if (x==194) { Serial.print("5 \t"); }; //P4
        if (x==193) { Serial.print("6 \t"); }; //P5
        if (x==128) { Serial.print("7 \t"); }; //P6
        if (x==64) { Serial.print("8 \t"); }; //P7

    }

Но мне хочется заюзать например debouncer из http://playground.arduino.cc/code/bounce который использует для инициализации отдельные пины, подскажите пожайста возможеварианты решений если они конечно имеются, заранее спасибо.

 

MXPain
Offline
Зарегистрирован: 13.06.2014

Возможные варианты решений" 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

MXPain, вариантов антидребезговых решений много . Самое простое -опрашивайте адрес не часто, скажем раз в 30мс. Лучше в прерывании какого-нибудь таймера.  При удачном опросе if(x!=0) cледующий опрос отложить на 300мс.

MXPain
Offline
Зарегистрирован: 13.06.2014

Спасибо, все оказалось очень просто

if (x==64 && (millis()-b2PressTime>debounceTime)) { 
          b2PressTime=millis();
          Serial.print("8 \t"); 
       }