电子说
步骤1:控制器电路
控制器在引脚2和3中具有BT模块,在引脚4和2中具有开关由引脚11和12驱动的LED。
已保留LED,以表明交换机正在执行其工作。
步骤2:小工具电路
电路中显示了Arduino Uno,因为它更易于测试,但它可能是另一种类型,例如Nano对于移动小工具会更好。引脚连接将相同。
BT模块位于2和3中,和以前一样。
H桥从8,9和10驱动。
LED分别在11和12上。
电机应该有一个小电容来顺利完成操作,H桥连接应具有1K电阻器以帮助保护Arduino。
步骤3:通信
现在可以设计命令了
数据需要有一种固定的格式,以便可以识别命令并知道它是正确的命令,而不仅仅是一些随机数据。这本身就是一个整个行业,但是可以发明一个简单的“协议”来完成这项工作。
每个命令的长度正好为6个字符,并且参数最多为6个字符。/p》
每个命令将以“ @”符号开头,并以“#”符号结尾。该命令本身当然不能包含‘@’或‘#’符号。
因此,现在有效的命令如下所示:
@SPEED 150#
该命令以‘@’开头,后6个字符为‘SPEED’,然后最多6个字符‘150’以‘#’结尾。
此项目有四种命令类型,它们的类型分别为可能的参数:
速度,0到255,设置电动机速度
LEDRED ,打开或关闭,变成红色LED开启或关闭
LEDGRN ,打开或关闭,打开或关闭绿色LED
DIRECT ,FORWRD或REVRSE,控件电机方向
从控制器发送的数据如下:
@SPEED 0#@ LEDREDON#@ LEDGRNOFF#@ DIRECTFORWRD#@ SPEED 120#
依此类推。
步骤4:控制器程序
程序的开头设置了一些引脚分配,并启动了串行监视器和BT模块。
程序的其余部分围绕读取开关和电位器值并将它们发送到BT模块。
字符串变量用于构建“打印”到BT模块的命令行。每次发送命令都会施加延迟。
通信中的重要考虑因素是定时。如果Controller发送数据的速度超过了Gadget接收数据的速度,则会丢失信息,并且遥控器将无法正常工作。
程序会循环循环并每次发送所有输入值,因此4每个循环发送命令。这些的总时间可以使用延迟来调整。程序其他部分所需的时间最少,因为像这样的简单指令将在微秒内执行。
应该有一套完整的控制值,每秒大约发送3次,这将非常快对于我们的简单控制项目来说足够了。如果传输速度太慢,则可以提高BT模块的UART速度。在更复杂的项目中可能会发生这种情况。两个模块都需要设置为相同的UART值,例如38400。请注意,这与串行监视器的9600通讯速率无关。
第5步:小工具程序
小工具
定义中包含用于保存命令的字符串以及命令的两个部分“命令类型”和“命令参数”。
应避免延迟在这个程序中。如果程序运行太慢,则可能会丢失一些命令。
程序循环将执行以下步骤:
从BT模块获取命令
识别命令类型
执行命令
重复
程序的结构是这样的,以便主循环识别该命令,然后调用一个函数来对其进行处理。这样可以轻松地将新命令添加到主循环中,并具有单独的代码块来执行该命令。例如,可以添加伺服器。良好的程序结构也使查找错误变得更加简单。
创建了一个名为GetDataFunction的函数,用于从BT模块读取命令。
(该函数调用等效于BASIC中的gosub GetDataFunction)。
然后将命令分为cmdtype和cmdpara。
该命令必须位于要执行的“ if”语句列表。任何无效的命令都将被忽略。例如,无效的命令可能是由于数据损坏或通信时序错误造成的。
执行命令的功能与电机控制程序中的功能完全一样。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !