betlog

keypadResistanceLookupRobotDun4x4AnalogOut.ino

Nov 9th, 2018
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. // BETLOG - 2018-10-18
  2. // mean/average based lookup tables for the RobotDyn 4x4 key 1 analog out pin keypad
  3. #define         PIN_KB_IO           A0
  4. unsigned long   LIMIT_freq        = 20;
  5. unsigned long   LIMIT_keyRepeat   = 1000;
  6. const char KEY_ARRAY[]= {
  7.     '1','2','3','4',
  8.     '5','6','7','8',
  9.     '9','0','A','B',
  10.     'C','D','E','F'
  11. };
  12. int OHMS_ARRAY[]= {
  13.     1023,930,850,790,
  14.     680,640,600,570,
  15.     512,487,465,445,
  16.     410,330,277,238
  17. };
  18. //-----
  19. int             KEY_ARRAY_SIZE  = sizeof(KEY_ARRAY);
  20. int             MID_ARRAY[sizeof(KEY_ARRAY)];
  21. char            keyValueIs = "";
  22. char            keyValueWas = "";
  23. unsigned long   nowWas;
  24. unsigned long   nowIs;
  25. unsigned long   keyPressedTime;
  26. int             messageState = 0;
  27. int analogValue;
  28. int i;
  29. int target;
  30. int upper;
  31. int lower;
  32. //-------------------
  33. void setup(){
  34.     pinMode(PIN_KB_IO, INPUT);
  35.     for(i=0; i<=sizeof(KEY_ARRAY)-1; i++){
  36.         MID_ARRAY[i]=OHMS_ARRAY[i]-( ( OHMS_ARRAY[i]-OHMS_ARRAY[i+1] ) /2);
  37.     }
  38.     nowWas = keyPressedTime  = millis();
  39.     Serial.begin(9600);
  40.     Serial.println("READY");
  41. }
  42. void loop(){
  43.     analogValue = analogRead(PIN_KB_IO);
  44.     if ( analogValue > 200 ){
  45.         nowIs= millis();
  46.         if( nowIs > nowWas + LIMIT_freq ){
  47.             nowWas = nowIs;
  48.             for(i=0; i<KEY_ARRAY_SIZE; i++){
  49.                 target= OHMS_ARRAY[i];
  50.                 lower= MID_ARRAY[i];
  51.                 upper= MID_ARRAY[i-1];
  52.                 if ( i == 0 ){
  53.                     upper=target;
  54.                 } else if ( i == KEY_ARRAY_SIZE ){
  55.                     lower=target;
  56.                 }
  57.                 if ( analogValue >= lower && analogValue <= upper ){
  58.                     keyValueIs = KEY_ARRAY[i];
  59.                     if ( messageState == 0 ){
  60.                         Serial.print(keyValueIs);
  61.                         Serial.print(" :PRESSED.. ");
  62.                         messageState = 1;
  63.                         keyPressedTime = nowIs;
  64.                         }
  65.                     } else if ( messageState == 1 ){
  66.                         if ( nowIs > keyPressedTime + LIMIT_keyRepeat ){
  67.                             Serial.print(" ..HELD.. ");    
  68.                             messageState = 2;
  69.                         }
  70.                     }
  71.                     break;
  72.                 }
  73.             }
  74.         }
  75.     } else if ( messageState != 0 ) {
  76.         Serial.println(" ..RELEASED");                
  77.         keyValueIs = "";
  78.         messageState = 0;
  79.         keyPressedTime = 0;
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment