-
Notifications
You must be signed in to change notification settings - Fork 0
/
keyboard.cpp
65 lines (57 loc) · 1.54 KB
/
keyboard.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <Arduino.h>
// Include Keyboard Header
#include "keyboard.h"
// Include Application Header
#include "application.h"
// Include Timer Library
#include "timer.h"
// Keyboard begin
void Keyboard::begin(void (* keyboard_reset_event), void (* keyboard_time_out_event))
{
// Use external reference for Analog Input
analogReference(EXTERNAL);
// Timer time out ticks
timer.begin(BACKLIGHT_TIMER_TIME_OUT_TICKS);
// Timer reset event
timer.reset_event = keyboard_reset_event;
// Timer time out event
timer.time_out_event = keyboard_time_out_event;
}
// Keyboard scan
unsigned char Keyboard::scan()
{
// Loop until a key is pressed
for (;;)
{
// Analog read keyboard
unsigned int ar = analogRead(KEYBOARD_AIO);
if (ar > KEYBOARD_OFF)
{
ar = analogRead(KEYBOARD_AIO);
if (ar > KEYBOARD_OFF)
{
// Scan keyboard
for (unsigned char i = 0; i < KEYBOARD_NUMBER_BUTTONS; i ++)
{
// Analog read value between button value delta, return button index
if ((ar >= buttons[i] - KEYBOARD_DELTA) && (ar <= buttons[i] + KEYBOARD_DELTA))
{
// Return button id on key up
while (analogRead(KEYBOARD_AIO) > KEYBOARD_OFF);
// Reset timer
timer.reset();
// Return key pressed
if (!timer_timed_out) return i + 1;
else delay(250);
}
}
}
}
else
{
// Increment timer
timer_timed_out = timer.increment();
}
}
}
Keyboard keyboard;