Is debounce no longer a valid OneWireKeypad member?

Status
Not open for further replies.
Please forgive me for any breach of protocol- this is my first post. My name is Jamie and I've long been an engineering tech working on analog stuff. I thought it was time to join the 21st century so I'm here!

I'm attempting to increase the debounce time on a 3x3 matrix read using the OneWireKeypad library. With the debounce line commented out my code appears to work fine other than the occasional misread key. I'm attempting to fix that by increasing the debounce time. From examples I've seen around the internet it looks like I should be able to increase the debounce time but I've been unable to do so. I keep getting this error- 'class OnewireKeypad<Print, 9u>' has no member named 'SetDebounceTime'.

Since the recent update is the library no longer able to use debounce? Should I hand-write code to average the value for a given time then lock out further changes for X number of milliseconds?

Code enclosed. Thanks all!

Jamie

Code:
#include <BitBool.h>
#include <OnewireKeypad.h>

//7-3-2016 only keypad input so far
//7-15 managed to get LED's to turn on!

char KEYS[]= {
  '1','2','3',
  '4','5','6',
  '7','8','9',
};

OnewireKeypad <Print, 9 > Keypad(Serial, KEYS, 3, 3, A9, 4700, 1000 );

int ledPin1 = 21;
int ledPin2 = 20;
int ledPin3 = 19;
int ledPin4 = 18;
int ledPin5 = 17;
int ledPin6 = 16;
int ledPin7 = 15;
int ledPin8 = 14;


void setup ()
{
//  Keypad.setDebounceTime(250); // debounce time in ms(doesn't work)
  Serial.begin(9600);

  pinMode(ledPin1, OUTPUT);      // sets the digital pin as output
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);  
  pinMode(ledPin4, OUTPUT);  
  pinMode(ledPin5, OUTPUT);  
  pinMode(ledPin6, OUTPUT);  
  pinMode(ledPin7, OUTPUT); 
  pinMode(ledPin8, OUTPUT);
}



void loop()
  {
//   Keypad.SetDebounceTime(250); // Key Debounce time in ms (doesn't work here either)
 int key = Keypad.Getkey();
 delay (10);
 Serial.println(key);
  if(key)  // Check for a valid key.
  {
    switch (key)
    {
      case '1':
        digitalWrite(ledPin1, HIGH);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);     
        break;
      case '2':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, HIGH);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        break;
      case '3':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, HIGH);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        break;
      case '4':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, HIGH);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        break;
      case '5':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, HIGH);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        break;
      case '6':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, HIGH);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        break;
      case '7':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, HIGH);
        digitalWrite(ledPin8, LOW);
        break;
      case '8':
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, HIGH);
        break;
      case '9':
        digitalWrite(ledPin1, HIGH);
        digitalWrite(ledPin2, HIGH);
        digitalWrite(ledPin3, HIGH);
        digitalWrite(ledPin4, HIGH);
        digitalWrite(ledPin5, HIGH);
        digitalWrite(ledPin6, HIGH);
        digitalWrite(ledPin7, HIGH);
        digitalWrite(ledPin8, HIGH);
        break;
      default:
        digitalWrite(ledPin1, LOW);
        digitalWrite(ledPin2, LOW);
        digitalWrite(ledPin3, LOW);
        digitalWrite(ledPin4, LOW);
        digitalWrite(ledPin5, LOW);
        digitalWrite(ledPin6, LOW);
        digitalWrite(ledPin7, LOW);
        digitalWrite(ledPin8, LOW);
        
    }
  }
}
 
Welcome to the forums,

I think your forum choice is fine don't worry about that. I did a little looking and I can't find the OnewireKeypad.h in the standard Arduino 1.6.9 install nor in the T3 Install. I could have missed it but I don't see it, so there's nothing for me to look at to help. It sure looks like you are trying to call a function that does not exist.

Did you update Arduino recently? from what version?

is OneWireKeypad a special library you got somewhere else?

Are you using a Teensy 3.x or Teensy2 ? (I don't have any T2)

Remember the Forum Rule Post all relevant code.

cheers
 
Here's a link to the arduino page: http://playground.arduino.cc/Code/OneWireKeyPad

I've seen a number of examples from around the internet using debounce with this library but maybe that's an older version. I get the impression that it's not a standard arduino library. I had to manually download it and put it into a folder.

I'm using a Teensy 2.0 on a little breadboard with a bunch of pushbutton switches and LED's. The eventual version will also drive a ULN2803 and relays for guitar effect loop and output switching. I suppose I have enough pins that I could use the standard 3x3 matrix input but I thought the onewire idea looked like a fun challenge and it would free pins for added features in the future. I have a few Teensy++ 2.0 but I'd like to save them for a future version of the project with more IO capability.

thanks!

Jamie
 
O.k. to answer your original question, debounce is no longer an option, the library has it commented out. I do not see any reference on how it would have been used.

it looks like adjusting NUM_OF_SAMPLES in the library is how you adjust the code for sensitivity and limiting false returns.

Code:
// 3 samples gives great results, 2 is ok and 1 is fast, but not very reliable
#define NUM_OF_SAMPLES 3

Cheers Kb
 
Status
Not open for further replies.
Back
Top