From 31d6106845cb9bb5becf0dcb6fa3bf469ff53ec5 Mon Sep 17 00:00:00 2001 From: veroxzik Date: Wed, 11 Dec 2019 20:29:03 -0500 Subject: [PATCH] Reduced IR sensor delay, Minimized NKRO calls, Rewrote NKRO key commands --- Firmware/OpeNITHM/AirSensor.cpp | 5 +- Firmware/OpeNITHM/AirSensor.h | 2 - Firmware/OpeNITHM/OpeNITHM.ino | 5 ++ Firmware/OpeNITHM/Output.h | 1 + Firmware/OpeNITHM/SerialOutput.cpp | 5 ++ Firmware/OpeNITHM/SerialOutput.h | 1 + Firmware/OpeNITHM/USBOutput.cpp | 85 +++++------------------------- Firmware/OpeNITHM/USBOutput.h | 1 + 8 files changed, 29 insertions(+), 76 deletions(-) diff --git a/Firmware/OpeNITHM/AirSensor.cpp b/Firmware/OpeNITHM/AirSensor.cpp index 037d1a5..769e940 100644 --- a/Firmware/OpeNITHM/AirSensor.cpp +++ b/Firmware/OpeNITHM/AirSensor.cpp @@ -93,6 +93,9 @@ int AirSensor::getValue(int sensor, bool light) turnOffLight(); } + // Delay required because the read may occur faster than the physical light turning on + delayMicroseconds(150); + #ifdef IR_SENSOR_MULTIPLEXED // Set multiplexer to corresponding sensor digitalWrite(MUX_A, bitRead(sensor, 0)); @@ -102,14 +105,12 @@ int AirSensor::getValue(int sensor, bool light) #ifdef IR_SENSOR_ANALOG return analogRead(SENSOR_IN); #else - delay(1); return digitalRead(SENSOR_IN); #endif #else #ifdef IR_SENSOR_ANALOG return analogRead(ir_sensor_pins[sensor]); #else - delay(1); return digitalRead(ir_sensor_pins[sensor]); #endif #endif diff --git a/Firmware/OpeNITHM/AirSensor.h b/Firmware/OpeNITHM/AirSensor.h index 36f36e4..bc8efe1 100644 --- a/Firmware/OpeNITHM/AirSensor.h +++ b/Firmware/OpeNITHM/AirSensor.h @@ -12,8 +12,6 @@ #include "PinConfig.h" #include - - class AirSensor { private: diff --git a/Firmware/OpeNITHM/OpeNITHM.ino b/Firmware/OpeNITHM/OpeNITHM.ino index 568c91d..ffe1fc9 100644 --- a/Firmware/OpeNITHM/OpeNITHM.ino +++ b/Firmware/OpeNITHM/OpeNITHM.ino @@ -356,6 +356,11 @@ void loop() { sensorPosition = newPosition; } + // Send update +#if !defined(SERIAL_PLOT) && defined(USB) + output->sendUpdate(); +#endif + //#if defined(SERIAL_PLOT) // Serial.print("\t"); // Serial.println(sensor->getSensorReadings()); diff --git a/Firmware/OpeNITHM/Output.h b/Firmware/OpeNITHM/Output.h index 8dd2dbd..d73e316 100644 --- a/Firmware/OpeNITHM/Output.h +++ b/Firmware/OpeNITHM/Output.h @@ -9,6 +9,7 @@ class Output virtual void sendKeyEvent(int key, bool pressed, bool doublePressed); virtual void sendSensorEvent(float position); virtual void sendSensor(int sensor); + virtual void sendUpdate(); }; #endif diff --git a/Firmware/OpeNITHM/SerialOutput.cpp b/Firmware/OpeNITHM/SerialOutput.cpp index 099fdea..1b1de13 100644 --- a/Firmware/OpeNITHM/SerialOutput.cpp +++ b/Firmware/OpeNITHM/SerialOutput.cpp @@ -32,3 +32,8 @@ void SerialOutput::sendSensorEvent(float position) void SerialOutput::sendSensor(int sensor) { } + +// Implement at a later date +void SerialOutput::sendUpdate() +{ +} diff --git a/Firmware/OpeNITHM/SerialOutput.h b/Firmware/OpeNITHM/SerialOutput.h index e7edc19..d2543a9 100644 --- a/Firmware/OpeNITHM/SerialOutput.h +++ b/Firmware/OpeNITHM/SerialOutput.h @@ -37,6 +37,7 @@ class SerialOutput : public Output void sendKeyEvent(int key, bool pressed, bool doublePressed) override; void sendSensorEvent(float position) override; void sendSensor(int sensor) override; + void sendUpdate() override; }; #endif diff --git a/Firmware/OpeNITHM/USBOutput.cpp b/Firmware/OpeNITHM/USBOutput.cpp index 4d02e1c..fb502c0 100644 --- a/Firmware/OpeNITHM/USBOutput.cpp +++ b/Firmware/OpeNITHM/USBOutput.cpp @@ -3,8 +3,8 @@ #ifdef USB #include "USBOutput.h" -char bottomRow[] = {'a', 'z', 's', 'x', 'd', 'c', 'f', 'v', 'g', 'b', 'h', 'n', 'j', 'm', 'k', ','}; -char topRow[] = {'1', 'q', '2', 'w', '3', 'e', '4', 'r', '5', 't', '6', 'y', '7', 'u', '8', 'i'}; +char bottomRow[] = {KEY_A, KEY_Z, KEY_S, KEY_X, KEY_D, KEY_C, KEY_F, KEY_V, KEY_G, KEY_B, KEY_H, KEY_N, KEY_J, KEY_M, KEY_K, KEY_COMMA}; +char topRow[] = {KEY_1, KEY_Q, KEY_2, KEY_W, KEY_3, KEY_E, KEY_4, KEY_R, KEY_5, KEY_T, KEY_6, KEY_Y, KEY_7, KEY_U, KEY_8, KEY_I}; uint16_t airKeys[] = { KEY_SLASH, KEY_PERIOD, KEY_QUOTE , KEY_SEMICOLON, KEY_RIGHT_BRACE , KEY_LEFT_BRACE }; @@ -86,32 +86,10 @@ void USBOutput::writeKey(uint16_t key) #ifndef TEENSY NKROKeyboard.write(key); #else - switch (key) - { - case KEY_PAGE_UP: - case KEY_PAGE_DOWN: - case KEY_HOME: - case KEY_END: - case KEY_SLASH: - case KEY_PERIOD: - case KEY_QUOTE: - case KEY_SEMICOLON: - case KEY_RIGHT_BRACE: - case KEY_LEFT_BRACE: - // Don't use ASCII method - Nkro.set_key(key); - Nkro.send_nkro_now(); - Nkro.reset_key(key); - Nkro.send_nkro_now(); - break; - default: - // Use NKRO for ASCII - Nkro.set_key_ascii(key); - Nkro.send_nkro_now(); - Nkro.reset_key_ascii(key); - Nkro.send_nkro_now(); - break; - } + Nkro.set_key(key); + Nkro.send_nkro_now(); + Nkro.reset_key(key); + Nkro.send_nkro_now(); #endif } @@ -120,28 +98,7 @@ void USBOutput::pressKey(uint16_t key) #ifndef TEENSY pressKey(key); #else - switch (key) - { - case KEY_PAGE_UP: - case KEY_PAGE_DOWN: - case KEY_HOME: - case KEY_END: - case KEY_SLASH: - case KEY_PERIOD: - case KEY_QUOTE: - case KEY_SEMICOLON: - case KEY_RIGHT_BRACE: - case KEY_LEFT_BRACE: - // Don't use ASCII method - Nkro.set_key(key); - Nkro.send_nkro_now(); - break; - default: - // Use NKRO for ASCII - Nkro.set_key_ascii(key); - Nkro.send_nkro_now(); - break; - } + Nkro.set_key(key); #endif } @@ -150,29 +107,13 @@ void USBOutput::releaseKey(uint16_t key) #ifndef TEENSY NKROKeyboard.release(key); #else - switch (key) - { - case KEY_PAGE_UP: - case KEY_PAGE_DOWN: - case KEY_HOME: - case KEY_END: - case KEY_SLASH: - case KEY_PERIOD: - case KEY_QUOTE: - case KEY_SEMICOLON: - case KEY_RIGHT_BRACE: - case KEY_LEFT_BRACE: - // Don't use ASCII method - Nkro.reset_key(key); - Nkro.send_nkro_now(); - break; - default: - // Use NKRO for ASCII - Nkro.reset_key_ascii(key); - Nkro.send_nkro_now(); - break; - } + Nkro.reset_key(key); #endif } +void USBOutput::sendUpdate() +{ + Nkro.send_nkro_now(); +} + #endif diff --git a/Firmware/OpeNITHM/USBOutput.h b/Firmware/OpeNITHM/USBOutput.h index a396f63..e30a760 100644 --- a/Firmware/OpeNITHM/USBOutput.h +++ b/Firmware/OpeNITHM/USBOutput.h @@ -28,6 +28,7 @@ class USBOutput : public Output void sendKeyEvent(int key, bool pressed, bool doublePressed) override; void sendSensorEvent(float position) override; void sendSensor(int sensor) override; + void sendUpdate() override; USBOutput(); };