Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // BETLOG - 2018-10-18
- // mean/average based lookup tables for the RobotDyn 4x4 key 1 analog out pin keypad
- #define PIN_KB_IO A0
- unsigned long LIMIT_freq = 20;
- unsigned long LIMIT_keyRepeat = 1000;
- const char KEY_ARRAY[]= {
- '1','2','3','4',
- '5','6','7','8',
- '9','0','A','B',
- 'C','D','E','F'
- };
- int OHMS_ARRAY[]= {
- 1023,930,850,790,
- 680,640,600,570,
- 512,487,465,445,
- 410,330,277,238
- };
- //-----
- int KEY_ARRAY_SIZE = sizeof(KEY_ARRAY);
- int MID_ARRAY[sizeof(KEY_ARRAY)];
- char keyValueIs = "";
- char keyValueWas = "";
- unsigned long nowWas;
- unsigned long nowIs;
- unsigned long keyPressedTime;
- int messageState = 0;
- int analogValue;
- int i;
- int target;
- int upper;
- int lower;
- //-------------------
- void setup(){
- pinMode(PIN_KB_IO, INPUT);
- for(i=0; i<=sizeof(KEY_ARRAY)-1; i++){
- MID_ARRAY[i]=OHMS_ARRAY[i]-( ( OHMS_ARRAY[i]-OHMS_ARRAY[i+1] ) /2);
- }
- nowWas = keyPressedTime = millis();
- Serial.begin(9600);
- Serial.println("READY");
- }
- void loop(){
- analogValue = analogRead(PIN_KB_IO);
- if ( analogValue > 200 ){
- nowIs= millis();
- if( nowIs > nowWas + LIMIT_freq ){
- nowWas = nowIs;
- for(i=0; i<KEY_ARRAY_SIZE; i++){
- target= OHMS_ARRAY[i];
- lower= MID_ARRAY[i];
- upper= MID_ARRAY[i-1];
- if ( i == 0 ){
- upper=target;
- } else if ( i == KEY_ARRAY_SIZE ){
- lower=target;
- }
- if ( analogValue >= lower && analogValue <= upper ){
- keyValueIs = KEY_ARRAY[i];
- if ( messageState == 0 ){
- Serial.print(keyValueIs);
- Serial.print(" :PRESSED.. ");
- messageState = 1;
- keyPressedTime = nowIs;
- }
- } else if ( messageState == 1 ){
- if ( nowIs > keyPressedTime + LIMIT_keyRepeat ){
- Serial.print(" ..HELD.. ");
- messageState = 2;
- }
- }
- break;
- }
- }
- }
- } else if ( messageState != 0 ) {
- Serial.println(" ..RELEASED");
- keyValueIs = "";
- messageState = 0;
- keyPressedTime = 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment