Совместное использование Enum между python и arduino
Я создал графический интерфейс на python, который позволяет перемещать управляемую arduino колесную тележку mecanum.
Тележка допускает 8 различных направлений перемещения и может вращаться влево и вправо. Команды передаются по последовательному соединению между ноутбуком (w10, python) и arduino.
У меня есть класс Enum в python, представляющий различные направления перемещения.
У меня есть соответствующее перечисление в arduino для интерпретации команд из задачи python.
Каков простой способ совместно использовать одно общее определение перечисления Enum для обеих сред кодирования?
@juerg, 👍2
Обсуждение1 ответ
Один из подходов, который я использовал для аналогичных целей, заключается в создании соответствующих заголовочных файлов (или модуля, или чего-то еще) из простого текстового файла для всех необходимых целей.
Поскольку вы уже знаете python, это должно быть довольно просто. Далее следует краткое "доказательство концепции". (Предупреждение: я почти не знаю ни одного python.)
Одним из недостатков этого является то, что вы должны помнить о необходимости регенерации заголовка / модуля каждый раз, когда вы обновляете перечисление (ключи или значения) - не забудьте перекомпилировать для части C ++. Если у вас есть система сборки, лучше всего интегрировать в нее этот этап генерации кода.
Разновидностью этого является синтаксический анализ одного из исходных кодов языка для извлечения определения и вывода его в формате, подходящем для другого. Однако, как правило, это гораздо сложнее сделать, если вы хотите сделать его надежным.
робот.перечисление
UP 1
DOWN 2
LEFT 3
RIGHT 4
JUMP 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')
- Программирование Arduino с использованием Python, а не C/C ++
- Не удается связаться с ардуино с помощью python (Windows)
- Последовательная связь Arduino с Python: отправка массива
- Построение графика на Python с использованием Tkinter Canvas
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Построение графика данных датчика Arduino в реальном времени на Processing, MatLab или Python
- Обработка времени чтения в Python с помощью pySerial
- Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?
Вы имеете в виду простое совместное использование кода между двумя частями исходного кода на разных языках? Вам придется найти между ними какие-то точки соприкосновения., @Majenko
Вы имеете в виду копирование и перенос текста (списка перечислений) между ними? Я нашел отличную тему, в которой конкретно рассказывается о перечислениях Python. Но даже при немного отличающемся синтаксисе всех различных опций в Python я все еще вижу небольшие различия, которые, вероятно, предотвратят вырезание и вставку без модификации. Спросите, и я опубликую это в качестве ответа, если хотите., @st2000