光盘上有部分源码的,你可以参考一下
/*
* Copyright (c) 2015,小二极客科技有限公司
* All rights reserved.
*
* 文件名称:wifi-robots
* 文件标识:
* 摘 要:wifi机器人智能小车控制
*
* 当前版本:1.0
* 作 者:tianyalu
* 完成日期:2015年4月1日
*/
//#include <AFMotor.h>
#include <Servo.h>
#include <MsTimer2.h>
#include <EEPROM.h>
int ledpin = 13;//设置系统启动指示灯
int ENA = 5;//
int ENB = 6;//
int INPUT2 = 7;//
int INPUT1 = 8;//
int INPUT3 = 12;//
int INPUT4 = 13;//
#define MOTOR_GO_FORWARD {digitalWrite(INPUT1,LOW);digitalWrite(INPUT2,HIGH);digitalWrite(INPUT3,LOW);digitalWrite(INPUT4,HIGH);} //车体前进
#define MOTOR_GO_BACK {digitalWrite(INPUT1,HIGH);digitalWrite(INPUT2,LOW);digitalWrite(INPUT3,HIGH);digitalWrite(INPUT4,LOW);} //车体前进
#define MOTOR_GO_RIGHT {digitalWrite(INPUT1,HIGH);digitalWrite(INPUT2,LOW);digitalWrite(INPUT3,LOW);digitalWrite(INPUT4,HIGH);} //车体前进
#define MOTOR_GO_LEFT {digitalWrite(INPUT1,LOW);digitalWrite(INPUT2,HIGH);digitalWrite(INPUT3,HIGH);digitalWrite(INPUT4,LOW);} //车体前进
#define MOTOR_GO_STOP {digitalWrite(INPUT1,LOW);digitalWrite(INPUT2,LOW);digitalWrite(INPUT3,LOW);digitalWrite(INPUT4,LOW);} //车体前进
//AF_DCMotor motor1(1, MOTOR12_64KHZ);// 创建电机#1号,速度是64KHz pwm
//AF_DCMotor motor2(2, MOTOR12_64KHZ);// 创建电机#2号,速度是64KHz pwm
Servo servo1;// 创建舵机#1号
Servo servo2;// 创建舵机#2号
byte angle1;
byte angle2;
int buffer[3]; //串口接收数据缓存
int rec_flag;
int serial_data;
int Uartcount;
unsigned long Pretime;
unsigned long Nowtime;
unsigned long Costtime;
/*
*********************************************************************************************************
** 函数名称 :setup()
** 函数功能 :系统初始化(串口、电机、舵机、指示灯初始化)。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void setup()
{
int i;
pinMode(ledpin,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);
pinMode(INPUT1,OUTPUT);
pinMode(INPUT2,OUTPUT);
pinMode(INPUT3,OUTPUT);
pinMode(INPUT4,OUTPUT);
for(i=0;i<20;i++)
{
digitalWrite(ledpin,LOW);
delay(1000);
digitalWrite(ledpin,HIGH);
delay(1000);
}
digitalWrite(ledpin,LOW);
Serial.begin(9600);//串口波特率设置为9600 bps
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
//motor1.setSpeed(255);// 设置电机速度,从00/255之间任意
// motor2.setSpeed(255);// 设置电机速度,从00/255之间任意
servo1.attach(9);//定义舵机7控制口
servo2.attach(10);//定义舵机8控制口
angle1 = EEPROM.read(0x01);
angle2 = EEPROM.read(0x02);
servo1.write(angle1);
servo2.write(angle2);
//MsTimer2::set(10, UartTimeoutCheck);//串口超时检测
// MsTimer2::start();
}
/*
*********************************************************************************************************
** 函数名称 :loop()
** 函数功能 :主函数
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void loop()
{
while(1)
{
Get_uartdata();
UartTimeoutCheck();
}
}
/*
*********************************************************************************************************
** 函数名称 :Communication_Decode()
** 函数功能 :串口命令解码
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void Communication_Decode()
{
if(buffer[0]==0x00)
{
switch(buffer[1]) //电机命令
{
case 0x01:MOTOR_GO_FORWARD; return;
case 0x02:MOTOR_GO_BACK; return;
case 0x03:MOTOR_GO_LEFT; return;
case 0x04:MOTOR_GO_RIGHT; return;
case 0x00:MOTOR_GO_STOP; return;
default: return;
}
}
else if(buffer[0]==0x01)//舵机命令
{
if(buffer[2]>180)return;
switch(buffer[1])
{
case 0x07:angle1 = buffer[2];servo1.write(angle1);return;
case 0x08:angle2 = buffer[2];servo2.write(angle2);return;
default:return;
}
}
else if(buffer[0]==0x32)//保存命令
{
EEPROM.write(0x01,angle1);
EEPROM.write(0x02,angle2);
return;
}
}
/*
*********************************************************************************************************
** 函数名称 :Get_uartdata()
** 函数功能 :读取串口命令
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void Get_uartdata(void)
{
static int i;
if (Serial.available() > 0) //判断串口缓冲器是否有数据装入
{
serial_data = Serial.read();//读取串口
if(rec_flag==0)
{
if(serial_data==0xff)
{
rec_flag = 1;
i = 0;
//Uartcount = 0;
//Pretime = millis();
Costtime = 0;
}
}
else
{
if(serial_data==0xff)
{
rec_flag = 0;
if(i==3)
{
Communication_Decode();
}
i = 0;
}
else
{
buffer[i]=serial_data;
i++;
}
}
}
}
/*
*********************************************************************************************************
** 函数名称 :UartTimeoutCheck()
** 函数功能 :串口超时检测
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void UartTimeoutCheck(void)
{
if(rec_flag == 1)
{
//Nowtime = millis();
Costtime++;
if(Costtime == 100000)
{
rec_flag = 0;
}
}
// Uartcount++;
} |