mirror of
https://github.com/clockworkpi/Keypad.git
synced 2025-12-12 07:28:53 +01:00
CLOCKWORK Keypad Arduino driver
This commit is contained in:
parent
384702f506
commit
bb7bbf81cb
154
clockworkpi_keypad.ino
Normal file
154
clockworkpi_keypad.ino
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
// CLOCKWORK Keypad Arduino driver
|
||||||
|
// For more information please visit https://forum.clockworkpi.com
|
||||||
|
// HAPPY HACKING
|
||||||
|
|
||||||
|
#include "UsbKeyboard.h"
|
||||||
|
|
||||||
|
#define KEY_ENTER 0x28 // Keyboard Return (ENTER)
|
||||||
|
#define KEY_ESCAPE 0x29 // Keyboard Escape
|
||||||
|
#define KEY_BACKSPACE 0x2A // Keyboard Backspace
|
||||||
|
#define KEY_SPACE 0x2C // Keyboard Space
|
||||||
|
#define KEY_DASH 0x2D // Keyboard - and _
|
||||||
|
#define KEY_EQUAL 0x2E // Keyboard = and +
|
||||||
|
#define KEY_HOME 0x4A // Keyboard Home
|
||||||
|
#define KEY_PAGE_UP 0x4B // Keyboard Page Up
|
||||||
|
#define KEY_END 0x4D // Keyboard End
|
||||||
|
#define KEY_PAGE_DOWN 0x4E // Keyboard Page Down
|
||||||
|
#define KEY_RIGHT_ARROW 0x4F // Keyboard Right Arrow
|
||||||
|
#define KEY_LEFT_ARROW 0x50 // Keyboard Left Arrow
|
||||||
|
#define KEY_DOWN_ARROW 0x51 // Keyboard Down Arrow
|
||||||
|
#define KEY_UP_ARROW 0x52 // Keyboard Up Arrow
|
||||||
|
#define KEY_NUM_DASH 0x56 // Keyboard Num Pad -
|
||||||
|
#define KEY_NUM_PLUS 0x57 // Keyboard Num Pad +
|
||||||
|
|
||||||
|
#define KEY_OFF 1
|
||||||
|
#define KEY_ON 0
|
||||||
|
#define ADC_BOUNDARY 500
|
||||||
|
#define DIGITAL_KEY_NUM 9
|
||||||
|
#define ANALOG_KEY_NUM 6
|
||||||
|
#define KEY_NUM (DIGITAL_KEY_NUM + ANALOG_KEY_NUM)
|
||||||
|
#define SHIFT_KEY_NUM 2
|
||||||
|
#define KEY_NULL 0xff
|
||||||
|
|
||||||
|
#define KEYPAD_UP KEY_UP_ARROW
|
||||||
|
#define KEYPAD_LEFT KEY_LEFT_ARROW
|
||||||
|
#define KEYPAD_DOWN KEY_DOWN_ARROW
|
||||||
|
#define KEYPAD_RIGHT KEY_RIGHT_ARROW
|
||||||
|
#define KEYPAD_Y KEY_I
|
||||||
|
#define KEYPAD_X KEY_U
|
||||||
|
#define KEYPAD_A KEY_J
|
||||||
|
#define KEYPAD_B KEY_K
|
||||||
|
#define KEYPAD_MENU KEY_ESCAPE
|
||||||
|
#define KEYPAD_SELECT KEY_SPACE
|
||||||
|
#define KEYPAD_START KEY_ENTER
|
||||||
|
#define KEYPAD_LIGHT1 KEY_L
|
||||||
|
#define KEYPAD_LIGHT2 KEY_O
|
||||||
|
#define KEYPAD_LIGHT4 KEY_Y
|
||||||
|
#define KEYPAD_LIGHT5 KEY_H
|
||||||
|
|
||||||
|
#define KEYPAD_UP_SHIFT KEY_UP_ARROW
|
||||||
|
#define KEYPAD_LEFT_SHIFT KEY_LEFT_ARROW
|
||||||
|
#define KEYPAD_DOWN_SHIFT KEY_DOWN_ARROW
|
||||||
|
#define KEYPAD_RIGHT_SHIFT KEY_RIGHT_ARROW
|
||||||
|
#define KEYPAD_Y_SHIFT KEY_O
|
||||||
|
#define KEYPAD_X_SHIFT KEY_Y
|
||||||
|
#define KEYPAD_A_SHIFT KEY_H
|
||||||
|
#define KEYPAD_B_SHIFT KEY_L
|
||||||
|
#define KEYPAD_MENU_SHIFT KEY_BACKSPACE
|
||||||
|
#define KEYPAD_SELECT_SHIFT KEY_NUM_DASH
|
||||||
|
#define KEYPAD_START_SHIFT KEY_NUM_PLUS
|
||||||
|
#define KEYPAD_LIGHT1_SHIFT KEY_END
|
||||||
|
#define KEYPAD_LIGHT2_SHIFT KEY_PAGE_DOWN
|
||||||
|
#define KEYPAD_LIGHT4_SHIFT KEY_PAGE_UP
|
||||||
|
#define KEYPAD_LIGHT5_SHIFT KEY_HOME
|
||||||
|
|
||||||
|
const int pins[KEY_NUM] = {3, 6, 7, 8, 9, 10, 11, 12, 13, 0, 2, 3, 4, 6, 7};
|
||||||
|
const int shift_pins[SHIFT_KEY_NUM] = {1, 5};
|
||||||
|
|
||||||
|
const int keys[KEY_NUM] =
|
||||||
|
{
|
||||||
|
KEYPAD_UP, KEYPAD_LEFT, KEYPAD_DOWN, KEYPAD_RIGHT, KEYPAD_Y, KEYPAD_X, KEYPAD_A, KEYPAD_B, KEYPAD_START,
|
||||||
|
KEYPAD_MENU, KEYPAD_SELECT, KEYPAD_LIGHT1, KEYPAD_LIGHT2, KEYPAD_LIGHT4, KEYPAD_LIGHT5
|
||||||
|
};
|
||||||
|
const int shift_keys[KEY_NUM] =
|
||||||
|
{
|
||||||
|
KEYPAD_UP_SHIFT, KEYPAD_LEFT_SHIFT, KEYPAD_DOWN_SHIFT, KEYPAD_RIGHT_SHIFT, KEYPAD_Y_SHIFT, KEYPAD_X_SHIFT, KEYPAD_A_SHIFT, KEYPAD_B_SHIFT, KEYPAD_START_SHIFT,
|
||||||
|
KEYPAD_MENU_SHIFT, KEYPAD_SELECT_SHIFT, KEYPAD_LIGHT1_SHIFT, KEYPAD_LIGHT2_SHIFT, KEYPAD_LIGHT4_SHIFT, KEYPAD_LIGHT5_SHIFT
|
||||||
|
};
|
||||||
|
|
||||||
|
int old_keys[KEY_NUM];
|
||||||
|
|
||||||
|
bool shift_key_pressed()
|
||||||
|
{
|
||||||
|
for(int i = 0; i < SHIFT_KEY_NUM; i++)
|
||||||
|
{
|
||||||
|
if(analogRead(shift_pins[i]) /ADC_BOUNDARY == KEY_ON)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
TIMSK0 &= !(1 << TOIE0);
|
||||||
|
|
||||||
|
for(int i = 0; i < KEY_NUM; i++)
|
||||||
|
{
|
||||||
|
if(i < DIGITAL_KEY_NUM)
|
||||||
|
{
|
||||||
|
pinMode(pins[i], INPUT);
|
||||||
|
}
|
||||||
|
old_keys[i] = KEY_NULL;
|
||||||
|
}
|
||||||
|
Serial.begin(115200);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
int on_off, key;
|
||||||
|
|
||||||
|
UsbKeyboard.update();
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
for(int i = 0; i < KEY_NUM; i++)
|
||||||
|
{
|
||||||
|
if( i < DIGITAL_KEY_NUM)
|
||||||
|
{
|
||||||
|
on_off = digitalRead(pins[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
on_off = analogRead(pins[i])/ADC_BOUNDARY;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(on_off == KEY_OFF)
|
||||||
|
{
|
||||||
|
if(old_keys[i] != KEY_NULL)
|
||||||
|
{
|
||||||
|
UsbKeyboard.release(old_keys[i]);
|
||||||
|
old_keys[i] = KEY_NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(shift_key_pressed())
|
||||||
|
{
|
||||||
|
key = shift_keys[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
key = keys[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(key != old_keys[i])
|
||||||
|
{
|
||||||
|
if(old_keys[i] != KEY_NULL)
|
||||||
|
{
|
||||||
|
UsbKeyboard.release(old_keys[i]);
|
||||||
|
}
|
||||||
|
UsbKeyboard.press(key);
|
||||||
|
old_keys[i] = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user