Прошивка ардуино не определяется как игровое устройство.
- Войдите на сайт для отправки комментариев
Пнд, 20/09/2021 - 22:50
После прошивки ардуины она должна определятся как игровое устройство, но у меня почему то она определяется просто как устройство которое не настроить как игровое устройство.
Посмотрите и исправьте прошивку если кто может.
#include <Joystick.h> #include "confOptions.h" #define Throttle A0 #define Brake A1 #define Clutch A2 #define Throttle_I2 A5 //second input line (brown wire) #define Brake_I2 A6 //second input line (brown wire) #define Clutch_I2 A8 //second input line (brown wire) #define BrakeResistance A3 #define VibrationMotor 3 Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_MULTI_AXIS, 0, 0, false, false, false, true, false, false, false, true, false, true, false); const int MaxRange = 1023; const int MinRange = 0; const int AxisMax = 1024; int blBrk = 0; int blThr = 0; int blCth = 0; int maxBrk = 0; //max value for Brake int maxThr = 0; //max value for Throttle int maxCth = 0; //max value for Clutch bool aveBrkSet = false; bool aveThrSet = false; bool aveCthSet = false; bool debug = false; bool dbg_PrintThr = false; bool dbg_PrintBrk = false; bool dbg_PrintCTH = false; void setup() { delay(2000); //set a delay for everything to settle debug = Enable_Debug; dbg_PrintThr = Debug_Thr; dbg_PrintBrk = Debug_Brk; dbg_PrintCTH = Debug_Cth; //setting ranges Joystick.setRxAxisRange(MinRange, MaxRange); Joystick.setThrottleRange(MinRange, MaxRange); Joystick.setBrakeRange(MinRange, MaxRange); Joystick.begin(true); // Setting Pin Modes pinMode(Throttle, INPUT); //Throttle pinMode(Brake, INPUT); //Brake pinMode(Clutch, INPUT); //Clutch //Setting optional pins states if (use_Dual_Thr) pinMode(Throttle_I2, INPUT); //Throttle input 2 if (use_Dual_Cl) pinMode(Clutch_I2, INPUT); //Clutch input 2 if (use_Dual_Brk) pinMode(Brake_I2, INPUT); //Brake input 2 pinMode(BrakeResistance, INPUT); //BrakeResistance; pinMode(VibrationMotor, OUTPUT); // Vibration Motor Control this is paired with a transistor to control the motor pinMode(13, OUTPUT); // LED output digitalWrite(VibrationMotor, HIGH); // set the pin as High, Low will result in the motor spinning // get the baseline registering values blBrk = get_baseline(Brake, 25); blThr = get_baseline(Throttle, 25); blCth = get_baseline(Clutch, 25); } void loop() { //reading the relevant values from the pedals int valThr = 0; int valBrk = 0; int valCth = 0; if (use_Dual_Thr) valThr = abs((analogRead(Throttle)+analogRead(Throttle_I2))/2); else valThr = analogRead(Throttle); if (use_Dual_Cl) valCth = abs((analogRead(Clutch)+analogRead(Clutch_I2))/2); else valCth = analogRead(Clutch); if (use_Dual_Brk) valBrk = abs((analogRead(Brake)+analogRead(Brake_I2))/2); else valBrk = analogRead(Brake); /* Original read statements int valThr = analogRead(Throttle); int valBrk = analogRead(Brake); int valCth = analogRead(Clutch); */ int valRestBrk = analogRead(BrakeResistance); double pers = get_Persentage(BrakeResistance); //get the resistance persentage to apply against the brake pedal which then halved //All values below are normalised and converted to absolute to ensure a positive value int actCthVal = abs(valCth - blCth);//normalised clutch value int actThrVal = abs(valThr - blThr);//normalised Throttle value int actBrkVal = abs(valBrk - blBrk);//normalised brake value int PersBrkVal = int(((valBrk - blBrk) * pers)) ; //normalised brake value with the resistance added // set/update the max value based on pedal progressions if (maxCth < actCthVal) maxCth = actCthVal; if (maxThr < actThrVal) maxThr = actThrVal; if (maxBrk < actBrkVal) maxBrk = actBrkVal; if (debug) { if(dbg_PrintThr){ String values = "Throttle - Baseline: " + String(blThr) + ", Actual Value: " + String(valThr) + ", Normalised Value: " + String(actThrVal) + ", max value: " + String(maxThr); Serial.println(values); delay(100);} if(dbg_PrintBrk){ String values = "Brakes - Baseline: " + String(blBrk) + ", Actual Value: " + String(valBrk) + ", Normalised Value: " + String(actBrkVal) + ", Normalised With Resistance:" + String(PersBrkVal) + ", Pers:" + String(pers) + ", Resistance: " + String(valRestBrk) + ", max value: " + String(maxBrk); Serial.println(values); delay(100);} if(dbg_PrintCTH){ String values = "Clutch - Baseline: " + String(blCth) + ", Actual Value: " + String(valCth) + ", Normalised Value: " + String(actCthVal) + ", Max Value: " + String(maxCth); Serial.println(values); delay(100);} Serial.println("");//create an empty line } if (actBrkVal > (maxBrk * 0.80)) digitalWrite(VibrationMotor, LOW); //enable the motor to spin when the pedal reaches 80% of the pedal pressure else digitalWrite(VibrationMotor, HIGH); //stop the motor when it falls below 80% //Limit upperbound Noise if (actCthVal > (maxCth - clutch_U_DZ) ) {actCthVal = (maxCth - clutch_U_DZ);} if (actThrVal > (maxThr - throttle_U_DZ)) {actThrVal = (maxThr - throttle_U_DZ);} if (PersBrkVal > (maxBrk - brake_U_DZ) ) {PersBrkVal = (maxBrk - brake_U_DZ);} //set the values applying base deadzone if (valCth >0) { if (actCthVal > clutch_L_DZ) Joystick.setRxAxis(actCthVal); else Joystick.setRxAxis(0); } if (valThr >0) { if (actThrVal > throttle_L_DZ) Joystick.setThrottle(actThrVal); else Joystick.setThrottle(0); } if (valBrk >0) { if (actBrkVal > brake_L_DZ) Joystick.setBrake(PersBrkVal); else Joystick.setBrake(0); } } int get_baseline(int pin, int count) { //get the pedal baseline int maxVal = 0; int newVal = 0; for (int i = 0; i < count; i++) { newVal = analogRead(pin); if (maxVal < newVal) maxVal = newVal; } return maxVal; } double get_Persentage(int pinToRead) { return (1 - (double(analogRead(pinToRead)) / AxisMax)); //1024 is the maximum }
Второй компонент кода
/* Joystick.h Copyright (c) 2015-2017, Matthew Heironimus This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef JOYSTICK_h #define JOYSTICK_h #include <DynamicHID/DynamicHID.h> #if ARDUINO < 10606 #error The Joystick library requires Arduino IDE 1.6.6 or greater. Please update your IDE. #endif // ARDUINO < 10606 #if ARDUINO > 10606 #if !defined(USBCON) #error The Joystick library can only be used with a USB MCU (e.g. Arduino Leonardo, Arduino Micro, etc.). #endif // !defined(USBCON) #endif // ARDUINO > 10606 #if !defined(_USING_DYNAMIC_HID) #warning "Using legacy HID core (non pluggable)" #else // !defined(_USING_DYNAMIC_HID) //================================================================================ // Joystick (Gamepad) #define JOYSTICK_DEFAULT_REPORT_ID 0x03 #define JOYSTICK_DEFAULT_BUTTON_COUNT 32 #define JOYSTICK_DEFAULT_AXIS_MINIMUM 0 #define JOYSTICK_DEFAULT_AXIS_MAXIMUM 1023 #define JOYSTICK_DEFAULT_SIMULATOR_MINIMUM 0 #define JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM 1023 #define JOYSTICK_DEFAULT_HATSWITCH_COUNT 2 #define JOYSTICK_HATSWITCH_COUNT_MAXIMUM 2 #define JOYSTICK_HATSWITCH_RELEASE -1 #define JOYSTICK_TYPE_JOYSTICK 0x04 #define JOYSTICK_TYPE_GAMEPAD 0x05 #define JOYSTICK_TYPE_MULTI_AXIS 0x08 class Joystick_ { private: // Joystick State int16_t _xAxis; int16_t _yAxis; int16_t _zAxis; int16_t _xAxisRotation; int16_t _yAxisRotation; int16_t _zAxisRotation; int16_t _throttle; int16_t _rudder; int16_t _accelerator; int16_t _brake; int16_t _steering; int16_t _hatSwitchValues[JOYSTICK_HATSWITCH_COUNT_MAXIMUM]; uint8_t *_buttonValues = NULL; // Joystick Settings bool _autoSendState; uint8_t _buttonCount; uint8_t _buttonValuesArraySize = 0; uint8_t _hatSwitchCount; uint8_t _includeAxisFlags; uint8_t _includeSimulatorFlags; int16_t _xAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _xAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _yAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _yAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _zAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _zAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _rxAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _rxAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _ryAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _ryAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _rzAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM; int16_t _rzAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM; int16_t _rudderMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM; int16_t _rudderMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM; int16_t _throttleMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM; int16_t _throttleMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM; int16_t _acceleratorMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM; int16_t _acceleratorMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM; int16_t _brakeMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM; int16_t _brakeMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM; int16_t _steeringMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM; int16_t _steeringMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM; uint8_t _hidReportId; uint8_t _hidReportSize; protected: int buildAndSet16BitValue(bool includeValue, int16_t value, int16_t valueMinimum, int16_t valueMaximum, int16_t actualMinimum, int16_t actualMaximum, uint8_t dataLocation[]); int buildAndSetAxisValue(bool includeAxis, int16_t axisValue, int16_t axisMinimum, int16_t axisMaximum, uint8_t dataLocation[]); int buildAndSetSimulationValue(bool includeValue, int16_t value, int16_t valueMinimum, int16_t valueMaximum, uint8_t dataLocation[]); public: Joystick_( uint8_t hidReportId = JOYSTICK_DEFAULT_REPORT_ID, uint8_t joystickType = JOYSTICK_TYPE_JOYSTICK, uint8_t buttonCount = JOYSTICK_DEFAULT_BUTTON_COUNT, uint8_t hatSwitchCount = JOYSTICK_DEFAULT_HATSWITCH_COUNT, bool includeXAxis = true, bool includeYAxis = true, bool includeZAxis = true, bool includeRxAxis = true, bool includeRyAxis = true, bool includeRzAxis = true, bool includeRudder = true, bool includeThrottle = true, bool includeAccelerator = true, bool includeBrake = true, bool includeSteering = true); void begin(bool initAutoSendState = true); void end(); // Set Range Functions inline void setXAxisRange(int16_t minimum, int16_t maximum) { _xAxisMinimum = minimum; _xAxisMaximum = maximum; } inline void setYAxisRange(int16_t minimum, int16_t maximum) { _yAxisMinimum = minimum; _yAxisMaximum = maximum; } inline void setZAxisRange(int16_t minimum, int16_t maximum) { _zAxisMinimum = minimum; _zAxisMaximum = maximum; } inline void setRxAxisRange(int16_t minimum, int16_t maximum) { _rxAxisMinimum = minimum; _rxAxisMaximum = maximum; } inline void setRyAxisRange(int16_t minimum, int16_t maximum) { _ryAxisMinimum = minimum; _ryAxisMaximum = maximum; } inline void setRzAxisRange(int16_t minimum, int16_t maximum) { _rzAxisMinimum = minimum; _rzAxisMaximum = maximum; } inline void setRudderRange(int16_t minimum, int16_t maximum) { _rudderMinimum = minimum; _rudderMaximum = maximum; } inline void setThrottleRange(int16_t minimum, int16_t maximum) { _throttleMinimum = minimum; _throttleMaximum = maximum; } inline void setAcceleratorRange(int16_t minimum, int16_t maximum) { _acceleratorMinimum = minimum; _acceleratorMaximum = maximum; } inline void setBrakeRange(int16_t minimum, int16_t maximum) { _brakeMinimum = minimum; _brakeMaximum = maximum; } inline void setSteeringRange(int16_t minimum, int16_t maximum) { _steeringMinimum = minimum; _steeringMaximum = maximum; } // Set Axis Values void setXAxis(int16_t value); void setYAxis(int16_t value); void setZAxis(int16_t value); void setRxAxis(int16_t value); void setRyAxis(int16_t value); void setRzAxis(int16_t value); // Set Simuation Values void setRudder(int16_t value); void setThrottle(int16_t value); void setAccelerator(int16_t value); void setBrake(int16_t value); void setSteering(int16_t value); void setButton(uint8_t button, uint8_t value); void pressButton(uint8_t button); void releaseButton(uint8_t button); void setHatSwitch(int8_t hatSwitch, int16_t value); void sendState(); }; #endif // !defined(_USING_DYNAMIC_HID) #endif // JOYSTICK_h
Третий код
//confOptions.h //debug options #define Enable_Debug false #define Debug_Thr true #define Debug_Cth false #define Debug_Brk false // Input Precision #define use_Dual_Thr false #define use_Dual_Cl false #define use_Dual_Brk false // initial Deadzone #define brake_L_DZ 5 #define throttle_L_DZ 5 #define clutch_L_DZ 5 // maximum Deadzone #define brake_U_DZ 5 #define throttle_U_DZ 5 #define clutch_U_DZ 5
Вот ссылка на оригинал прошивки GitHub - jssting/ArduinoTec-Pedals: Arduino Leonardo project to mod Fanatec CSP V1 Pedals to replace the fanatec controller board
Issues по Вашей ссылке смотрели? Не Ваш случай?