diff --git a/Firmware/OpeNITHM/AirSensor.cpp b/Firmware/OpeNITHM/AirSensor.cpp index a1733e5..19e2bc0 100644 --- a/Firmware/OpeNITHM/AirSensor.cpp +++ b/Firmware/OpeNITHM/AirSensor.cpp @@ -76,18 +76,20 @@ void AirSensor::turnOffLight() { uint16_t AirSensor::getValue(int sensor) { // Turn on light corresponding to read sensor changeLight(sensor); - // Delay required because the read may occur faster than the physical light turning on delayMicroseconds(AIR_LED_DELAY); + int value; + #ifndef IR_SENSOR_ANALOG - return digitalRead(ir_sensor_pins[sensor]); + value = digitalRead(ir_sensor_pins[sensor]); #else - return analogRead(ir_sensor_pins[sensor]); + value = analogRead(ir_sensor_pins[sensor]); #endif // Turn the lights off when we're done reading turnOffLight(); + return value; } AirSensor::AirSensor() { @@ -115,7 +117,7 @@ void AirSensor::analogCalibrate() { // Skip some samples, for some reason the first few readings tend to give wild values that can skew min/max tracking for (int i = 0; i < SKIP_SAMPLES; i++) { - for (int sensor = 0; sensor < 6; sensor++) { + for (int sensor = 5; sensor >= 0; sensor--) { getValue(sensor); touchboard -> scan(); } @@ -123,7 +125,7 @@ void AirSensor::analogCalibrate() { // begin calibration for (int i = 0; i < CALIBRATION_SAMPLES; i++) { - for (int sensor = 0; sensor < 6; sensor++) { + for (int sensor = 5; sensor >= 0; sensor--) { uint16_t value = getValue(sensor); if (value > maxReadings[sensor]) @@ -175,7 +177,7 @@ bool AirSensor::getSensorState(int sensor) { float AirSensor::getHandPosition() { int highestTriggered = -1; - for (int i = 0; i < 6; i++) { + for (int i = 5; i >= 0; i--) { if (getSensorState(i)) { if ((i + 1) > highestTriggered) { highestTriggered = i + 1; @@ -200,7 +202,7 @@ float AirSensor::getHandPosition() { uint8_t AirSensor::getSensorReadings() { uint8_t reading = 0; - for (int i = 0; i < 6; i++) { + for (int i = 5; i >= 0; i--) { reading |= ((int) getSensorState(i) << i); } diff --git a/Firmware/OpeNITHM/AirSensor.h b/Firmware/OpeNITHM/AirSensor.h index e31a5a3..a2b6b9c 100644 --- a/Firmware/OpeNITHM/AirSensor.h +++ b/Firmware/OpeNITHM/AirSensor.h @@ -20,7 +20,7 @@ #include -#define AIR_LED_DELAY 125 +#define AIR_LED_DELAY 130 #define AIR_INPUT_DETECTION 0.90 #define CALIBRATION_SAMPLES 200 #define SKIP_SAMPLES 40 diff --git a/Firmware/OpeNITHM/AutoTouchboard.cpp b/Firmware/OpeNITHM/AutoTouchboard.cpp index c74ddef..25e92a5 100644 --- a/Firmware/OpeNITHM/AutoTouchboard.cpp +++ b/Firmware/OpeNITHM/AutoTouchboard.cpp @@ -1,12 +1,21 @@ #include "AutoTouchboard.h" #if NUM_SENSORS == 32 +#ifndef OPENITHM_FULL_V1_0 static const int sensorMap[] = { 11, 3, 10, 2, 9, 1, 8, 0, 31, 23, 30, 22, 29, 21, 28, 20, 27, 19, 26, 18, 25, 17, 24, 16, 15, 7, 14, 6, 13, 5, 12, 4 -}; +}; +#else + static const int sensorMap[] = { + 7, 4, 5, 6, 2, 1, 3, 0, + 31, 28, 29, 30, 26, 25, 27, 24, + 23, 20, 21, 22, 18, 17, 19, 16, + 15, 12, 13, 14, 10, 9, 11, 8 +}; +#endif #endif void AutoTouchboard::scan() { diff --git a/Firmware/OpeNITHM/Config.h b/Firmware/OpeNITHM/Config.h index 8a0868d..d3f8743 100644 --- a/Firmware/OpeNITHM/Config.h +++ b/Firmware/OpeNITHM/Config.h @@ -11,8 +11,9 @@ // the pinout and configurations for OPENITHM_V1_1 // #define OPENITHM_V1_0 // Version 1.0 (No version number on board) // #define OPENITHM_V1_1 // Version 1.1 (v1.1 on board under logo) -#define OPENITHM_V2_0 // Version 2.0 (v2.0 in upper left of board) +// #define OPENITHM_V2_0 // Version 2.0 (v2.0 in upper left of board) // #define OPENITHM_V2_1 // Version 2.1 (v2.1 in upper left of board) +// #define OPENITHM_FULL_V1_0 // Version 1.0 of the fully integrated board with touch sensors // Uncomment this line if your IR sensors will be used in analog mode // ** OPENITHM_V1_1 AND ABOVE SHOULD ENABLE THIS OPTION ** @@ -71,14 +72,14 @@ #define USB // Spit out errors for board definitions -#if (defined(OPENITHM_V1_0) + defined(OPENITHM_V1_1) + defined(OPENITHM_V2_0) + defined(OPENITHM_V2_1)) == 0 +#if (defined(OPENITHM_V1_0) + defined(OPENITHM_V1_1) + defined(OPENITHM_V2_0) + defined(OPENITHM_V2_1) + defined(OPENITHM_FULL_V1_0)) == 0 #error "Must define ONE Teensy board in Config.h" -#elif (defined(OPENITHM_V1_0) + defined(OPENITHM_V1_1) + defined(OPENITHM_V2_0) + defined(OPENITHM_V2_1)) > 1 +#elif (defined(OPENITHM_V1_0) + defined(OPENITHM_V1_1) + defined(OPENITHM_V2_0) + defined(OPENITHM_V2_1) + defined(OPENITHM_FULL_V1_0)) > 1 #error "Cannot define multiple Teensy boards in Config.h" #endif #endif -#if (defined(OPENITHM_V2_0) || defined(OPENITHM_V2_1)) +#if (defined(OPENITHM_V2_0) || defined(OPENITHM_V2_1) || defined(OPENITHM_FULL_V1_0)) #define NUM_SENSORS 32 #else #define NUM_SENSORS 16 diff --git a/Firmware/OpeNITHM/PinConfig.h b/Firmware/OpeNITHM/PinConfig.h index 8f8db13..74c4bf3 100644 --- a/Firmware/OpeNITHM/PinConfig.h +++ b/Firmware/OpeNITHM/PinConfig.h @@ -20,6 +20,10 @@ #define MUX_0 2 #define MUX_1 3 #define MUX_2 4 +#elif defined(OPENITHM_FULL_V1_0) +#define MUX_0 4 +#define MUX_1 3 +#define MUX_2 2 #endif // Sensor pin settings @@ -31,7 +35,7 @@ #define LED_0 7 #define LED_1 6 #define LED_2 5 -#elif defined(OPENITHM_V2_1) +#elif defined(OPENITHM_V2_1) || defined(OPENITHM_FULL_V1_0) #define LED_0 8 #define LED_1 7 #define LED_2 6 @@ -54,7 +58,7 @@ #define AIR_SENSOR_3_PIN 23 #define AIR_SENSOR_4_PIN 22 #define AIR_SENSOR_5_PIN 21 -#elif defined(OPENITHM_V2_0) || defined(OPENITHM_V2_1) +#elif defined(OPENITHM_V2_0) || defined(OPENITHM_V2_1) || defined(OPENITHM_FULL_V1_0) #define AIR_SENSOR_0_PIN 18 #define AIR_SENSOR_1_PIN 20 #define AIR_SENSOR_2_PIN 22 @@ -81,6 +85,11 @@ #define TOUCH_1 0 #define TOUCH_2 1 #define TOUCH_3 15 +#elif defined(OPENITHM_FULL_V1_0) +#define TOUCH_0 1 +#define TOUCH_1 15 +#define TOUCH_2 16 +#define TOUCH_3 0 #endif // Lighting pin settings @@ -100,7 +109,7 @@ #else #define RGBPIN 11 #endif -#elif defined(OPENITHM_V2_1) +#elif defined(OPENITHM_V2_1) || defined(OPENITHM_FULL_V1_0) #define RGBPIN 5 #endif