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