Trackball parsing
This commit is contained in:
parent
6be07cff3b
commit
e693bfc1d1
|
@ -1,5 +1,5 @@
|
|||
|
||||
#include <Keyboard.h>
|
||||
#include <Mouse.h>
|
||||
#include <SoftwareSerial.h>
|
||||
|
||||
// Setup ---------------------------------------------
|
||||
|
@ -16,19 +16,28 @@ int SoftSerialTX = 9;
|
|||
#define KEY_F17 0xF4 // 0x6C + 0x88
|
||||
#define KEY_F18 0xF5 // 0x6D + 0x88
|
||||
|
||||
#define key_timeout 100
|
||||
|
||||
enum parse_mode{
|
||||
none,
|
||||
regular_key,
|
||||
special_key,
|
||||
trackball
|
||||
trackball_x,
|
||||
trackball_y,
|
||||
trackball_key
|
||||
};
|
||||
|
||||
// Globals -------------------------------------------
|
||||
|
||||
parse_mode ParseMode;
|
||||
SoftwareSerial KeyboardSerial(SoftSerialRX, SoftSerialTX);
|
||||
unsigned long time_since_last_loop;
|
||||
unsigned long TrackballY;
|
||||
unsigned long TrackballX;
|
||||
bool shift;
|
||||
bool mouse_left;
|
||||
bool mouse_middle;
|
||||
bool mouse_right;
|
||||
unsigned long time_since_last_key;
|
||||
|
||||
// Functions -----------------------------------------
|
||||
|
||||
|
@ -38,13 +47,19 @@ void setup() {
|
|||
pinMode(SoftSerialTX, OUTPUT);
|
||||
Serial.begin(2400);
|
||||
Keyboard.begin();
|
||||
Mouse.begin();
|
||||
ParseMode = parse_mode::none;
|
||||
KeyboardSerial.begin(2400);
|
||||
while (!Serial) {
|
||||
;
|
||||
}
|
||||
time_since_last_loop = millis();
|
||||
TrackballX = 0;
|
||||
TrackballY = 0;
|
||||
shift = false;
|
||||
mouse_left = false;
|
||||
mouse_right = false;
|
||||
mouse_middle = false;
|
||||
time_since_last_key = millis();
|
||||
}
|
||||
|
||||
void parseRegularKey(unsigned long v)
|
||||
|
@ -132,6 +147,59 @@ void parseSpecialKey(unsigned long v)
|
|||
if (v == 101) Keyboard.write(KEY_ESC);
|
||||
}
|
||||
|
||||
void parse_trackball(unsigned long x, unsigned long y)
|
||||
{
|
||||
Mouse.move(x, -y);
|
||||
}
|
||||
|
||||
void parse_trackball_key(unsigned long v)
|
||||
{
|
||||
switch(v)
|
||||
{
|
||||
case 0x40: // T1 key
|
||||
Mouse.press(MOUSE_LEFT);
|
||||
mouse_left = true;
|
||||
//Serial.println("Pressed left mouse");
|
||||
break;
|
||||
case 0x41: // T2 key
|
||||
Mouse.press(MOUSE_MIDDLE);
|
||||
//Serial.println("Pressed middle mouse");
|
||||
mouse_middle = true;
|
||||
break;
|
||||
case 0x42: // T3 key
|
||||
Mouse.press(MOUSE_RIGHT);
|
||||
//Serial.println("Pressed right mouse");
|
||||
mouse_right = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void detect_key_release()
|
||||
{
|
||||
if ((millis() - time_since_last_key) > key_timeout)
|
||||
{
|
||||
Keyboard.releaseAll();
|
||||
if (mouse_right == true)
|
||||
{
|
||||
Mouse.release(MOUSE_RIGHT);
|
||||
mouse_right = false;
|
||||
//Serial.println("Released right mouse");
|
||||
}
|
||||
if (mouse_left == true)
|
||||
{
|
||||
Mouse.release(MOUSE_LEFT);
|
||||
mouse_left = false;
|
||||
//Serial.println("Released left mouse");
|
||||
}
|
||||
if (mouse_middle == true)
|
||||
{
|
||||
Mouse.release(MOUSE_MIDDLE);
|
||||
mouse_middle = false;
|
||||
//Serial.println("Released middle mouse");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
KeyboardSerial.listen();
|
||||
if (KeyboardSerial.available())
|
||||
|
@ -147,6 +215,12 @@ void loop() {
|
|||
ParseMode = parse_mode::special_key;
|
||||
Serial.println("Special key");
|
||||
break;
|
||||
case 0xA2:
|
||||
ParseMode = parse_mode::trackball_x;
|
||||
break;
|
||||
case 0xA4:
|
||||
ParseMode = parse_mode::trackball_key;
|
||||
break;
|
||||
default:
|
||||
if (ParseMode == parse_mode::regular_key)
|
||||
{
|
||||
|
@ -156,14 +230,29 @@ void loop() {
|
|||
{
|
||||
parseSpecialKey(v);
|
||||
}
|
||||
else if (ParseMode == parse_mode::trackball_x)
|
||||
{
|
||||
TrackballX = v;
|
||||
ParseMode = parse_mode::trackball_y;
|
||||
}
|
||||
else if (ParseMode == parse_mode::trackball_y)
|
||||
{
|
||||
TrackballY = v;
|
||||
ParseMode = parse_mode::none;
|
||||
parse_trackball(TrackballX, TrackballY);
|
||||
}
|
||||
else if (ParseMode == parse_mode::trackball_key)
|
||||
{
|
||||
parse_trackball_key(v);
|
||||
}
|
||||
break;
|
||||
}
|
||||
Serial.println(v, BIN);
|
||||
Serial.println(v, DEC);
|
||||
//Serial.println(v, BIN);
|
||||
//Serial.println(v, HEX);
|
||||
time_since_last_key = millis();
|
||||
}
|
||||
else
|
||||
{
|
||||
Keyboard.releaseAll();
|
||||
detect_key_release();
|
||||
}
|
||||
delay(20);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue