From 54accc8283ed4d564a4ff355f34189a18df4f7df Mon Sep 17 00:00:00 2001 From: VirtuallyAverage Date: Tue, 20 Aug 2024 20:08:58 -0500 Subject: [PATCH] Firmware V1.0 --- VRC-Haptics-Firmware-ESP/include/variables.h | 3 -- .../lib/PWM/PCA/library.json | 13 ------- .../lib/wifi/OSC/library.json | 13 ------- VRC-Haptics-Firmware-ESP/platformio.ini | 5 +++ .../{lib/wifi => src}/OSC/callbacks.cpp | 8 ++-- VRC-Haptics-Firmware-ESP/src/OSC/callbacks.h | 5 +++ .../{lib/wifi => src}/OSC/osc.cpp | 10 +++-- .../{lib/wifi => src}/OSC/osc.h | 1 + .../{lib => src}/PWM/PCA/pca.cpp | 38 ++++++++++++++----- .../{lib => src}/PWM/PCA/pca.h | 1 + .../{lib => src}/PWM/pwmConfig.h | 0 VRC-Haptics-Firmware-ESP/src/globals.h | 11 ++++++ VRC-Haptics-Firmware-ESP/src/main.cpp | 8 +++- 13 files changed, 68 insertions(+), 48 deletions(-) delete mode 100644 VRC-Haptics-Firmware-ESP/include/variables.h delete mode 100644 VRC-Haptics-Firmware-ESP/lib/PWM/PCA/library.json delete mode 100644 VRC-Haptics-Firmware-ESP/lib/wifi/OSC/library.json rename VRC-Haptics-Firmware-ESP/{lib/wifi => src}/OSC/callbacks.cpp (85%) create mode 100644 VRC-Haptics-Firmware-ESP/src/OSC/callbacks.h rename VRC-Haptics-Firmware-ESP/{lib/wifi => src}/OSC/osc.cpp (89%) rename VRC-Haptics-Firmware-ESP/{lib/wifi => src}/OSC/osc.h (99%) rename VRC-Haptics-Firmware-ESP/{lib => src}/PWM/PCA/pca.cpp (51%) rename VRC-Haptics-Firmware-ESP/{lib => src}/PWM/PCA/pca.h (80%) rename VRC-Haptics-Firmware-ESP/{lib => src}/PWM/pwmConfig.h (100%) create mode 100644 VRC-Haptics-Firmware-ESP/src/globals.h diff --git a/VRC-Haptics-Firmware-ESP/include/variables.h b/VRC-Haptics-Firmware-ESP/include/variables.h deleted file mode 100644 index 77d1c09..0000000 --- a/VRC-Haptics-Firmware-ESP/include/variables.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "Arduino.h" - -static uint16_t motorDuty[32] = {0}; \ No newline at end of file diff --git a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/library.json b/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/library.json deleted file mode 100644 index 4c3f7bd..0000000 --- a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/library.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/schema/library.json", - "frameworks": "arduino", - "name": "PWM.PCA", - "platforms": [ - "espressif8266", - "espressif32" - ], - "dependencies": { - "mbed-bxd/Adafruit_PWMServoDriver": "0.0.0+sha.41a00db32ae7" - - } -} diff --git a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/library.json b/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/library.json deleted file mode 100644 index e1017f0..0000000 --- a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/library.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/schema/library.json", - "frameworks": "arduino", - "name": "osc", - "platforms": [ - "espressif8266", - "espressif32" - ], - "dependencies": { - "hideakitai/ArduinoOSC": "^0.4.2" - - } -} diff --git a/VRC-Haptics-Firmware-ESP/platformio.ini b/VRC-Haptics-Firmware-ESP/platformio.ini index 07c6443..02b6796 100644 --- a/VRC-Haptics-Firmware-ESP/platformio.ini +++ b/VRC-Haptics-Firmware-ESP/platformio.ini @@ -29,7 +29,12 @@ lib_deps = platform = espressif8266 board = d1_mini framework = arduino +monitor_filters = + esp8266_exception_decoder +monitor_speed = 115200 build_flags = -I include lib_deps = ${env.lib_deps} + +upload_speed = 921600 ; Increase upload speed diff --git a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/callbacks.cpp b/VRC-Haptics-Firmware-ESP/src/OSC/callbacks.cpp similarity index 85% rename from VRC-Haptics-Firmware-ESP/lib/wifi/OSC/callbacks.cpp rename to VRC-Haptics-Firmware-ESP/src/OSC/callbacks.cpp index 104bf43..aa2963b 100644 --- a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/callbacks.cpp +++ b/VRC-Haptics-Firmware-ESP/src/OSC/callbacks.cpp @@ -1,14 +1,12 @@ #include #include "config.h" -#include "variables.h" +#include "globals.h" + #include "osc.h" -void motorMessage_callback(const OscMessage&); -void serverPing_callback(const OscMessage&); -void printMessage(const OscMessage& message); -void MotorMessage_Callback(const OscMessage& message){ +void motorMessage_callback(const OscMessage& message){ // create char array String msg_str = message.arg(0); diff --git a/VRC-Haptics-Firmware-ESP/src/OSC/callbacks.h b/VRC-Haptics-Firmware-ESP/src/OSC/callbacks.h new file mode 100644 index 0000000..a0d20a0 --- /dev/null +++ b/VRC-Haptics-Firmware-ESP/src/OSC/callbacks.h @@ -0,0 +1,5 @@ +#include + +void motorMessage_callback(const OscMessage&); +void serverPing_callback(const OscMessage&); +void printMessage(const OscMessage& message); \ No newline at end of file diff --git a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.cpp b/VRC-Haptics-Firmware-ESP/src/OSC/osc.cpp similarity index 89% rename from VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.cpp rename to VRC-Haptics-Firmware-ESP/src/OSC/osc.cpp index 1787fbd..48273bb 100644 --- a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.cpp +++ b/VRC-Haptics-Firmware-ESP/src/OSC/osc.cpp @@ -1,8 +1,9 @@ #include #include "config.h" +#include "globals.h" -#include "callbacks.cpp" +#include "OSC/callbacks.h" const IPAddress ip(OSC_LOCAL_IP); const IPAddress gateway(OSC_GATEWAY_IP); @@ -15,14 +16,17 @@ void startOSCWifi() { Serial.println("WIFI: Connecting"); // Wait for connection - while (WiFi.status() != WL_CONNECTED) {} + while (WiFi.status() != WL_CONNECTED) { + //Serial.println(""); + delay(1); + } // Print the IP address Serial.print("WIFI: IP: "); Serial.println(WiFi.localIP()); // Setup OSC - OscWiFi.subscribe(OSC_IN_PORT, OSC_MOTOR_ADDRESS, MotorMessage_Callback); + OscWiFi.subscribe(OSC_IN_PORT, OSC_MOTOR_ADDRESS, motorMessage_callback); OscWiFi.subscribe(OSC_IN_PORT, "/ping/", serverPing_callback); diff --git a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.h b/VRC-Haptics-Firmware-ESP/src/OSC/osc.h similarity index 99% rename from VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.h rename to VRC-Haptics-Firmware-ESP/src/OSC/osc.h index 9fa6192..a5128f1 100644 --- a/VRC-Haptics-Firmware-ESP/lib/wifi/OSC/osc.h +++ b/VRC-Haptics-Firmware-ESP/src/OSC/osc.h @@ -10,3 +10,4 @@ void sendOSC(const String& oscAddress, const int16_t& value); void sendOSC(const String& oscAddress, const int8_t& value); void sendOSC(const String& oscAddress, const float_t& value); void sendOSC(const String& oscAddress, char *value, uint16_t size); + diff --git a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.cpp b/VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.cpp similarity index 51% rename from VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.cpp rename to VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.cpp index b51bdde..926635a 100644 --- a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.cpp +++ b/VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.cpp @@ -1,20 +1,17 @@ #include #include "config.h" -#include "variables.h" +#include "globals.h" -#include "pwmConfig.h" +#include "PWM/pwmConfig.h" #include "pca.h" #include "Adafruit_PWMServoDriver.h" +#include "Wire.h" -#ifdef PCA_1 -Adafruit_PWMServoDriver pcaModule1 = Adafruit_PWMServoDriver(PCA_1); -#endif +Adafruit_PWMServoDriver pcaModule1 = Adafruit_PWMServoDriver(PCA_1, Wire); +Adafruit_PWMServoDriver pcaModule2 = Adafruit_PWMServoDriver(PCA_2, Wire); -#ifdef PCA_2 -Adafruit_PWMServoDriver pcaModule2 = Adafruit_PWMServoDriver(PCA_2); -#endif uint8_t motorMap[32] = {MOTOR_MAP}; @@ -27,13 +24,36 @@ void startPCA() { //set frequencies pcaModule1.setPWMFreq(PCA_FREQUENCY); pcaModule2.setPWMFreq(PCA_FREQUENCY); + + pcaModule1.begin(); + pcaModule1.setOscillatorFrequency(27000000); + pcaModule1.setPWMFreq(1600); // This is the maximum PWM frequency + + pcaModule2.begin(); + pcaModule2.setOscillatorFrequency(27000000); + pcaModule2.setPWMFreq(1600); // This is the maximum PWM frequency + + Wire.setClock(400000); + + Serial.println(pcaModule1.getOscillatorFrequency()); + Serial.println(pcaModule2.getOscillatorFrequency()); + //chime + setToDuty(4095); + delay(100); + setToDuty(0); } /// @brief Sets all motors to the specified duty cycle, mapped to the MOTOR_MAP defined in config.h /// @param dutyCycle The list of each motors duty cycle void setAllDuty() { + for(uint8_t i = 0; i < 16; i++) { + pcaModule1.setPin(motorMap[i], motorDuty[i]); + pcaModule2.setPin(motorMap[i+16]-16, motorDuty[i+16]);// 3 HOURS JUST TO FIND THE -16..... I WANT TO DIE + } +} +void setToDuty(uint16_t duty) { for(uint8_t i = 0; i < 32; i++) { - setMotorDuty(motorMap[i], motorDuty[i]); + setMotorDuty(motorMap[i], duty); } } diff --git a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.h b/VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.h similarity index 80% rename from VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.h rename to VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.h index 263b3a1..3c99428 100644 --- a/VRC-Haptics-Firmware-ESP/lib/PWM/PCA/pca.h +++ b/VRC-Haptics-Firmware-ESP/src/PWM/PCA/pca.h @@ -2,6 +2,7 @@ void startPCA(); void setMotorDuty(uint8_t motorIndex, uint16_t dutyCycle); void setAllDuty(); +void setToDuty(uint16_t duty); #define PCA_FREQUENCY 1600 \ No newline at end of file diff --git a/VRC-Haptics-Firmware-ESP/lib/PWM/pwmConfig.h b/VRC-Haptics-Firmware-ESP/src/PWM/pwmConfig.h similarity index 100% rename from VRC-Haptics-Firmware-ESP/lib/PWM/pwmConfig.h rename to VRC-Haptics-Firmware-ESP/src/PWM/pwmConfig.h diff --git a/VRC-Haptics-Firmware-ESP/src/globals.h b/VRC-Haptics-Firmware-ESP/src/globals.h new file mode 100644 index 0000000..ba09b81 --- /dev/null +++ b/VRC-Haptics-Firmware-ESP/src/globals.h @@ -0,0 +1,11 @@ +// globals.h +#ifndef GLOBALS_H +#define GLOBALS_H +#include "Arduino.h" + + +//be sure to init in main.cpp + +extern uint16_t motorDuty[32]; + +#endif // GLOBALS_H \ No newline at end of file diff --git a/VRC-Haptics-Firmware-ESP/src/main.cpp b/VRC-Haptics-Firmware-ESP/src/main.cpp index f12405a..87b2a0d 100644 --- a/VRC-Haptics-Firmware-ESP/src/main.cpp +++ b/VRC-Haptics-Firmware-ESP/src/main.cpp @@ -1,17 +1,20 @@ #include //main config files -#include "variables.h" +#include "globals.h" #include "config.h" #include "main.h" //import modules #include "OSC/osc.h" -#include "PCA/pca.h" +#include "PWM/PCA/pca.h" //setup scheduler #include +//init globals here +uint16_t motorDuty[32] = {0}; + Scheduler TaskScheduler; //Task task1(INTERVAL_OSC_TICK, TASK_FOREVER, &oscTick, &TaskScheduler, true); @@ -62,6 +65,7 @@ void loop() { if (millis()-start >= 1000) { Serial.print("LoopRate: "); Serial.println(ticks); + printMotorDuty(); start = millis(); ticks = 0;