——
#DonLucElectronics #DonLuc #RadioFrequency #Bluetooth #JoystickTest #Gamepad #ESP32 #Arduino #Project #Fritzing #Programming #Electronics #Microcontrollers #Consultant
——
——
——
——
Joystick Test Application
While experimenting with making my own controllers recently, I needed a nice visual way of testing them in Windows. As you can see it’s pretty simple and just shows a visual representation of each axis, POV and button. Currently it supports Joysticks with 8 axes, 4 POV and up to 128 buttons. I haven’t had a chance to test it with over 32 buttons so I would be interested to here from anyone who has such a device. It should work on XP upwards but I have only tested it on Windows 10 64 bit. You just need Net framework 3 and DirectX 9 to run it.
DL2304Mk01
1 x SparkFun Thing Plus – ESP32 WROOM
1 x SparkFun Joystick Shield Kit
1 x Thumb Joystick
1 x SparkFun Thumb Joystick Breakout
1 x Terminal Block Breakout FeatherWing
1 x Lithium Ion Battery – 1 Ah
1 x SparkFun Cerberus USB Cable
SparkFun Thing Plus – ESP32 WROOM
LJH – Analog A3
LJV – Analog A2
LJS – Digital 12
RJH – Analog A1
RJV – Analog A0
RJS – Digital 21
LD1 – Digital 16
LD2 – Digital 18
LD3 – Digital 19
LD4 – Digital 17
LT – Digital 5
LED – LED_BUILTIN
VIN – +3.3V
GND – GND
——
DL2304Mk01p.ino
/* ***** Don Luc Electronics © *****
Software Version Information
Project #26 - Radio Frequency - Joystick Test Application - Mk13
26-13
DL2304Mk01p.ino
1 x SparkFun Thing Plus - ESP32 WROOM
1 x SparkFun Joystick Shield Kit
1 x Thumb Joystick
1 x SparkFun Thumb Joystick Breakout
1 x Terminal Block Breakout FeatherWing
1 x Lithium Ion Battery - 1 Ah
1 x SparkFun Cerberus USB Cable
*/
// Include the Library Code
// Arduino
#include <Arduino.h>
// ESP32 BLE Gamepad
#include <BleGamepad.h>
// ESP32 BLE Gamepad
BleGamepad bleGamepad;
// Left Joystick
#define LJH A3
#define LJV A2
#define LJS 12
// Right Joystick
#define RJH A1
#define RJV A0
#define RJS 21
// D-pad
#define LD1 16
#define LD2 18
#define LD3 19
#define LD4 17
// LT
#define LT 5
// Previous Button State
int previousButton1State = HIGH;
int previousButton2State = HIGH;
int previousButton3State = HIGH;
int previousButton4State = HIGH;
int previousButton5State = HIGH;
int previousButton6State = HIGH;
int previousButton7State = HIGH;
// Number of pot samples to take (to smooth the values)
const int numberOfPotSamples = 5;
// Delay in milliseconds between pot samples
const int delayBetweenSamples = 2;
// Additional delay in milliseconds between HID reports
const int delayBetweenHIDReports = 5;
// Delay in milliseconds between button press
const int debounceDelay = 10;
// Software Version Information
String sver = "26-13";
void loop() {
// Bluetooth Serial (ESP32SPP)
isBluetooth();
}
getBluetooth.ino
// Bluetooth
// isBluetooth
void isBluetooth() {
// ESP32 BLE Gamepad
if(bleGamepad.isConnected())
{
// Button
isButton();
// Joystick
isThumbJoystick();
}
}
getGames.ino
// Games
// Set Inputs
void setInputs() {
// Make the button line an input
pinMode(LJS, INPUT_PULLUP);
pinMode(RJS, INPUT_PULLUP);
pinMode(LD1, INPUT_PULLUP);
pinMode(LD2, INPUT_PULLUP);
pinMode(LD3, INPUT_PULLUP);
pinMode(LD4, INPUT_PULLUP);
pinMode(LT, INPUT_PULLUP);
// Initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
// Turn the LED on HIGH
digitalWrite(LED_BUILTIN, HIGH);
}
// Button
void isButton(){
// Button1 State LD1
int currentButton1State = digitalRead(LD1);
if (currentButton1State != previousButton1State)
{
if (currentButton1State == LOW)
{
bleGamepad.press(BUTTON_1);
}
else
{
bleGamepad.release(BUTTON_1);
}
}
previousButton1State = currentButton1State;
// Button2 State LD2
int currentButton2State = digitalRead(LD2);
if (currentButton2State != previousButton2State)
{
if (currentButton2State == LOW)
{
bleGamepad.press(BUTTON_2);
}
else
{
bleGamepad.release(BUTTON_2);
}
}
previousButton2State = currentButton2State;
// Button3 State LD3
int currentButton3State = digitalRead(LD3);
if (currentButton3State != previousButton3State)
{
if (currentButton3State == LOW)
{
bleGamepad.press(BUTTON_3);
}
else
{
bleGamepad.release(BUTTON_3);
}
}
previousButton3State = currentButton3State;
// Button4 State LD4
int currentButton4State = digitalRead(LD4);
if (currentButton4State != previousButton4State)
{
if (currentButton4State == LOW)
{
bleGamepad.press(BUTTON_4);
}
else
{
bleGamepad.release(BUTTON_4);
}
}
previousButton4State = currentButton4State;
// Button5 State LJS
int currentButton5State = digitalRead(LJS);
if (currentButton5State != previousButton5State)
{
if (currentButton5State == LOW)
{
bleGamepad.press(BUTTON_5);
}
else
{
bleGamepad.release(BUTTON_5);
}
}
previousButton5State = currentButton5State;
// Button6 State RJS
int currentButton6State = digitalRead(RJS);
if (currentButton6State != previousButton6State)
{
if (currentButton6State == LOW)
{
bleGamepad.press(BUTTON_6);
}
else
{
bleGamepad.release(BUTTON_6);
}
}
previousButton6State = currentButton6State;
// Button7 State LT
int currentButton7State = digitalRead(LT);
if (currentButton7State != previousButton7State)
{
if (currentButton7State == LOW)
{
bleGamepad.press(BUTTON_7);
}
else
{
bleGamepad.release(BUTTON_7);
}
}
previousButton7State = currentButton7State;
}
getThumbJoystick.ino
// Thumb Joystick
void isThumbJoystick() {
// Joystick LJH
// Joystick Pot Values LJH
int potValues[numberOfPotSamples];
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValues[i] = analogRead(LJH);
delay(delayBetweenSamples);
}
int potValue = 0;
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValue += potValues[i];
}
// Value / Pot Samples
potValue = potValue / numberOfPotSamples;
// Adjusted Value
int adjustedValue = map(potValue, 0, 4095, 32737, 0);
// Joystick LJV
// Joystick Pot Values LJV
int potValues2[numberOfPotSamples];
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValues2[i] = analogRead(LJV);
delay(delayBetweenSamples);
}
int potValue2 = 0;
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValue2 += potValues2[i];
}
// Value2 / Pot Samples
potValue2 = potValue2 / numberOfPotSamples;
// Adjusted Value2
int adjustedValue2 = map(potValue2, 0, 4095, 32737, 0);
// Joystick RJH
// Joystick Pot Values RJH
int potValues3[numberOfPotSamples];
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValues3[i] = analogRead(RJH);
delay(delayBetweenSamples);
}
int potValue3 = 0;
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValue3 += potValues3[i];
}
// Value3 / Pot Samples
potValue3 = potValue3 / numberOfPotSamples;
// Adjusted Value3
int adjustedValue3 = map(potValue3, 0, 4095, 32737, 0);
// Joystick RJV
// Joystick Pot Values RJV
int potValues4[numberOfPotSamples];
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValues4[i] = analogRead(RJV);
delay(delayBetweenSamples);
}
int potValue4 = 0;
for (int i = 0 ; i < numberOfPotSamples ; i++) {
potValue4 += potValues4[i];
}
// Value4 / Pot Samples
potValue4 = potValue4 / numberOfPotSamples;
// Adjusted Value4
int adjustedValue4 = map(potValue4, 0, 4095, 32737, 0);
bleGamepad.setAxes(adjustedValue, adjustedValue2, 0, 0, adjustedValue3, adjustedValue4, DPAD_CENTERED);
delay(delayBetweenHIDReports);
// D-pad
// LD1
if (digitalRead(LD1) == LOW){
bleGamepad.setAxes(adjustedValue, adjustedValue2, 0, 0, adjustedValue3, adjustedValue4, DPAD_UP);
}
// LD2
if (digitalRead(LD2) == LOW){
bleGamepad.setAxes(adjustedValue, adjustedValue2, 0, 0, adjustedValue3, adjustedValue4, DPAD_LEFT);
}
// LD3
if (digitalRead(LD3) == LOW){
bleGamepad.setAxes(adjustedValue, adjustedValue2, 0, 0, adjustedValue3, adjustedValue4, DPAD_DOWN);
}
// LD4
if (digitalRead(LD4) == LOW){
bleGamepad.setAxes(adjustedValue, adjustedValue2, 0, 0, adjustedValue3, adjustedValue4, DPAD_RIGHT);
}
}
setup.ino
// Setup
void setup()
{
// Set Inputs
setInputs();
// ESP32 BLE Gamepad
bleGamepad.begin();
}
——
People can contact us: https://www.donluc.com/?page_id=1927
Technology Experience
- Programming Language
- Single-Board Microcontrollers (PIC, Arduino, Raspberry Pi,Espressif, etc…)
- IoT
- Wireless (Radio Frequency, Bluetooth, WiFi, Etc…)
- Robotics
- Camera and Video Capture Receiver Stationary, Wheel/Tank and Underwater Vehicle
- Unmanned Vehicles Terrestrial and Marine
- Machine Learning
- RTOS
- Research & Development (R & D)
Instructor, E-Mentor, STEAM, and Arts-Based Training
- Programming Language
- IoT
- PIC Microcontrollers
- Arduino
- Raspberry Pi
- Espressif
- Robotics
Follow Us
Luc Paquin – Curriculum Vitae – 2023
https://www.donluc.com/luc/
Web: https://www.donluc.com/
Facebook: https://www.facebook.com/neosteam.labs.9/
YouTube: https://www.youtube.com/@thesass2063
Twitter: https://twitter.com/labs_steam
Pinterest: https://www.pinterest.com/NeoSteamLabs/
Instagram: https://www.instagram.com/neosteamlabs/
Don Luc


