/*该头文件引用由IntoRobot自动添加.*/
#include "WidgetJoypad/WidgetJoypad.h"
#define A_IN0 D0 // A 电机驱动IO 电机接口
#define A_IN1 D1 // A 电机驱动IO
#define B_IN0 D3 // B 电机驱动IO
#define B_IN1 D4 // B 电机驱动IO
#define AB_EN D2 // A B 电机使能
#define LED D7 状态指示灯调试程序用的
const int analogInPin = A2; 定义一个电位器的模拟量输入接口
const int analogOutPin_A = A0; 定义一电机速度控制的两个PWM输出接口
const int analogOutPin_B = A1;
int sensorValue = 0; 定义模拟量输入输出变量
int outputValue = 0;
int outputValue_A = 0;
int outputValue_B = 0;
WidgetJoypad joypad;
void SwitchCb(void) 按键解析函数的(解析收到的按键信号并进行处理)
{
if(joypad.getUpkey()) 检测前进按键
{
goahead(); 小车前进
delay(300); 延时(这个是我一直困惑的问题按道理是不用加延时的,但是实际情况不 加延时会出现不前进的情况,后续还会继续研究这个问题,官方的例 子就是带延时的所以先按照官方的来)
}
else
{
stopm(); 小车停止
}
if(joypad.getDownkey()) 后退检测
{
goback();
delay(300);
}
else
{
stopm();
}
if(joypad.getRightkey()) 右转
{
trunright();
delay(300);
}
else
{
stopm();
}
if(joypad.getLeftkey()) 左转
{
trunleft();
delay(300);
}
else
{
stopm();
}
}
void setup() 初始化
{
// put your setup code here, to run once.
pinMode(A_IN0, OUTPUT);
pinMode(A_IN1, OUTPUT); 电机接口初始化
pinMode(B_IN0, OUTPUT);
pinMode(B_IN1, OUTPUT);
pinMode(AB_EN, OUTPUT);
pinMode(LED, OUTPUT); 指示灯初始化
pinMode(analogInPin,AN_INPUT); 模拟量输入
pinMode(analogOutPin_A,OUTPUT); PWM输出
pinMode(analogOutPin_B,OUTPUT);
joypad.begin(SwitchCb);
}
void goahead() 前进子函数
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN0, HIGH); //灯亮
digitalWrite(A_IN1, LOW); //灯灭
digitalWrite(B_IN1, HIGH); //灯亮
digitalWrite(B_IN0, LOW); //灯灭
}
void goback() 后退子函数
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN1, HIGH); //灯亮
digitalWrite(A_IN0, LOW); //灯灭
digitalWrite(B_IN0, HIGH); //灯亮
digitalWrite(B_IN1, LOW); //灯灭
}
void trunright()
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN0, HIGH); //灯亮
digitalWrite(A_IN1, LOW); //灯灭
digitalWrite(B_IN0, HIGH); //灯亮
digitalWrite(B_IN1, LOW); //灯灭
}
void trunleft()
{
digitalWrite(AB_EN, HIGH);
digitalWrite(A_IN1, HIGH); //灯亮
digitalWrite(A_IN0, LOW); //灯灭
digitalWrite(B_IN1, HIGH); //灯亮
digitalWrite(B_IN0, LOW); //灯灭
}
void stopm()
{
digitalWrite(AB_EN, LOW);
digitalWrite(A_IN0, LOW); //灯亮
digitalWrite(A_IN1, LOW); //灯灭
digitalWrite(B_IN1, LOW); //灯亮
digitalWrite(B_IN0, LOW); //灯灭
}
void loop()
{
sensorValue = analogRead(analogInPin); 读取模拟量数据
outputValue = map(sensorValue, 0, 2047, 0, 255)/4; 数值转换(实验发现结果除4速度比较稳定)
outputValue_A = outputValue;
outputValue_B = outputValue;
analogWrite(analogOutPin_A, outputValue); 输出PWM
analogWrite(analogOutPin_B, outputValue);
}
代码调试:
调试完毕后将小车进行组装:
最后打开控制软件进行遥控:(可以
手机电脑同时控制,由于本人条件有限使用手机录制视屏只好用电脑进行演示)
PS:勾选下面的按键控制可用电脑键盘进行操作
下面将视频贴上来让小伙伴们看看,用爱剪辑制作的 呵呵~ 马马虎虎,大家不要见笑~
总结一下:使用电位器可将车速控制在合适的范围,拧动电位器可进行调节,速度控制非常流畅,全部功能都都可以实现,方向控制是我想说的重点也是和上面延时函数可能也有关系,在控制过程中有时会出现动作延时的情况,还有不能连续控制的情况,这些问题我还在继续研究,可能其他小伙伴已经解决了(有的话请高手留言赐教非常感谢),下面我就想说下关于控件的使用,控件的种类个人感觉还需要再增加一些,如果控件可以自己设计那就更完美了,整个开发过程相对来说非常之快,归功于这个开源的平台使项目开发变得非常容易,如果使用传统的方法以我这个菜鸟的技术不知道什么时候才能搞出来。
以上欢迎各位小伙伴过来讨论赐教~