智能小车单片机课程设计报告_智能小车课程设计报告
智能小车单片机课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“智能小车课程设计报告”。
单片机课程设计
题 目: 专 业: 班 级: 组长 成员 成员 成员 成员
智能小车设计 计算机科学与技术
14级2班
姓名 学号
年 12 月 23 日
2016
打开命令行终端的快捷方式: ctr+al+t:默认的路径在家目录
ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$ linux:当前登录用户名.ubuntu:主机名
:和$之间:当前用户所处在的工作路径.windows下的工作路径如C:IntelLogs linux下的工作路径是:/.../..../ ~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls-a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件..:当前路径..:上一级路径
ls-l:以横排的方式列出文件的详细信息
total 269464(当前这个路径总计所占空间的大小,单位是K)drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop
chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名(3).cd /home/linux 进入到1目录里并创建一个2普通文件,再退回上一级,并且删除1目录 6.拷贝文件.cp(copy)路径1/源文件 路径2:把路径1下的文件拷贝到路径2下
cp 路径1/源文件 路径2/目标文件:把路径1下的文件拷贝到路径2下并且重命名位目标文件.cp(copy)-r 路径1/目录名 路径2:把路径1下的目录拷贝到路径2下 7.剪切文件
mv(move)路径1/源文件 路径2:把路径1下的文件剪切到路径2下
mv 路径1/源文件 路径2/目标文件:把路径1下的文件剪切到路径2下并且重命名位目标文件
mv 源文件 目标文件:重命名文件
mv 路径1/目录名 路径2:把路径1下的目录剪切到路径2下 8.clear:清屏 9.exit 退出终端 vi编辑器.vi 文件名:如果文件不存在则创建并打开 如果文件已存在,则直接打开
VI编辑器的三种模式
1.命令行模式:刚进入编辑器的时候,默认处在这种模式下
2.编辑模式(插入模式):输入a/i/o即可进入,按下esc键退回命令行模式,再输入冒号,即可进入底行模式.3.底行模式下:w(保存),q(退出),wq(保存并退出),q!(强制退出不保存)按下退格键,删除冒号,即可进入命令行模式.终极保存法;w!sudo tee %d回车再回车即可
命令行模式下的快捷操作: 1.整行复制:光标移动想要复制的那一行,输入yy即可,再把光标移动到你想要粘贴位置的上一行,输入p即可
2.多行复制:光标移动想要复制的那几行的 6.多行剪切:光标移动想要剪切的那几行的 再编译一个c应用程序,在程序中来调用库里实现的函数
gcc 应用程序名-l库名(注意是去掉lib和.so的库名)
文件IO linux系统下一切设备皆文件
操作文件: open():打开一个文件
read()://从文件里边读出数据 write()//向文件里写入数据 close()//关闭文件
man手册: man 2 函数名
open: 头文件
#include #include #include
1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件
参数1:文件的路径 参数2:打开方式的标志
O_RDONLY,//只读方式打开
O_WRONLY,//只写方式打开
O_RDWR.//可读可写方式打开 返回值: 打开成功:返回一个正数(文件描述符)打开失败:-1
2.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件 参数1:文件的路径 参数2:打开方式的标志
O_RDONLY,//只读方式打开
O_WRONLY,//只写方式打开
O_RDWR.//可读可写方式打开
如果文件不存在必须|O_CRAET,创建该文件 参数3:权限 数 比如:0666
返回值: 打开成功:返回一个正数(文件描述符)打开失败:-1
write: 头文件: #include
typedef int ize_t
ize_t write(int fd, const void *buf, size_t count);参数1:就是open函数的返回值,文件描述符 参数2:你想要写入的数据
参数3:你想要写入的数据的字节大小
返回值: 写入成功:返回的是写入的字节大小 写入失败:-1
strlen:实际长度 sizeof:数组的大小
arduino viod setup(){ 端口的配置;}
void loop(){ 任务的执行;
}
arduino之呼吸灯实验: int led=13;void setup(){ pinMode(led,OUTPUT);} void loop(){ digitalWrite(led,HIGH);delay(1000);digitalWrite(led,LOW);delay(1000);} 渐变灯: 暗->亮->暗
PWM波:可调脉冲宽度波.3,5,6,9,10,11这几个端口可以输出pwm波 analogWrite(pin, value)//输出pwm波 pin:管脚号:3,5,6,9,10,11中的任意一个 value:0~255中的任何一个数: 0:占空比为0% 255:占空比位100%
远程视频监控步骤: 1.将jpegsrc.v8b.tar.gz(图片库)和mjpg-streamer-code-182.tar.gz(视频查看软件)拷贝到ubuntu的家目录
2.解压缩
tar xvf jpegsrc.v8b.tar.gz 3.cd jpeg-8b 4../configure //创建Makefile文件 5.make 6.sudo make install //安装
程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/lib
cd /usr/local/include sudo cp * /usr/include cd /usr/local/lib
sudo cp libjpeg* /lib
7.切换到家目录:cd 移植查看视频的软件:
tar xvf mjpg-streamer-code-182.tar.gz cd mjpg-streamer-code-182 cd mjpg-streamer make clean //清除已经编译过的程序
make
运行查看视频的软件:sudo./start.sh 打开火狐浏览器
在地址栏输入127.0.0.1:8080 若发现视频绿屏
先强制结束程序运行:ctl+c.解决方法:
修改start.sh
将 要对uboot环境信息进行设置
首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty 2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none 3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.4.输入命令print可以显示uboot的打印信息
确保: ipaddr=192.168.1.100//代表开发板的ip地址 serverip=192.168.1.200//代表ubuntu的IP地址 bootargs=root=nfs nfsroot=192.168.1.200:/source/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200//
打开虚拟机: 1.进入到/tftpboot目录下.把zImage拖到虚拟机,前加cp ,后加./ 使用ls查看一下是否出现zImage 2.cd /source 把rootfs这个压缩包拖到虚拟机,前加cp ,后加./ 使用ls查看一下是否出现rootfs.tgz 3.解压命令: sudo tar-xvf rootfs.tgz 要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway 192.168.1.200 255.255.255.0 192.168.1.1 点击保存.关闭窗口.再打开图标选中wired connection1 再看ip是否改回来了.5.网线连接开发板和电脑
在putty界面输入:ping 192.168.1.200 如果host 192.168.1.200 is alive,这是挂载系统很好的征兆.not alive的话需要关闭电脑的无线网
输入boot或者重启开发板不要再按下任何键了,如果出现
####很快就要挂载成功了 如果出现TTTTTTTTTTTTTT 在ubuntu输入命令:sudo service tftpd-hpa restart 其中sudo的作用是暂时将用户的权限提升到超级用户(root)的权限.如果出现Please pre Enter to activate this console.代表系统挂载成功.通过gcc编译生成的程序不能在开发板上运行.通过命令file a.out看到文件的格式为intel 30386,说明这是X86格式的程序,只能PC上运行
而不能在arm板上运行,解决措施,使用交叉编译器来编译.交叉编译器的配置: 将arm-cortex_a8-linux-gnueabi.tar.bz2拖到ubuntu的家目录
解压命令tar-xvf arm-cor+tab键自动补齐,用ls查看是否生成arm-cortex_a8个目录.配置交叉编译器: sudo vi /etc/bash.bashrc文件
在最后一行添加export PATH=$PATH:/home/linux/arm-cortex_a8/bin 保存并退出文件
保存完成后重启文件:source /etc/bash.bashrc
重启成功后输入arm-cor+tab键会自动补齐成arm-cortex_a8-linux-gnueabi-代表交叉编译器配置成功.利用交叉编译器编译程序: arm-cortex_a8-linux-gnueabi-gcc 文件名,并将生成的可执行程序拷贝到/source/rootfs下
然后再到putty上执行./a.out就可以在开发板上运行程序了.
相关代码
Che.c
#include “cgic.h” #include #include #include #include #include
void zigbee_serial_init(int fd){ struct termios options;
tcgetattr(fd, &options);options.c_cflag |=(CLOCAL | CREAD);options.c_cflag &= ~CSIZE;options.c_cflag &= ~CRTSCTS;options.c_cflag |= CS8;options.c_cflag &= ~CSTOPB;options.c_iflag |= IGNPAR;options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);
//options.c_cc[VTIME] = 2;options.c_cc[VMIN] = 12;
options.c_oflag = 0;options.c_lflag = 0;
cfsetispeed(&options, B115200);cfsetospeed(&options, B115200);
tcsetattr(fd,TCSANOW,&options);
} int cgiMain(){ int fd;char a='1';cgiHeaderContentType(“text/htmlnn”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);
fprintf(cgiOut,“n”);fprintf(cgiOut,“SMART CARn”);fprintf(cgiOut,“n”);fprintf(cgiOut,“”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“ n”);fprintf(cgiOut,“”);fprintf(cgiOut,“ n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);fprintf(cgiOut,“n”);
fd=open(“/dev/ttyUSB0”,O_RDWR);if(-1==fd)
fprintf(cgiOut,“open usart failedn”);
}
zigbee_serial_init(fd);if(cgiFormSucce==cgiFormSubmitClicked(“up”)){ a='2';write(fd,&a,1);} if(cgiFormSucce==cgiFormSubmitClicked(“down”)){ a='1';write(fd,&a,1);} if(cgiFormSucce==cgiFormSubmitClicked(“right”)){ a='4';write(fd,&a,1);} if(cgiFormSucce==cgiFormSubmitClicked(“left”)){ a='3';write(fd,&a,1);} if(cgiFormSucce==cgiFormSubmitClicked(“stop”)){ a='0';write(fd,&a,1);} fprintf(cgiOut,"