硬件设备
主板原理图网址:https://wiki.dfrobot.com.cn/_SKU_DFR0421_Romeo_for_Education_MainBoard_%E5%85%BC%E5%AE%B9Arduino
主板上2脚连接按钮,D4低D5pwm或者D7低D6pwm。分别对应M1和M2的正转速度。4高5pwm或者7高6pwm。分别对应M1和M2的反转速度。
1.按下电机转,松开电机停。
import time
import pyfirmata
# 设置Arduino的串口
port = 'COM3'#'/dev/ttyUSB0' # 根据你的连接设置正确的串口
# 创建Arduino对象
board = pyfirmata.Arduino(port)
# 启动模拟输入的迭代器
it = pyfirmata.util.Iterator(board)
it.start()
# 获取按钮引脚
button_pin = 2 # 根据你的连接设置正确的引脚
motor_direction_pin = 4 # 电机方向控制引脚
motor_speed_pin = 5 # 电机PWM转速控制引脚
# 获取按钮和电机对象
button = board.get_pin('d:' + str(button_pin) + ':i')
motor_direction = board.get_pin('d:' + str(motor_direction_pin) + ':o')
motor_speed = board.get_pin('d:' + str(motor_speed_pin) + ':p')
try:
while True:
# 读取按钮状态
button_state = button.read()
if button_state is not None:
print("按钮状态:", button_state)
# 如果按钮被按下,控制电机
if button_state == 1:
# 设置电机方向为正向
motor_direction.write(0)
# 设置电机转速(可以根据需要调整范围(0.0到1.0之间))
motor_speed.write(0.8)
else:
# 如果按钮未被按下,电机停止
motor_speed.write(0)
time.sleep(0.1)
except KeyboardInterrupt:
# 清理资源
board.exit()
2.按一下转,按一下停。
import time
import pyfirmata
# 设置Arduino的串口
port = 'COM3' #'/dev/ttyUSB0' # 根据你的连接设置正确的串口
# 创建Arduino对象
board = pyfirmata.Arduino(port)
# 启动模拟输入的迭代器
it = pyfirmata.util.Iterator(board)
it.start()
# 获取按钮引脚和电机引脚
button_pin = 2 # 根据你的连接设置正确的引脚
motor_direction_pin = 4 # 电机方向控制引脚
motor_speed_pin = 5 # PWM转速控制引脚
# 获取按钮对象和电机对象
button = board.get_pin('d:' + str(button_pin) + ':i')
motor_direction = board.get_pin('d:' + str(motor_direction_pin) + ':o')
motor_speed = board.get_pin('d:' + str(motor_speed_pin) + ':p')
motor_running = False # 电机状态标志
try:
while True:
# 读取按钮状态
button_state = button.read()
if button_state is not None:
print("按钮状态:", button_state)
# 如果按钮被按下且电机当前处于停止状态
if button_state == 1 and not motor_running:
print("启动电机")
motor_direction.write(1) # 设置电机方向
motor_speed.write(0.8) # 设置电机转速(0.0到1.0之间)
motor_running = True
time.sleep(0.05)
# 如果按钮被按下且电机当前处于运行状态
elif button_state == 1 and motor_running:
print("停止电机")
motor_speed.write(0) # 停止电机
motor_running = False
time.sleep(0.05)
time.sleep(0.1)
except KeyboardInterrupt:
# 清理资源
board.exit()