标题:
wifi智能小车Arduino程序,追加提速和减速功能 带手机端apk
[打印本页]
作者:
龙安帝国
时间:
2018-3-3 07:55
标题:
wifi智能小车Arduino程序,追加提速和减速功能 带手机端apk
0.png
(44.64 KB, 下载次数: 104)
下载附件
2018-3-4 01:57 上传
资料51hei下载地址:
WIFI智能小车改键值.rar
(35.43 KB, 下载次数: 93)
2018-3-3 07:54 上传
点击文件名下载附件
手机端apk
下载积分: 黑币 -5
//============================智宇科技===========================、
/*前进 按下发出 ONA 松开ONF
后退:按下发出 ONB 松开ONF
左转:按下发出 ONC 松开ONF
右转:按下发出 OND 松开ONF
停止:按下发出 ONE 松开ONF
WIFI程序功能是按下对应的按键执行操,松开按键就停止
*/
int sd = 115;
int Left_motor=8; //左电机(IN3) 输出0 前进 输出1 后退
int Left_motor_pwm=9; //左电机PWM调速
int Right_motor_pwm=10; // 右电机PWM调速
int Right_motor=11; // 右电机后退(IN1) 输出0 前进 输出1 后退
int servopin7=7;//设置左右舵机驱动脚到数字口7
int servopin12=12;//设置上下舵机驱动脚到数字口12
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
char buffer[18]; //串口缓冲区的字符数组
void setup() //设定串口和引脚模式
{
Serial.begin(9600);
Serial.flush(); //清空串口缓存
pinMode(Left_motor,OUTPUT); // PIN 8 8脚无PWM功能
pinMode(Left_motor_pwm,OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_pwm,OUTPUT);// PIN 10 (PWM)
pinMode(Right_motor,OUTPUT);// PIN 11 (PWM)
pinMode(servopin7,OUTPUT);//设定舵机接口为输出接口
pinMode(servopin12,OUTPUT);//设定舵机接口为输出接口
}
void run(int sd) // 前进
{
digitalWrite(Right_motor,LOW); // 右电机前进
digitalWrite(Right_motor_pwm,HIGH); // 右电机前进
analogWrite(Right_motor_pwm,sd);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,LOW); // 左电机前进
digitalWrite(Left_motor_pwm,HIGH); //左电机PWM
analogWrite(Left_motor_pwm,sd);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void brake() //刹车,停车
{
digitalWrite(Right_motor_pwm,LOW); // 右电机PWM 调速输出0
analogWrite(Right_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor_pwm,LOW); //左电机PWM 调速输出0
analogWrite(Left_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100);//执行时间,可以调整
}
void left() //左转(左轮不动,右轮前进)
{
digitalWrite(Right_motor,LOW); // 右电机前进
digitalWrite(Right_motor_pwm,HIGH); // 右电机前进
analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,LOW); // 左电机前进
digitalWrite(Left_motor_pwm,LOW); //左电机PWM
analogWrite(Left_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void spin_left() //左转(左轮后退,右轮前进)
{
digitalWrite(Right_motor,LOW); // 右电机前进
digitalWrite(Right_motor_pwm,HIGH); // 右电机前进
analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,HIGH); // 左电机后退
digitalWrite(Left_motor_pwm,HIGH); //左电机PWM
analogWrite(Left_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void right() //右转(右轮不动,左轮前进)
{
digitalWrite(Right_motor,LOW); // 右电机不转
digitalWrite(Right_motor_pwm,LOW); // 右电机PWM输出0
analogWrite(Right_motor_pwm,0);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,LOW); // 左电机前进
digitalWrite(Left_motor_pwm,HIGH); //左电机PWM
analogWrite(Left_motor_pwm,150);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void spin_right() //右转(右轮后退,左轮前进)
{
digitalWrite(Right_motor,HIGH); // 右电机后退
digitalWrite(Right_motor_pwm,HIGH); // 右电机PWM输出1
analogWrite(Right_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,LOW); // 左电机前进
digitalWrite(Left_motor_pwm,HIGH); //左电机PWM
analogWrite(Left_motor_pwm,130);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void back() //后退
{
digitalWrite(Right_motor,HIGH); // 右电机后退
digitalWrite(Right_motor_pwm,HIGH); // 右电机前进
analogWrite(Right_motor_pwm,100);//PWM比例0~255调速,左右轮差异略增减
digitalWrite(Left_motor,HIGH); // 左电机后退
digitalWrite(Left_motor_pwm,HIGH); //左电机PWM
analogWrite(Left_motor_pwm,100);//PWM比例0~255调速,左右轮差异略增减
//delay(time * 100); //执行时间,可以调整
}
void servopulse(int servopin7,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值舵机的范围是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
{
pulsewidth=(myangle*11)+450;//将角度转化为500-2480 的脉宽值 这里的myangle就是0-180度 所以180*11+50=2480 11是为了换成90度的时候基本就是1.5MS
digitalWrite(servopin7,HIGH);//将舵机接口电平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数 这里调用的是微秒延时函数
digitalWrite(servopin7,LOW);//将舵机接口电平置低
delay(20-(pulsewidth*0.001));//延时周期内剩余时间 这里调用的是ms延时函数
}
void servopulsesx(int servopin12,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值舵机的范围是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
{
pulsewidth=(myangle*11)+400;//将角度转化为500-2480 的脉宽值 这里的myangle就是0-180度 所以180*11+50=2480 11是为了换成90度的时候基本就是1.5MS
digitalWrite(servopin12,HIGH);//将舵机接口电平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数 这里调用的是微秒延时函数
digitalWrite(servopin12,LOW);//将舵机接口电平置低
delay(20-(pulsewidth*0.001));//延时周期内剩余时间 这里调用的是ms延时函数
}
void front_detection()// 左右电机前
{
//此处循环次数减少,为了增加小车遇到障碍物的反应速度
for(int i=0;i<=5;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(servopin7,1);//模拟产生PWM
}
}
void left_detection()//左右舵机靠左
{
for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
// servopulse(servopin7,175);//模拟产生PWM
digitalWrite(servopin7,HIGH);//将舵机接口电平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(2476);//延时脉宽值的微秒数 这里调用的是微秒延时函数
digitalWrite(servopin7,LOW);//将舵机接口电平置低
delay(2);//延时周期内剩余时间 这里调用的是ms延时函数
}
}
void right_detection()//左右电机靠右
{
for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
// servopulse(servopin7,1);//模拟产生PWM
digitalWrite(servopin7,HIGH);//将舵机接口电平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(200);//延时脉宽值的微秒数 这里调用的是微秒延时函数
digitalWrite(servopin7,LOW);//将舵机接口电平置低
delay(2);//延时周期内剩余时间 这里调用的是ms延时函数
}
}
void s_detection()//上下舵机上
{
for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulsesx(servopin12,1);//模拟产生PWM
}
}
void x_detection()//上下舵机下
{
for(int i=0;i<=1;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulsesx(servopin12,175);//模拟产生PWM
}
}
void loop()
{
if(Serial.available() > 0) //Serial.available()返回串口收到的字节数
{
int index = 0;
delay(100); //延时等待串口收完数据,否则刚收到1个字节时就会执行后续程序
int numChar = Serial.available();
if(numChar > 15) //确认数据不会溢出,应当小于缓冲大小
{
numChar = 15;
}
while(numChar--)
{
buffer[index++] = Serial.read(); //将串口数据一字一字的存入缓冲
}
splitString(buffer); //字符串分割
}
}
void splitString(char *data)
{
Serial.print("Data entered:");
Serial.println(data);
char *parameter;
parameter = strtok(data, " ,"); //string token,将data按照空格或者,进行分割并截取
Serial.print("***");
Serial.println(parameter);
while(parameter != NULL)
{
setLED(parameter);
parameter = strtok(NULL, " ,"); //string token,再次分割并截取,直至截取后的字符为空
Serial.print("---");
Serial.println(parameter);
}
for(int x = 0; x < 16; x++) //清空缓冲
{
buffer[x] = '\0';
}
Serial.flush();
}
void setLED(char *data)
{
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'A'))
{
Serial.println("go forward!");
run(sd);
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'B'))
{
Serial.println("go back!");
back();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'C'))
{
Serial.println("go left!");
spin_left();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'D'))
{
Serial.println("go right!");
spin_right();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'E'))
{
Serial.println("Stop!");
brake();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'F'))
{
Serial.println("Stop!");
brake();
}
/* 以下是控制舵机左,上下舵机 */
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'L'))//左
{
left_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'I'))//右
{
right_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'K'))//上
{
s_detection();
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'J'))//下
{
x_detection();
}
//---------------------------
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'G'))
{
if(sd+10<=255)
{
sd = sd+10;
}
Serial.println(sd);
run(sd);
}
if((data[0] == 'O') && (data[1] == 'N')&& (data[2] == 'H'))//jianshu
{
if(sd-10>40)
{
sd = sd-10;
}
Serial.println(sd);
run(sd);
}
}
复制代码
作者:
qingfongh
时间:
2018-4-9 10:19
带上位机程序的吗?
作者:
shishi123
时间:
2018-5-2 17:46
下载了APP,不连WIFI的情况下,APP一按就退出
作者:
danielliu
时间:
2018-5-5 13:46
学习一下,感谢分享
作者:
51hkjsjf
时间:
2018-6-6 08:24
感谢分享,正在学习,很有帮助啊
作者:
无限创意2018
时间:
2018-6-8 22:53
好像功能不太理想啊!
作者:
wuxishun
时间:
2018-6-25 07:38
谢谢分享
作者:
ywzlq
时间:
2018-6-25 08:31
学习一下,感谢分享!!
作者:
HXXXX
时间:
2018-6-25 09:22
怎么用蓝牙接收控制智能小车
作者:
hs88
时间:
2018-8-25 23:31
距离才十米,有什么意义
作者:
2307393235
时间:
2020-1-7 13:26
我想学习一下
作者:
cr8526
时间:
2022-2-27 18:46
可以加个摄像头的吗?
作者:
qq378912453
时间:
2023-10-11 10:38
距离有点短
作者:
gz5353741
时间:
2024-3-8 16:31
手机端apk不行
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1