So, I wrote a bit of code to control brushed DC motors from a Logitech USB Gamepad -> Custom VC++ Software -> Custom Arduino Software -> Motor Driver -> Brushed DC motor. This is mostly just temporary code to test things. Ultimately there will be three modes of operation: remote via RC transmitter, remote via PC, and autonomous. Depending on how I decide to control this thing, the RC transmitter/receiver will be pretty much plug-n-play. Autonomous control will come much later. This is something I’ve done before and know how much work goes into it. Remote via PC is fairly straight-forward, as I mentioned.
Here’s my code, including the Arduino sketch and the code for VC++:
The DCMotor class talks with the Arduino via the USB using RS232 communications. I had to make my own protocol for passing commands to the Arduino to control the motors. Right now each message is composed of the following:
<STX> <Forward> <Speed[7-0]> <Speed[15-8]><Speed[23-16]><Speed[31-24]> <ETX>
Each are bytes, where:
STX = start of text = 0x02
Forward = 1-forward, 0-back
Speed[#-#] = individual bytes of the unsigned int speed
ETX = end of text = 0x03
Inside the DCMotor zip are the DCMotorTestDlg .cpp/.h files I’ve used. They can’t be directly built because there are several other files needed. Really all you need to know are how to use the DCMotor class and how to talk to gamepads. In the OnInitDialog() method of DCMotorTestDlg I make the following three calls:
m_DCMotor.Create(“DC Motor”, WS_CHILD|SS_NOTIFY, CRect(0,0,0,0), this, 6666);
m_DCMotor.Open(“COM13”);
SetTimer(m_pTimer, 20, NULL);
Create() is used for making a window. The window is used for sending messages internally and externally. Internal messages go to/from the internal thread which does the communications to the Arduino. External messages aren’t really used for much right now, but I’ll eventually rewrite all of this to be a Sawbot controller which will give status updates. Open() does exactly what you think. For now, I’m running at 9600, 8, n, 1. SetTimer() is used for polling the gamepad for button presses. I won’t get into the details of why I do polling instead of interrupts, except to say that polling allows for more use of the gamepad. Feel free to let me know I’m wrong.
if (bJoyPresent){if ((joyInfoEx.dwXpos < 28672) || (joyInfoEx.dwXpos > 36864)){if (joyInfoEx.dwXpos > 32767)m_DCMotor.IssueCommand(true, (joyInfoEx.dwXpos – 32768)/128);elsem_DCMotor.IssueCommand(false, (32767 – joyInfoEx.dwXpos)/128);}else {m_nLastXpos = 32768;m_DCMotor.IssueCommand(false, 0);}}
First, I’ve retrieved the gamepad/joystick info (refer to lines 104-109 of DCMotorTestDlg.cpp, not shown here). If a gamepad is connected, then I check to see if I should command the motor to move. I’ve put a dead-zone of 8192 (between 28672 and 36864). This is to prevent the motor from always wanting to turn unless the value is exactly 32767. Then I noticed a mistake.
The Arduino is an 8-bit microcontroller, and the pseudo-analog (read: PWM) output I use to control the DC motor is 8-bit. That’s a range of 0-255. Much less than 0-32767. So I divide by 128 to get in the appropriate range. Not a big deal though as I doubt I will ever need to do anything more refined.
If you don’t quite follow my mental defection logic, feel free to leave a comment and I’ll explain. Also, this code is very very basic and unfinished. The Arduino code is easy to follow and uses the same protocol I stated above. I’ll post up a demo when I get a chance.
August 21, 2023 at 1:42 pm
Previously used products or services Please advise and trust to get started. We are accurate and secure. No. 1 online slots website,pg สล็อต camp, direct slots website for 2023, pgslot, direct website, agent exam, no minimum, many promotions is the best choice for you
August 22, 2023 at 7:31 pm
We must be very careful when reading blog posts. I already did it, and I think this post is really great
September 4, 2023 at 11:18 am
“Your blog post is like a hidden gem in the vast treasure chest of the internet. It’s a refreshing departure from the ordinary, offering a unique perspective that’s both thought-provoking and genuinely intriguing. Your creativity shines brightly, casting a captivating spell on readers and leaving them with a delightful sense of wonder. Thank you for sharing this uncommon and inspiring piece of content that reminds us all of the endless possibilities when we dare to think outside the box!”
Abogado de Conducir sin Licencia el Condado de Monmouth
September 4, 2023 at 11:19 am
Your creativity shines brightly, casting a captivating spell on readers and leaving them with a delightful sense of wonder. Thank you for sharing.
Abogado de Conducir sin Licencia el Condado de Monmouth
September 6, 2023 at 1:28 am
I really appreciate this wonderful post that you have provided for us. I feel strongly that love and read more on this topic. I have spent a lot of my spare time reading your content. Thank you a lot.
September 9, 2023 at 7:06 am
I valued your clear explanations, and your writing is excellent and easily comprehensible. I thoroughly enjoyed reading your content.Winlator emulator
September 10, 2023 at 10:26 pm
You’ve done us a great service by sharing this informative article. I urge you to continue your research on this topic, which I adore. only up
September 10, 2023 at 10:28 pm
I am continually impressed from the depth of the research. 바카라사이트
September 14, 2023 at 10:20 pm
Currently, downloading videos from TikTok without a watermark is a violation of TikTok’s usage policy, word wipe as the content on TikTok belongs to the user who created it and is not allowed to be distributed or reused without the author’s consent.
September 18, 2023 at 3:23 pm
Greetings. I have experience with graphic novels, which offer exceptionally unique content. However, in all honesty, I would recommend authors to consider utilizing polynesian images. This platform offers the option to acquire original images at a reasonable cost without compromising on quality. Many professionals rely on this resource for their projects because content in this format tends to have a more visually appealing appearance, remains distortion-free, has compact file sizes, and is easily editable.