我的机器人实现的功能有:自主充电,自动巡检,加减速等,通过wifi与上位机进行交互实现远程控制和数据上传等功能 主要的代码如下: #include "test.h"
#include "bsp_esp8266.h"
#include "bsp_SysTick.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "bsp_dht11.h"
#include "bsp_TiMbase.h"
#include "bsp_led.h"
#include "stdint.h"
#include "bsp_GeneralTim.h"
#define PI 3.14
#define C PI*7
typedef char BYTE;
extern uint32_t time,time1;
extern uint16_t flag,flag1;
extern int32_t j,s,s1,s2 ;
volatile uint8_t ucTcpClosedFlag = 0;
extern void Delay(__IO uint32_t nCount);
extern float ADC_ConvertedValueLocal;
extern __IO uint16_t ADC_ConvertedValue;
//char cStr [ 1500 ] = { 0 };
//¶¨Òå·¢Ëͺ¯Êý
//char* DT_Send_User();
extern uint32_t circle,cw; void dt_send(uint16_t a,uint8_t b);//²ÎÊýaÖ¸µÄÊÇÊý¾Ý£¬²ÎÊýbÖ¸µÄÊÇÖ¸Áî
void dt_send1(uint16_t a,uint8_t b);
void dt_send2(uint16_t a,uint8_t b);
//char* s_str(char*p_str,uint8_t p_nlen,char*p_str1);
//void s_char(int p_num,char*p_ch);
char data_send[100] ={0};
uint16_t a_a;//¶¨ÒåÊý¾ÝÉÏ´«
int sudu ( uint16_t b_a);
int sudu ( uint16_t b_a)// ¼ÆË㵱ǰËÙ¶È
{
switch(b_a)
{
case 0 : //µ±Ç°ËÙ¶È
a_a=25;
// dt_send1(a_a,2);
break;
case 1 : //µ±Ç°ËÙ¶È
a_a=20;
//dt_send1(a_a,2);
break;
case 2 : //µ±Ç°ËÙ¶È
a_a=15;
///dt_send1(a_a,2);
break;
case 3 : //µ±Ç°ËÙ¶È
a_a=10;
//dt_send1(a_a,2);
break;
default:
a_a=5;
// dt_send1(a_a,2);
break;
}
return a_a;
} int weizi(uint32_t a);
int weizi(uint32_t a) //¼ÆË㵱ǰλÖú¯Êý
{
if(a<80000000)//Ò»¸öÏÞ¶¨
{
if(cw==1&&flag==1)
{
s1=(s1)+((a/2)/800)*C;
}
else if(cw==0&&flag==1)
{
s2 = (-(C*a))+(s2);
}
else
{
return s;
}
s=s1+s2; return s;
}
else
{
circle=0;
return s;
}
}
void ESP8266_StaTcpClient_UnvarnishTest ( void )
{
uint8_t ucStatus;
char cStr [ 100 ] = { 0 };
printf ( "\r\nÕýÔÚÅäÖÃ ESP8266 ......\r\n" );
macESP8266_CH_ENABLE();
ESP8266_AT_Test ();
ESP8266_Net_Mode_Choose ( STA ); while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
ESP8266_Enable_MultipleId ( DISABLE );
while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
while ( ! ESP8266_UnvarnishSend () );
printf ( "\r\nÅäÖà ESP8266 Íê±Ï\r\n" );
a_a=1;
dt_send(a_a,0);
ESP8266_SendString ( ENABLE, cStr,0 , Single_ID_0 );
while ( 1 )
{
char*pRecStr =NULL;
pRecStr = ESP8266_ReceiveString( ENABLE);
if(*(pRecStr+1)==0x0A)
{
if(*(pRecStr+2)==01&&flag1 ==0&&flag==0)//×Ô¶¯Ñ²¼ìflag1 ==1
{
time =0;
flag1 = 1;//ÅжÏÊÇ·ñÊÇÔÚÔ˶¯»¹ÊÇÔÚÍ£Ö¹ 1±íʾÔ˶¯ 0±íʾֹͣ
Delay(6666);
if(flag1==1)
{
a_a=3;
TIM_Cmd(BASIC_TIM, ENABLE);
dt_send(a_a,1);
}
}
else if(*(pRecStr+2)==0x02&&flag1 ==1)//È˹¤Ñ²¼ìflag1 ==0
{
TIM_Cmd(BASIC_TIM, DISABLE);
time =0;
printf(cStr,"ÕýÔÚÇл»È˹¤Ä£Ê½");
j=4;
flag1 = 0;
Delay(6666);
a_a=2;
dt_send(a_a,2);
}
else if(*(pRecStr+2)==0x03&&flag1 ==0)
{
TIM_Cmd(BASIC_TIM, ENABLE);
flag=1;
printf(cStr,"µ±Ç°ËÙ¶È5cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=0x0001;
dt_send(a_a,3);//a_a±íʾµÄÊÇÊý¾Ý 3±íʾµÄÊÇÖ¸Áî
}
else if(*(pRecStr+2)==0x04&&flag1 ==0&&flag==1)//¼ÓËÙÖ¸Áî
{
j--;//j±íʾÓëËÙ¶ÈÏà¶ÔÓ¦£¨×Ô¼ºÉ趨ËüµÄÖµ£©
if(j==3)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È10cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=2;
dt_send(a_a,4);//ÏÂλ»úµÄ»Ø·¢Êý¾Ý
}
if(j==2)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È15cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=3;
dt_send(a_a,4);
}
if(j==1)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È20cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=4;
dt_send(a_a,4);
}
if(j<=0)
{
j=0;
time=0;
printf(cStr,"µ±Ç°×î´óËÙ¶È25cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=5;
dt_send(a_a,4);
}
}
else if(*(pRecStr+2)==0x05&&flag1 ==0&&flag==1)//¼õËÙÖ¸Áî
{
j++;
if(j==3)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È10cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=2;
dt_send(a_a,5);
}
if(j==2)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È15cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=3;
dt_send(a_a,5);
}
if(j==1)
{
time=0;
printf(cStr,"µ±Ç°ËÙ¶È20cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=4;
dt_send(a_a,5);
}
if(j>=4)
{
j=4;
time=0;
printf(cStr,"µ±Ç°ËÙ¶È5cm/s£¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=1;
dt_send(a_a,5);
}
}
else if(*(pRecStr+2)==0x06&&flag1 ==0&&flag==1)//ÕýÏòÖ¸Áî
{
cw=1;
Delay(6666);
LED2_OFF;
a_a=1;
dt_send(a_a,6);
}
else if(*(pRecStr+2)==0x07&&flag1 ==0&&flag==1)//·´ÏòÖ¸Áî
{
cw=0;
Delay(6666);
LED2_ON;
a_a=2;
dt_send(a_a,7);
}
else if(*(pRecStr+2)==0x08&&flag1 ==0&&flag==1)
{
flag=0;
TIM_Cmd(BASIC_TIM, DISABLE);
printf(cStr,"µ±Ç°µç»úÒÑÍ£Ö¹ÔËÐУ¬µ±Ç°Î»ÖÃ%dÃ×\n",s);
a_a=1;
dt_send(a_a,8);
}
else
{
sprintf(cStr,"Ö¸ÁîÊä³öÓÐÎó \n ");
ESP8266_SendString ( ENABLE, cStr,0 , Single_ID_0 );
}
}
//״ָ̬ÁîÏ·¢¹¦ÄÜ˵Ã÷
else if(*(pRecStr+1)==0x0B)//״ָ̬Áî
{
if(*(pRecStr+2)==0x01)//ÖÇÄÜÈ˹¤Ä£Ê½
{
if(flag1==0)//È˹¤
{
a_a=2;
dt_send1(a_a,1);
}
if(flag1==1) //ÖÇÄÜ
{
a_a=3;
dt_send1(a_a,1);
}
}
else if(*(pRecStr+2)==0x02)
{
switch(j)
{
case 0 : //µ±Ç°ËÙ¶È
a_a=25;
dt_send1(a_a,2);
break;
case 1 : //µ±Ç°ËÙ¶È
a_a=20;
dt_send1(a_a,2);
break;
case 2 : //µ±Ç°ËÙ¶È
a_a=15;
dt_send1(a_a,2);
break;
case 3 : //µ±Ç°ËÙ¶È
a_a=10;
dt_send1(a_a,2);
break;
default:
a_a=5;
dt_send1(a_a,2);
break;
}
}
else if(*(pRecStr+2)==0x03)//É豸ÊÇ·ñÕýÔÚÔËÐÐ
{
if(flag==1) //ÔËÐÐ״̬
{
a_a=0;
dt_send1(a_a,3);
}
else //ֹͣ״̬
{
a_a=1;
dt_send1(a_a,3);
}
}
else if(*(pRecStr+2)==0x04)//µ±Ç°Î»ÖÃ
{
if(flag==1)
{
a_a=weizi(circle)/100;
dt_send1(a_a,4);
}
else
{
a_a=weizi(circle);
dt_send1(a_a,4);
}
}
else if(*(pRecStr+2)==0x05)//Õý·´×ª ´ýд³ÌÐò
{
if(cw==1) //Õý´«
{
a_a=1;
dt_send1(a_a,5);
}
else //·´×ª
{
a_a=2;
dt_send1(a_a,5);
} }
else if(*(pRecStr+2)==0x06)//µç³ØµçÁ¿²éѯ
{
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*3.3;
ESP8266_SendString ( ENABLE, cStr,0 , Single_ID_0 );
}
else if(*(pRecStr+2)==0x07)//´«¸ÐÆ÷Êý¾Ý
{
a_a=0;
dt_send1(a_a,7);
}
else
{
sprintf(cStr,"Ö¸ÁîÓÐÎó");
//a_a=2;
//dt_send(a_a,8);
ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );
}
}
else
{
sprintf(cStr,"Ö¸ÁîÓÐÎó");
a_a=2;
dt_send(a_a,8);
ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );
//Delay_ms ( 10000 );
}
//Delay_ms ( 100 );
ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );
//sprintf(cStr,"µ±Ç°ËÙ¶È");
// ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 ); //·¢ËÍÊý¾Ý
Delay_ms ( 100 );
if ( ucTcpClosedFlag ) //¼ì²âÊÇ·ñʧȥÁ¬½Ó
{
ESP8266_ExitUnvarnishSend (); //Í˳ö͸´«Ä£Ê½
do ucStatus = ESP8266_Get_LinkStatus (); //»ñÈ¡Á¬½Ó״̬
while ( ! ucStatus );
if ( ucStatus == 4 ) //È·ÈÏʧȥÁ¬½ÓºóÖØÁ¬
{
printf ( "\r\nÕýÔÚÖØÁ¬ÈȵãºÍ·þÎñÆ÷ ......\r\n" );
while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) );
while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );
printf ( "\r\nÖØÁ¬ÈȵãºÍ·þÎñÆ÷³É¹¦\r\n" );
}
|