STC+Andriod+ESP8266制作手机遥控小车

STC+Andriod+ESP8266制作⼿机遥控⼩车硬件配置
主控芯⽚:STC12C5A32S2 1个
晶振:11.0592MHz 1个;
电容:30pf 2个
电机控制:L298N 1个~2个
wifi芯⽚:ESP8266 1个
电动⼩车模型(4个轮⼦,4个电机,车架)
电源:9V电池1个(驱动L298N),充电宝1个(2个USB取电⼝,驱动主控芯⽚和ESP8266)
接⼝: ttl转USB接⼝线 2个(从USB端⼝取5V和3.3V电源⽤)
导线若⼲
上述硬件,某宝上可以⼀站式买齐;
硬件连线简图
软件
stc-isp-v6.88F 烧录STC程序
Keil uVision5 控制程序编写及编译
XCOM V2.6 串⼝助⼿,⽤于调试串⼝信息
Andriod Studio 编写安卓APP
巨葛庄整体思路
发送串⼝信号发送串⼝信号发送信号
关键知识点
STC中断及串⼝通信 (可参考blog.csdn/qiaoermeng/article/details/89248450)
ESP8266 接线及AT指令(可参考blog.csdn/qq_32171385/article/details/109363279)电机控制逻辑 (正负极控制电机的正转或反转,可以后⾯根据实际情况调试确定)
andriod APP 串⼝通信 (可参考wwwblogs/yangfengwu/p/11203546.html )关键代码
#include <STC12C5A60S2.H>  //STC芯⽚库函数,可以在stc-isp-v6.88F⾥⾯到,把它保存到Keil uVision5库函数⽬录下就可以引⽤#include <stdio.h>
#include <stdlib.h>
#include <string.h>  //字符串库函数,⽤来解析字符串
#include <intrins.h> //延时函数中的_nop_() 要⽤
脊椎病因学
#include "motor.h"  // 电机控制逻辑,已经被保存为.H⽂件了
unsigned char receiveData[100]; //定义⼀个数组,⽤来保存收到的数据
/************************
*函数名:延时函数
*函数功能:延时1000ms
*输⼊:⽆
*输出:⽆
*************************/
void Delay1000ms()  //@11.0592MHz
蒂利斯汉堡加盟{
unsigned char i, j, k;
_nop_();
_nop_();
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/************************
*函数名:延时函数
*函数功能:延时100ms
*输⼊:⽆
*输出:⽆
*************************/
void Delay100ms()  //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/****************
*函数:Send_data()
*函数功能: 发送字符串
****************/
void send_byte(unsigned char b){
淫诗SBUF=b;
kis2009
while(!TI);
TI=0;
}
/****************
*函数:Send_data()
*函数功能: 发送单个字符
****************/
void Send_data(unsigned char *P)
{
while(*P!='\0'){
send_byte(*P);
P++;
}
}
/****************
*函数:ESPinit()
*函数功能: ESP8266初始化
****************/
void ESPinit()
{
// ESP8266的AT指令,可以⾃⾏百度各个指令的含义
unsigned char Botelv[]="AT+CIOBAUD=9600";
unsigned char Runserver[]="AT+CWSAP=\"ESPcar\",\"0123456789\",11,0"; unsigned char IPconfig[]="AT+CIPSERVER=1,8080";
unsigned char RunAp[]="AT+CWMODE=2";
unsigned char Connect[]="AT+CIPMUX=1";
Send_data(Botelv);
send_byte('\r');//回车
send_byte('\n');//换⾏
Delay100ms(); //延时函数,给点时间让ESP8266反应过来;
Send_data(RunAp);
send_byte('\r');//回车
send_byte('\n');//换⾏
Delay100ms();
Send_data(Runserver);
send_byte('\r');//回车
send_byte('\n');//换⾏
Delay100ms();
Send_data(Connect);
Send_data(Connect);
send_byte('\r');//回车
send_byte('\n');//换⾏
Delay100ms();
Send_data(IPconfig);
send_byte('\r');//回车
send_byte('\n');//换⾏
Delay100ms();
}
/****************
*函数:usartInit()
*函数功能: 串⼝初始化
****************/
void UsartInit()
{
SCON=0x50;  //设置为⼯作⽅式1
TMOD=0x20;  //设置计数器⼯作⽅式2
PCON=0x80;  //波特率加倍
TH1=0xFA;    //计数器初始值设置,注意波特率是9600的
TL1=0xFA;
ES=1;      //打开接收中断
EA=1;      //打开总中断
TR1=1;    //打开计数器
}
/*******************************************************************************
* 函数名      : main
* 函数功能  : 主函数
* 输⼊      : ⽆
* 输出      : ⽆
*******************************************************************************/
void main()
{
P0=0;
UsartInit();  // 串⼝初始化
Delay1000ms();// 故意设置的延时,没有什么特殊含义,可以⾃⾏取消;
Delay1000ms();
ESPinit(); //ESP8266初始化
Delay1000ms(); // 故意设置的延时,没有什么特殊含义,可以⾃⾏取消;
// while循环判断⼿机发出的信号是哪个,以便执⾏对应的程序;
while(1){
if ((receiveData[9]=='1')&&(receiveData[10]=='1')&&(receiveData[11]=='1')){
front(); //前进
}路政信息
else if((receiveData[9]=='0')&&(receiveData[10]=='0')&&(receiveData[11]=='1')){    back(); //后退
}
else if((receiveData[9]=='1')&&(receiveData[10]=='1')&&(receiveData[11]=='0')){    left();  //左转
}
else if((receiveData[9]=='0')&&(receiveData[10]=='1')&&(receiveData[11]=='1')){    right();  //右转
}
else if((receiveData[9]=='0')&&(receiveData[10]=='0')&&(receiveData[11]=='0')){    stop(); //停⽌
}
else {P0=0;}
}
}
/*******************************************************************************
* 函数名        : Usart() interrupt 4
* 函数功能    : 串⼝通信中断函数,分析收到的数据指定位是否为1,是则点灯* 输⼊          : ⽆
* 输出          : ⽆
*******************************************************************************/
void Usart() interrupt 4
{
static char i=0;
if (RI==1)
{
receiveData[i]=SBUF; //将缓存中的数据赋值到数组保存起来
RI = 0;  //清除接收中断标志位
i++;
if(receiveData[i-1]=='\n')
{
receiveData[i]='\0'; //字符串末尾的时候,数组序号清零
i=0;
}
}
}
motor.h库函数

本文发布于:2024-09-22 12:47:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/200437.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:AD590
标签:函数   发送   数据   电机   延时   驱动
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议