2

I have created a gui in python that allows an arduino controlled mecanum wheel cart to move around.

The cart allows for 8 different move directions and can rotate left and right. Commands are sent over a serial connection between the laptop(w10, python) and the arduino.

I have an Enum class in python representing the different move directions.

I have a corresponding enum in the arduino to interprete the commands from the python task.

What is an easy way to share a single common enum definition for both coding environments?

askedNov 28, 2020 at 14:23
juerg's user avatar
2
  • You mean simple code-sharing between two pieces of source code in differing languages? You'll have to find some common ground between them.CommentedNov 28, 2020 at 14:35
  • You mean copy and past the text (the enum list) between the two? I found a great thread that talks about Python enums specifically. But even with the slightly different syntax of all the different options in Python, I still see slight differences that will likely prevent cutting and pasting w/o modification. Ask and I'll post that as an answer if you want.CommentedNov 28, 2020 at 14:57

1 Answer1

3

One approach that I have used for similar purposes is to generate the appropriate header files (or module or whatever) from a simple text file for all the required uses.

Since you already know python this should be pretty easy. Quick "proof of concept" follows. (Warning: I barely know any python.)

One downside to this is that you have to remember to regenerate the header/module each time you update the enum (keys or values) - don't forget to recompile for the C++ part. If you have a build system, it is best to integrate that code generation step into it.

A variation of this is to parse one of the language's source code to extract the definition and output it in a format suitable for the other. That is generally much harder to do though if you want to make it robust.


robot.enum

UP    1DOWN  2LEFT  3RIGHT 4JUMP  5

enum_generator.py

def python_enum(filename):    with open(filename, 'w') as w:        w.write('class Robot(Enum):\n')        with open('robot.enum') as r:            for line in r:                parts = line.split()                w.write(f'    {parts[0]} = {parts[1]}\n')def cplusplus_enum(filename):    with open(filename, 'w') as w:        w.write('#pragma once\n')        w.write('enum Robot: int {\n')        with open('robot.enum') as f:            for line in f:                parts = line.split()                w.write(f'  {parts[0]} = {parts[1]},\n')        w.write('};');python_enum('robot_enum.py')cplusplus_enum('robot_enum.h')
answeredNov 28, 2020 at 17:14
Mat's user avatar

Your Answer

Sign up orlog in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

By clicking “Post Your Answer”, you agree to ourterms of service and acknowledge you have read ourprivacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.