When I first built Sawppy using LewanSoul LX-16A serial bus servos (*), I was not interested in using their PC software which was tailored to running pre-scripted sequences of motion. At the time I was not using an Arduino, either, so I wrote my own serial communication driver in Python based on LewanSoul’s PDF documenting their serial communication protocol.
This time around, I am using an Arduino and eager to take advantage of already prebuilt software to cut down on development time. In the same Dropbox where I found my
LewanSoul Bus Servo Communication Protocol.pdf reference document, there was a file
LSC series communication routines of controller.zip. Now that I’ve seen Arduino libraries packaged in a zip file, I looked inside to verify the structure of having
*.h source files. It turns out they were packaged inside that zip file as another file
LobotServoController.zip. This zip file within a zip file looked like an Arduino library, with
LobotServoController.h header file and
LobotServoController.cpp source, a
keywords.txt for Arduino IDE syntax highlighting, and a few
*.ino sketch files inside an example directory.
It all looked very promising at first glance but a closer look deflated the initial enthusiasm. The API only had commands for servo position, nothing for continuous rotation mode which is how Sawppy’s six wheels roll on the ground. And looking under the hood inside the code, the serial communication header is in the wrong format. The first two bytes are LewanSoul identifiers
0x55 0x55 as expected, but the third byte is length, not servo ID.
Digging a little deeper, I realized despite its location in the
LX-16A Bus Servo subdirectory of LewanSoul’s Dropbox, this Arduino library was not for controlling LX-16A devices. They are, as the file name stated (but I overlooked) intended for their LSC line of controller boards for standard RC servos, not the serial bus servos.
Sadly, this promising-looking Arduino library will not help me.
Code for LX-16A servos actually lived in a different folder:
bus servo communication routines held Arduino sketches matching the expected protocol. However, they were written as individual one big flat *.ino file, and not written as an Arduino library.
This is fine for sample code, but not well suited to be part of a larger project. It looks like I’ll need to learn to how to write an Arduino library after all, either to convert this LewanSoul sample code into a library or create my own from scratch (again).
(*) Disclosure: As an Amazon Associate I earn from qualifying purchases.
5 thoughts on “Examining LewanSoul Arduino Library”
Hi , I have tried to use XArm with Arduino using the zip file within a zip file looked like an Arduino library, with LobotServoController.h header file and LobotServoController.cpp and example files but they dont work .. How can i make it work.
I have not worked with LewanSoul xArm myself, so I have no first hand experience to help. According to the product page it uses a different servo: the LX-15D and not the LX-16A I used here. http://www.lewansoul.com/product/detail-27.html
In case you are still looking for a good arduino library for the serial bus servos, i have published this:
I added all of the position read and write, motor mode, and position synchronization routines.
Hi Kevin, thanks for doing this! I am having a problem while while running the the examples you published. I get “Error compiling for board Arduino Uno.” error. I am simply running the code after downloading. If there anything further I should do before compiling the code?
The Uno only has one serial port, so Serial1 would not be defied (the serial port used for the servo coms in the example). You might want to try defining a SoftwareSerial port and using that instead:
Also don’t forget you will need the line driver! https://github.com/madhephaestus/lx16a-servo#electrical