忙了几天终于做出来了个手机控制的智能小车,主控板采用S3C2440。此小车能实现的功能为:1.手机控制小车方向
2.手机实现视频采集。3实现拍照功能并将图片传到手机端并保持。4.实现路程计算并上传到手机端
先介绍第一个功能吧,手机控制小车方向。
其原理图如下
电机驱动模块为L298N,通信模块为USBWiFi模块。USBWiFi模块采用雷凌的rt5570.
电机驱动模块的代码如下:
static int Motor_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)
{
switch(cmd)
{
case IOCTL_MOTOR_UP://小车前进
s3c2410_gpio_setpin(S3C2410_GPB5,1);
s3c2410_gpio_setpin(S3C2410_GPB6,1);
s3c2410_gpio_setpin(S3C2410_GPB7,0);
s3c2410_gpio_setpin(S3C2410_GPB8,0);
break;
case IOCTL_MOTOR_DOWN://小车后退
s3c2410_gpio_setpin(S3C2410_GPB5,0);
s3c2410_gpio_setpin(S3C2410_GPB6,0);
s3c2410_gpio_setpin(S3C2410_GPB7,1);
s3c2410_gpio_setpin(S3C2410_GPB8,1);
break;
…………………..
default:
return -ENOTTY;
}
return 0;
}
电机驱动程序编写好后加载在2440开发板中。
先去雷凌官网下载一个相应wifi模块的驱动加载在2440中。
然后手机端和开发板之间通过SOCKET通信实现手机端发送指令到开发板上,开发板接收到指令控制小车的前进、后退、左转、右转、
开发板作为服务器其服务器端的代码如下:
sock_fd= socket(AF_INEF,SOCK_STREAM,0);
if(sock_fd==-1){
perror("creat socket error!");
return 0;
}else{printf("Success to create socket %d\n",sock_fd);}
//设置server地址结构
bzero(&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INEF;
serv_addr.sin_port=htons(EHCO_PORT);
serv_addr.sin_addr.s_addr=htons(INADDR_ANY);
bzero(&(serv_addr.sin_zero),8);
if(bind(sock_fd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))!=0){
printf("bind address faill!%d\n",errno);
close(sock_fd);
return 0;
}else{
printf("Success to bind address\n");}
//设置套接字监听
if(listen(sock_fd,MAX_CLIENT_NUM)!=0){
perror("listen faill");
close(sock_fd);
return 0;}else{printf("success to listen");}
//链接对应的套接字
clientfd=accpt(soct_fd,(struct sockaddr*)&clientAdd,&len);
//接收用户发来的数据
recv(clientfd,buff,100,0)
到此处服务器端的sock建立完毕然后等待手机客户端的链接同时接收手机端发送来的指令
持续更新。。。。。。。。。。。。