[2年前,我制作了一个Arduino 4WD,可以通过蓝牙对其进行控制。我还使用App Inventor制作了一个应用。
我想修改我的应用程序或arduino代码,因此当我按下应用程序上的按钮时,它会开始存储说明(前进,后退等),直到我单击停止按钮为止。
然后,当我按下第三个按钮时,汽车将追踪路径(或说明)。
希望大家都了解我。大家都可以帮我吗?你们都不必给出代码,仅是一个主意。.预先感谢..
我认为您可以按照自己的方式使用字符。这既不容易,也不是直截了当,这是我考虑的一种可能方式。
[根据您的设置和描述,我相信您在初始项目中使用了switch case
条件语句,因此首先您必须创建替代字符,该替代字符与机器人当前可以执行的每个操作相反。 (back_right,back_left,back等)。您必须了解,最初的后背将是此修改部件的新前进方向。
[尝试与存储在特定字符串或字符集中的任何操作相反。 (back_right返回X,back_left返回Y,back返回Z等)。因此,当您想回溯零件时,您可以接收存储的字符,并允许它们在LIFO中运行,即“后进先出”。
FOR EXAMPLE: if you made a movement
forward-F
right-R
Char stored = BX
where B= backward
and X= back_right
轻按应用程序上的按钮,将X作为第一种情况发送,将B作为第二种情况发送。
要在Arduino上记录命令,您可以使用所有可能的命令创建一个enum
,例如:
enum Command
{
Forward,
Backward,
Left,
Right,
//...
Stop
};
然后使用命令和经过时间创建一个结构:
struct CommandList
{
unsigned long TimeOffset;
Command cmd;
};
然后十个创建CommandList
结构的向量。
[每次Arduino在录制时接收到一条命令,都可以将一个项目添加到包含时间偏移和要执行的命令的矢量中。
要重放,只需再次遍历向量并在正确的时间偏移处触发每个命令(使用delay()
或timer interrupt
)。
如果要返回相同的路径,只需以相反的顺序播放列表,并且列表中的每个项目都使用相反的命令。
您甚至可以通过更改单个位来给出相反的命令的方式来创建命令,例如:
00000001 left
10000001 right
00000010 forward
10000010 backward
要获得相反的命令,只需翻转最左边的位。