智能小车单片机课程设计报告
单片机小汽车课程设计

单片机小汽车课程设计一、课程目标知识目标:1. 让学生了解单片机的基本原理,掌握其编程方法;2. 使学生掌握单片机控制小汽车的基本电路连接和功能实现;3. 帮助学生理解传感器在小汽车控制中的应用。
技能目标:1. 培养学生运用单片机进行创新设计的能力;2. 提高学生动手实践能力,能够独立完成小汽车控制电路的搭建和程序编写;3. 培养学生团队协作解决问题的能力。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,培养其探究精神;2. 培养学生面对问题时的耐心、细心和毅力,增强克服困难的信心;3. 引导学生关注科技发展,认识单片机在现实生活中的应用,提高社会责任感。
课程性质:本课程为实践性较强的课程,结合单片机原理和电子制作技术,以项目式教学引导学生动手实践。
学生特点:学生具备一定的电子基础知识,对单片机有一定了解,喜欢动手实践,对创新设计具有较高兴趣。
教学要求:教师需结合学生特点,采用启发式教学,引导学生主动探索,注重培养学生的动手实践能力和团队协作精神。
在教学过程中,关注学生个体差异,给予个性化指导,确保每位学生都能达到课程目标。
通过课程学习,使学生能够将所学知识应用于实际项目中,提高其综合素养。
二、教学内容1. 单片机原理及编程基础:复习单片机的基本结构、工作原理,学习编程语言及编程技巧,对应教材第1章至第3章内容。
- 单片机的基本结构及功能;- 编程语言(C语言)基础;- 单片机程序编写及调试方法。
2. 小汽车控制电路设计:学习传感器、驱动电路及电源管理等部分的设计与实现,对应教材第4章内容。
- 常用传感器原理及应用;- 驱动电路设计;- 电源管理及保护电路设计。
3. 实践操作:动手搭建小汽车控制电路,编写程序实现小汽车的基本功能,如前进、后退、转向等,对应教材第5章内容。
- 电路搭建及调试;- 程序编写及优化;- 小汽车功能实现。
4. 项目拓展:引导学生进行创新设计,对小汽车功能进行拓展,如添加避障、循迹等功能,提高学生综合运用知识的能力。
基于单片机智能遥控小车的设计

基于单片机智能遥控小车的设计引言:一、硬件设计:智能遥控小车的硬件设计包括机械结构和电子模块两个方面。
1.机械结构设计:机械结构设计为小车提供了良好的稳定性和移动能力。
首先,选取适合的底盘结构,确保小车的稳固性和均衡性。
其次,选择合适的电机和轮子,以实现小车的前进、后退和转向功能。
最后,在机械结构中添加传感器支架和摄像头支架,方便后续的传感器和摄像头模块的安装。
2.电子模块设计:电子模块设计包括主控模块、通信模块和电源模块三个部分。
(1)主控模块:主控模块是整个智能遥控小车的核心,它负责接收遥控命令、控制电机的转动并实时处理传感器数据。
选择一款性能较强的单片机作为主控芯片,如STM32系列,以满足小车处理复杂任务的需求。
(2)通信模块:(3)电源模块:电源模块为智能遥控小车提供稳定的电源,要保证小车的正常工作需要满足一定的电流和电压要求。
选取合适的锂电池组或者干电池组作为电源,通过适当的电压调节和保护电路,保证电源的稳定性和安全性。
二、软件设计:智能遥控小车的软件设计包括底层驱动程序的编写和上层应用程序的开发。
1.底层驱动程序:底层驱动程序主要用于控制电机和监测传感器数据。
通过编写合适的电机驱动程序,实现小车的前进、后退和转向功能。
同时,编写传感器驱动程序获取传感器的数据,如超声波测距、红外线检测和摄像头采集等,为上层应用程序提供数据支持。
2.上层应用程序:三、功能拓展:智能遥控小车的功能可以通过添加各种传感器和模块进行拓展,如以下几个功能:1.环境检测功能:通过添加温湿度传感器、二氧化碳传感器等,实时监测环境数据,可以应用于室内空气质量、温湿度调节等应用。
2.避障功能:通过添加超声波传感器、红外线传感器等,在小车前方进行信号检测,实现小车的避障功能。
3.图像识别功能:通过添加摄像头模块,对图像进行处理和分析,实现小车的图像识别功能,如人脸识别、物体识别等。
结论:基于单片机的智能遥控小车设计通过合理的硬件结构和软件设计,实现了远程遥控和实时传输数据的功能。
遥控智能小车单片机课设

课程设计任务书摘要为了达到设计的要求,我们使用了MSP430F149为车上主控制芯片,STC12C5A为遥控控制芯片。
无线传输使用了315M无线传输模块,该模块采用了PT2262/PT2272进行编解码,拥有6位数据端管脚;遥控采用了摇杆电位器,将电位器滑动端的电压与参考电压比较,得到摇杆的位置,通过单片机编码,传输给小车上的单片机,小车上的单片机通过解码来控制小车的行驶及各种动作;电机驱动使用了L298N,通过单片机输出的PWM波来控制小车行驶的速度、小车行驶的方向;小车系统使用12V可充电锂电池进行供电,遥控使用9V 的碳性电池进行供电,传输距离可达50m,抗干扰能力强,系统可靠稳定。
目录1、方案设计与论证 (5)1.1系统方案 (5)1.2方案论证 (5)2、原理分析与硬件电路图 (8)2.1电源转换部分 (8)2.2电机驱动部分 (8)2.3无线通信部分 (9)2.4遥控部分 (11)3、软件设计 (12)4、系统测试与误差分析 (13)5、参考文献 (14)6、附件 (14)1、方案设计与论证1.2方案论证1)MCU选择方案一控制部分的核心采用传统的数字逻辑芯片来实现。
系统共有启动、加速前进、后退、限速前进及后退等几个状态。
且各个状态保持或转移的条件依赖与外部传感器(光传感器、霍尔传感器、超声传感器……)送来的信号。
由于外部传感器器较多,需要较多的传感器接口电路。
系统的逻辑状态以及相互更是复杂,用纯粹的数字电路或者小规模的可编程逻辑电路实现该系统有一定的困难,且一般的可编程逻辑器件体积较其他的单片机都较大,且成本较高。
方案二该小车可看成一个自动控制系统,这样的系统用单片机来实现比较合适。
MSP430为超低功耗的单片机,对与整个系统的长时间运行十分有利;同时MSPS430的I\O丰富可以进行很多的扩展,同时它可以输出PWM波,对于电机的控制极其方便。
显然方案二具有较好的可选择性,实际系统采用的MSPS30为主控制器。
基于单片机的智能小车设计

基于单片机的智能小车设计基于单片机的智能小车设计一、引言本文档旨在介绍一个基于单片机的智能小车设计。
智能小车是一种能够自主感知环境、做出决策并执行动作的。
本设计将通过单片机控制小车的移动与感知功能,使其能够自主避障、跟随线路、遥控操作等。
二、需求分析2.1 功能需求●小车应能够通过避障传感器、红外线传感器等感知器件检测周围环境,自主避开障碍物。
●小车应能够根据预设的线路进行自主导航,并能跟随或保持在线路上运行。
●小车应支持遥控操作,用户可以通过遥控器控制小车的运动。
●小车应能够通过摄像头等视觉传感器获取实时图像并进行图像处理。
2.2 硬件需求●单片机控制模块。
●电机驱动模块。
●避障传感器模块。
●红外线传感器模块。
●摄像头模块。
●遥控器模块。
2.3 软件需求●单片机控制程序。
●图像处理算法。
●遥控器控制程序。
三、系统设计3.1 硬件设计3.1.1 单片机控制模块●选择合适的单片机控制模块,如Arduino、Raspberry Pi等。
●连接电机驱动模块、避障传感器模块、红外线传感器模块、摄像头模块等。
3.1.2 电机驱动模块●选择适合的电机驱动模块,如直流电机驱动器、步进电机驱动器等。
●连接电机驱动器与电机,控制小车的运动。
3.1.3 避障传感器模块●选择合适的避障传感器模块,如超声波传感器、红外线传感器等。
●连接避障传感器与单片机,实现避障功能。
3.1.4 红外线传感器模块●选择合适的红外线传感器模块,用于检测线路。
●连接红外线传感器与单片机,实现跟随线路功能。
3.1.5 摄像头模块●选择合适的摄像头模块,如USB摄像头、树莓派摄像头等。
●连接摄像头与单片机,获取实时图像。
3.1.6 遥控器模块●选择合适的遥控器模块,如无线遥控器等。
●连接遥控器与单片机,实现遥控操作功能。
3.2 软件设计3.2.1 单片机控制程序●编写控制程序,根据传感器的信号进行相应的处理,并控制电机驱动模块控制小车的运动。
智能小车单片机课程设计报告

单片机课程设计题目: 智能小车设计专业: 计算机科学与技术班级: 14级2班姓名学号组长成员成员成员成员2016 年 12 月 23 日打开命令行终端的快捷方式:ctr+al+t:默认的路径在家目录ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$linux:当前登录用户名.ubuntu:主机名:和$之间:当前用户所处在的工作路径.windows下的工作路径如C:\Intel\Logslinux下的工作路径是:/.../..../~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径..:上一级路径ls -l:以横排的方式列出文件的详细信息total 269464(当前这个路径总计所占空间的大小,单位是K)drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop第一个位置:代表的是文件的类型.linux系统下的文件类型有以下几种.b:块设备文件c:字符设备文件d:directory,目录-:普通文件.l:连接文件.s:套接字文件.p:管道文件.rwxr-xr-x:权限r:读权限 -:没有相对应的权限w:写权限x:可执行权限修改权限:chmod u-或者+r/w/x 文件名chmod g-或者+r/w/x 文件名chmod o-或者+r/w/x 文件名第一组:用户权限第二组:用户组的权限第三组:其他用户的权限.chmod 三个数(权限) 文件名首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数rwxr-x-wx1111010117 5 3chmod 753 文件名rwx--xr-x第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者).第四个位置:用户组的名字(前边的用户所处在的用户组的名字).第五个位置:对应文件所占的空间大小(单位为b)第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间)最后一个位置:文件名操作文件:1.创建一个普通文件:touch 文件名2.删除一个文件:rm(remove) 文件名3.新建一个目录:mkdir(make directory) 目录名递归创建目录:mkdir -p 目录1/目录2/目录34.删除一个目录:rmdir 目录名.//仅删除一个空目录rm -rf 目录名//删除一个非空目录5.切换目录(change directory):cd 路径linux下的路径分两种相对路径:以.(当前路径)为起点.绝对路径:以/(根目录)为起点,用相对路径的方式进入Music:cd ./Music用绝对路径的方式进入Desktop:cd /home/linux/Desktop返回上一级:cd ..返回加家目录的三种方式(1).cd(2).cd ~(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.多行复制:光标移动想要复制的那几行的第一行,输入数字yy即可,再把光标移动到想要粘贴的那几行的第一行,输入p即可,3.整行删除:光标移动想要删除的那一行,输入dd即可,4.多行删除:光标移动想要删除的那几行的第一行,输入数字dd即可,5.整行剪切:光标移动想要剪切的那一行,输入cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可,6.多行剪切:光标移动想要剪切的那几行的第一行,输入数字cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可.7.撤销上一步:u底行模式下的快捷操作1,对第a行到第b行进行复制:航标a,行标by,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可2,对第a行到第b行进行删除:航标a,行标bd,enter回车3.对第a行到第b行进行剪切:航标a,行标bd,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可编辑一个最简单的hello world程序,保存并退出gcc编译器.gcc 文件名:编译成功的话,会在当前目录生成一个a.out可执行程序执行程序: ./a.out当然也可以指定可执行程序的名字,命令如下:gcc 文件名 -o 可执行程序名编译步骤:1.预处理:gcc -i test.c -o test.i(宏定义的替换,头文件包含)2.汇编:gcc -s test.i -o test.s(c代码转换成汇编代码)3.编译:gcc -c test.s -o test.o(把汇编转换成二进制的目标程序)5.连接:gcc test.o -o test(连接库函数)linux系统的库文件:静态库:.a结尾动态库:.so结尾自己制作一个动态库.首先写一个简单的c功能函数编译成动态库:gcc -fPIC -shared 文件名 -o lib库文件名.so在linux系统下.程序运行时默认搜素库的路径是/lib把库拷贝到/lib下:cp lib库文件名.so /lib 错误提示":permission denied(权限不足)方法:sudo cp lib库文件名.so /lib 提示让你输入密码1:sudo暂时将普通用户的权限提高到root用户权限再编译一个c应用程序,在程序中来调用库里实现的函数gcc 应用程序名 -l库名(注意是去掉lib和.so的库名)文件IOlinux系统下一切设备皆文件操作文件:open():打开一个文件read()://从文件里边读出数据write()//向文件里写入数据close()//关闭文件man手册:man 2 函数名open:头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开返回值:打开成功:返回一个正数(文件描述符)打开失败:-12.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开如果文件不存在必须|O_CRAET,创建该文件参数3:权限数比如:0666返回值:打开成功:返回一个正数(文件描述符)打开失败:-1write:头文件: #include <unistd.h>typedef int ssize_tssize_t write(int fd, const void *buf, size_t count); 参数1:就是open函数的返回值,文件描述符参数2:你想要写入的数据参数3:你想要写入的数据的字节大小返回值:写入成功:返回的是写入的字节大小写入失败:-1strlen:实际长度sizeof:数组的大小arduinoviod 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.gz3. cd jpeg-8b4. ./configure //创建Makefile文件5. make6. sudo make install //安装程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/libcd /usr/local/includesudo cp * /usr/includecd /usr/local/libsudo cp libjpeg* /lib7.切换到家目录:cd移植查看视频的软件:tar xvf mjpg-streamer-code-182.tar.gzcd mjpg-streamer-code-182cd mjpg-streamermake clean //清除已经编译过的程序make运行查看视频的软件:sudo ./start.sh打开火狐浏览器在地址栏输入127.0.0.1:8080若发现视频绿屏先强制结束程序运行:ctl+c.解决方法:修改start.sh将第30行的 -y 删除看看是否虚拟机识别到摄像头:ls /dev/video0地址栏输入:127.0.0.1:8080/?action=stream 查看视频信息 127.0.0.1:8080/?action=snapshot 截屏图片,点击save image as可以保存图片A8开发板:cpu:三星s5pc100内存:256Mflash:256Mwindows运行之前会有一个系统的引导代码叫BIOS与windows类似,linux启动之前也有这样的一段代码叫做bootloader bootloader有很多种,我们选用其中的一种叫做uboot.linux系统的启动步骤1.运行uboot(初始化硬件,引导系统内核的加载)2.内核的运行(zImage,linux的内核).3.识别文件系统(类似于C盘,D盘,E盘).是rootfs.tgz系统=内核+文件系统.挂载系统.要对uboot环境信息进行设置首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.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查看一下是否出现zImage2.cd /source把rootfs这个压缩包拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现rootfs.tgz3.解压命令:sudo tar -xvf rootfs.tgz要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway192.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 press 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 <termios.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>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/html\n\n");fprintf(cgiOut,"<html>\n");fprintf(cgiOut,"<head>\n");fprintf(cgiOut,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");fprintf(cgiOut,"<title>\n");fprintf(cgiOut,"SMART CAR\n");fprintf(cgiOut,"</title>\n");fprintf(cgiOut,"<meta http-equiv=\"refresh\" content=\"0;url=../index.html\">");fprintf(cgiOut,"</head>\n");fprintf(cgiOut,"<body>\n");fprintf(cgiOut,"<div align=\"center\">\n");fprintf(cgiOut,"<br /><br /><br /><br />\n");fprintf(cgiOut,"<form action=\"./cgi-bin/keyi.cgi\" method=\"post\" >\n");fprintf(cgiOut,"<input type=\"submit\" name=\"up\" value=\"前进\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"left\" value=\"左转\" />\n");fprintf(cgiOut," \n");fprintf(cgiOut,"<input type=\"submit\" name=\"stop\" value=\"停止\" />");fprintf(cgiOut," \n");fprintf(cgiOut,"<input type=\"submit\" name=\"right\" value=\"右转\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"down\" value=\"后退\" />\n");fprintf(cgiOut,"</form>\n");fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd)zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked("up")){a='2';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("down")) {a='1';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("right")) {a='4';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("left")) {a='3';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("stop")) {a='0';write(fd,&a,1);}fprintf(cgiOut,"</body>\n");fprintf(cgiOut,"</html>\n");close(fd);return 0;}Test.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, const char *argv[]) {int fd;char buff[20]={0};fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd){printf("open failed\n");return -1;}while(1){read(fd,buff,sizeof(buff));}return 0;}单片机代码void setup(){pinMode(2,OUTPUT);pinMode(4,OUTPUT);pinMode(6,OUTPUT);pinMode(8,OUTPUT);Serial.begin(115200);}void loop()char c;c=Serial.read();if(c=='1'){digitalWrite(2,LOW);digitalWrite(4,HIGH);digitalWrite(6,LOW );digitalWrite(8,HIGH); Serial.println("qianjin"); }if(c=='2'){digitalWrite(2,HIGH);digitalWrite(4,LOW);digitalWrite(6,HIGH);digitalWrite(8,LOW); Serial.println("daotui"); }if(c=='3'){digitalWrite(2,LOW);digitalWrite(4,HIGH);digitalWrite(6,LOW);digitalWrite(8,LOW); Serial.println("youzuan"); }if(c=='4'){digitalWrite(2,LOW);digitalWrite(4,LOW);digitalWrite(6,LOW);digitalWrite(8,HIGH); Serial.println("zuozuan"); }if(c=='0'){digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("0"); }}。
单片机智能小车课程设计

单片机智能小车课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其在智能小车控制中的应用。
2. 学习并掌握智能小车的基本电路连接和编程方法,能够实现小车的基本运动控制。
3. 了解传感器的工作原理,学会使用传感器对智能小车进行环境感知和路径规划。
技能目标:1. 培养学生动手操作能力,能够独立完成智能小车的组装和调试。
2. 培养学生编程思维,能够运用所学知识解决实际问题,实现智能小车的功能拓展。
3. 提高学生团队协作能力,学会在项目中进行沟通与分工合作。
情感态度价值观目标:1. 培养学生对单片机及智能硬件的兴趣,激发创新意识,提高学习积极性。
2. 培养学生勇于尝试、克服困难的精神,增强自信心。
3. 培养学生关注社会热点问题,了解智能技术在现实生活中的应用,提高社会责任感。
本课程针对初中年级学生,结合单片机及智能小车相关知识,注重实践操作和创新能力培养。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
课程目标分解为具体学习成果,便于后续教学设计和评估,以提高课程的实用性和针对性。
二、教学内容1. 单片机原理:介绍单片机的组成、工作原理,重点讲解内部寄存器、I/O 口、定时器等基本功能。
相关教材章节:第三章单片机原理及其应用。
2. 智能小车电路连接:讲解智能小车的基本电路组成,包括电机驱动、电源管理、传感器接口等。
相关教材章节:第四章智能小车电路设计与实践。
3. 编程基础:学习单片机编程语言(如C语言),掌握基本编程语法和逻辑控制,实现小车运动控制。
相关教材章节:第五章单片机编程基础。
4. 传感器应用:介绍常用传感器(如红外、超声波、光电等)的工作原理,学会使用传感器进行环境感知和路径规划。
相关教材章节:第六章传感器及其应用。
5. 智能小车组装与调试:指导学生进行智能小车的组装,学会使用调试工具,如示波器、逻辑分析仪等。
相关教材章节:第七章智能小车组装与调试。
6. 创新实践:鼓励学生进行功能拓展,如增加避障、循迹、远程控制等功能。
基于单片机的智能玩具小车的设计

基于单片机的智能玩具小车的设计基于单片机的智能玩具小车的设计1. 引言随着科技的进步和人们对智能化产品的需求增加,智能玩具小车成为了孩子们喜爱的玩具之一。
本文介绍了一种基于单片机的智能玩具小车的设计方案,旨在提供给孩子们一种有趣且具有教育意义的玩具。
2. 系统组成该智能玩具小车由四个主要组成部分构成:单片机控制模块、传感器模块、执行模块和通信模块。
2.1 单片机控制模块单片机控制模块采用高性能的单片机芯片,如STC89C52,作为主控制器。
该芯片具有丰富的IO接口和强大的计算能力,能够准确控制玩具小车的各个功能。
2.2 传感器模块传感器模块采用多种传感器,如红外感应传感器、超声波传感器和灰度传感器等。
红外感应传感器用于检测前方障碍物,超声波传感器用于测量距离,灰度传感器用于检测地面颜色等。
2.3 执行模块执行模块包括直流电机和舵机等。
直流电机用于驱动车轮,控制小车前进、后退和转向;舵机用于控制小车的转向角度。
2.4 通信模块通信模块采用无线通信模块,如蓝牙模块或WIFI模块,用于与智能手机或电脑等设备进行通信。
通过手机上的APP或电脑上的软件,用户可以实现对智能玩具小车的远程控制和交互。
3. 系统功能设计3.1 遥控功能智能玩具小车可以通过手机APP或电脑软件进行远程遥控。
用户可以通过手指在屏幕上滑动或按钮操作来控制小车的方向和速度。
3.2 避障功能利用红外感应传感器和超声波传感器,智能玩具小车可以实现自动避障功能。
当传感器探测到前方有障碍物时,小车会自动停下或转向避开。
3.3 跟随功能通过将传感器模块安装在小车底部,可以实现小车对地面颜色的感知。
小车可以自动跟随一条黑线或白线行驶,增加趣味性和游戏性。
3.4 音乐播放功能智能玩具小车可以配备一个音乐模块,能够播放各种儿童歌曲和故事,使玩车过程更加有趣和生动。
4. 系统实现在搭建智能玩具小车的硬件平台后,需要进行相应的软件开发。
通过编写相应的程序,定义不同的传感器输入信号和执行器控制信号,实现小车的各项功能。
基于单片机的智能小车的设计

基于单片机的智能小车的设计智能小车在当今社会中得到越来越广泛的应用,它不仅可以为人们的生活带来方便,还能在工业生产和科研领域发挥关键作用。
而基于单片机的智能小车设计是其中的一个重要方面,它通过利用单片机的高度集成和强大功能,实现智能小车的自主控制和感知任务。
本文将深入探讨基于单片机的智能小车设计的关键技术和发展趋势,为读者提供一些有益的参考和启发。
智能小车的设计中,传感器是至关重要的一环。
而对于基于单片机的智能小车来说,选择合适的传感器和设计有效的传感器数据采集方案显得尤为重要。
在传感器选择方面,常用的传感器有红外传感器、超声波传感器、光电传感器等,它们可以实现对障碍物的检测和环境信息的感知。
在传感器数据采集方案设计上,需要考虑到传感器数据的采集频率、传感器数据的处理方式以及传感器数据与单片机的接口方式等。
通过合理设计传感器的选择和数据采集方案,可以有效提高智能小车的感知能力和控制精度。
除了传感器外,基于单片机的智能小车设计还需要考虑到智能控制算法的设计。
智能控制算法是实现智能小车自主行驶和避障的核心,它可以通过对传感器数据的处理和分析,实现对小车行驶方向和速度的实时控制。
常用的智能控制算法包括PID算法、模糊控制算法和神经网络控制算法等,它们分别适用于不同的应用场景和控制需求。
在智能控制算法的选择和设计中,需要考虑到算法的实时性、稳定性和可调节性,以实现对智能小车的精确控制和智能决策。
在设计基于单片机的智能小车时,硬件设计也是一个不可忽视的方面。
合理的硬件设计可以有效提高智能小车的性能和稳定性,为控制算法的实现提供良好的硬件支持。
常用的硬件设计包括电机驱动电路设计、电源管理电路设计和通信接口电路设计等。
其中,电机驱动电路设计是最为关键的一环,它可以实现对小车电机的精确控制和驱动,保证小车的行驶稳定性和速度调节精度。
电源管理电路设计则是保证小车电路的稳定供电和功耗管理,避免因电路供电不稳定导致小车控制系统工作异常。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目: 智能小车设计打开命令行终端的快捷方式:ctr+al+t:默认的路径在家目录ctr+shift+n:默认的路径为上一次终端所处在的路径.linux@ubuntu:~$linux:当前登录用户名.ubuntu:主机名:和$之间:当前用户所处在的工作路径.windows下的工作路径如C:\Intel\Logslinux下的工作路径是:/.../..../~:代表的是/home/linux这个路径.(家目录).ls(list):列出当前路径下的文件名和目录名.ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径..:上一级路径ls -l:以横排的方式列出文件的详细信息total 269464(当前这个路径总计所占空间的大小,单位是K) drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop 第一个位置:代表的是文件的类型.linux系统下的文件类型有以下几种.b:块设备文件c:字符设备文件d:directory,目录-:普通文件.l:连接文件.s:套接字文件.p:管道文件.rwxr-xr-x:权限r:读权限-:没有相对应的权限w:写权限x:可执行权限修改权限:chmod u-或者+r/w/x 文件名chmod g-或者+r/w/x 文件名chmod o-或者+r/w/x 文件名第一组:用户权限第二组:用户组的权限第三组:其他用户的权限.chmod 三个数(权限) 文件名首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数rwxr-x-wx1111010117 5 3chmod 753 文件名rwx--xr-x第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者).第四个位置:用户组的名字(前边的用户所处在的用户组的名字).第五个位置:对应文件所占的空间大小(单位为b)第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间)最后一个位置:文件名操作文件:1.创建一个普通文件:touch 文件名2.删除一个文件:rm(remove) 文件名3.新建一个目录:mkdir(make directory) 目录名递归创建目录:mkdir -p 目录1/目录2/目录34.删除一个目录:rmdir 目录名.//仅删除一个空目录rm -rf 目录名//删除一个非空目录5.切换目录(change directory):cd 路径linux下的路径分两种相对路径:以.(当前路径)为起点.绝对路径:以/(根目录)为起点,用相对路径的方式进入Music:cd ./Music用绝对路径的方式进入Desktop:cd /home/linux/Desktop返回上一级:cd ..返回加家目录的三种方式(1).cd(2).cd ~(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.多行复制:光标移动想要复制的那几行的第一行,输入数字yy即可,再把光标移动到想要粘贴的那几行的第一行,输入p即可,3.整行删除:光标移动想要删除的那一行,输入dd即可,4.多行删除:光标移动想要删除的那几行的第一行,输入数字dd即可,5.整行剪切:光标移动想要剪切的那一行,输入cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可,6.多行剪切:光标移动想要剪切的那几行的第一行,输入数字cc即可,这个时候进入到了编辑模式,按下esc键退回到命令行模式,再把光标移动到想要粘贴位置的上一行,输入p即可.7.撤销上一步:u底行模式下的快捷操作1,对第a行到第b行进行复制:航标a,行标by,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可2,对第a行到第b行进行删除:航标a,行标bd,enter回车3.对第a行到第b行进行剪切:航标a,行标bd,enter回车,再把光标移动到你想要粘贴位置的上一行,输入p即可编辑一个最简单的hello world程序,保存并退出gcc编译器.gcc 文件名:编译成功的话,会在当前目录生成一个a.out可执行程序执行程序: ./a.out当然也可以指定可执行程序的名字,命令如下:gcc 文件名-o 可执行程序名编译步骤:1.预处理:gcc -i test.c -o test.i(宏定义的替换,头文件包含)2.汇编:gcc -s test.i -o test.s(c代码转换成汇编代码)3.编译:gcc -c test.s -o test.o(把汇编转换成二进制的目标程序)5.连接:gcc test.o -o test(连接库函数)linux系统的库文件:静态库:.a结尾动态库:.so结尾自己制作一个动态库.首先写一个简单的c功能函数编译成动态库:gcc -fPIC -shared 文件名-o lib库文件名.so在linux系统下.程序运行时默认搜素库的路径是/lib把库拷贝到/lib下:cp lib库文件名.so /lib 错误提示":permission denied(权限不足)方法:sudo cp lib库文件名.so /lib 提示让你输入密码1:sudo暂时将普通用户的权限提高到root用户权限再编译一个c应用程序,在程序中来调用库里实现的函数gcc 应用程序名-l库名(注意是去掉lib和.so的库名)文件IOlinux系统下一切设备皆文件操作文件:open():打开一个文件read()://从文件里边读出数据write()//向文件里写入数据close()//关闭文件man手册:man 2 函数名open:头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>1.int open(const char *pathname, int flags);//仅限于打开一个已存在文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开返回值:打开成功:返回一个正数(文件描述符)打开失败:-12.int open(const char *pathname, int flags, mode_t mode);//可以打开一个不存在的文件参数1:文件的路径参数2:打开方式的标志O_RDONLY,//只读方式打开O_WRONLY,//只写方式打开O_RDWR.//可读可写方式打开如果文件不存在必须|O_CRAET,创建该文件参数3:权限数比如:0666返回值:打开成功:返回一个正数(文件描述符)打开失败:-1write:头文件: #include <unistd.h>typedef int ssize_tssize_t write(int fd, const void *buf, size_t count); 参数1:就是open函数的返回值,文件描述符参数2:你想要写入的数据参数3:你想要写入的数据的字节大小返回值:写入成功:返回的是写入的字节大小写入失败:-1strlen:实际长度sizeof:数组的大小arduinoviod 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.gz3. cd jpeg-8b4. ./configure //创建Makefile文件5. make6. sudo make install //安装程序运行时,默认寻找的头文件的路径在/usr/include,库文件的路径/libcd /usr/local/includesudo cp * /usr/includecd /usr/local/libsudo cp libjpeg* /lib7.切换到家目录:cd移植查看视频的软件:tar xvf mjpg-streamer-code-182.tar.gzcd mjpg-streamer-code-182cd mjpg-streamermake clean //清除已经编译过的程序make运行查看视频的软件:sudo ./start.sh打开火狐浏览器在地址栏输入127.0.0.1:8080若发现视频绿屏先强制结束程序运行:ctl+c.解决方法:修改start.sh将第30行的-y 删除看看是否虚拟机识别到摄像头:ls /dev/video0地址栏输入:127.0.0.1:8080/?action=stream 查看视频信息127.0.0.1:8080/?action=snapshot 截屏图片,点击save image as可以保存图片A8开发板:cpu:三星s5pc100内存:256Mflash:256Mwindows运行之前会有一个系统的引导代码叫BIOS与windows类似,linux启动之前也有这样的一段代码叫做bootloader bootloader有很多种,我们选用其中的一种叫做uboot.linux系统的启动步骤1.运行uboot(初始化硬件,引导系统内核的加载)2.内核的运行(zImage,linux的内核).3.识别文件系统(类似于C盘,D盘,E盘).是rootfs.tgz系统=内核+文件系统.挂载系统.要对uboot环境信息进行设置首先把拨码开关拨到0000位置.选择uboot的启动方式.uboot从外存启动.1.找到自己的COM端口号;打开putty2.选中Serial,把波特率改为115200,端口号改为自己的端口号,Flow contrlo选择none3.开启电源,会出现一个倒计时,在倒计时完成之前,随便敲一个键盘.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查看一下是否出现zImage2.cd /source把rootfs这个压缩包拖到虚拟机,前加cp ,后加 ./使用ls查看一下是否出现rootfs.tgz3.解压命令:sudo tar -xvf rootfs.tgz要让你输入密码;输入1回车即可,密码是不可见的.再用ls查看是否多了一个蓝色的文件rootfs.4.修改ubuntu的ip地址.找到wiffi图标,点击选中edit connection->IPV4 seting->manual->add ip netmask gateway192.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 press 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 <termios.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>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/html\n\n");fprintf(cgiOut,"<html>\n");fprintf(cgiOut,"<head>\n");fprintf(cgiOut,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n");fprintf(cgiOut,"<title>\n");fprintf(cgiOut,"SMART CAR\n");fprintf(cgiOut,"</title>\n");fprintf(cgiOut,"<meta http-equiv=\"refresh\" content=\"0;url=../index.html\">");fprintf(cgiOut,"</head>\n");fprintf(cgiOut,"<body>\n");fprintf(cgiOut,"<div align=\"center\">\n");fprintf(cgiOut,"<br /><br /><br /><br />\n");fprintf(cgiOut,"<form action=\"./cgi-bin/keyi.cgi\" method=\"post\" >\n");fprintf(cgiOut,"<input type=\"submit\" name=\"up\" value=\"前进\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"left\" value=\"左转\" />\n");fprintf(cgiOut," \n");fprintf(cgiOut,"<input type=\"submit\" name=\"stop\" value=\"停止\" />");fprintf(cgiOut," \n");fprintf(cgiOut,"<input type=\"submit\" name=\"right\" value=\"右转\" /><br /><br />\n");fprintf(cgiOut,"<input type=\"submit\" name=\"down\" value=\"后退\" />\n");fprintf(cgiOut,"</form>\n");fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd)fprintf(cgiOut,"open usart failed\n");zigbee_serial_init(fd);if(cgiFormSuccess==cgiFormSubmitClicked("up")){a='2';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("down")) {a='1';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("right")) {a='4';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("left")) {a='3';write(fd,&a,1);}if(cgiFormSuccess==cgiFormSubmitClicked("stop")) {a='0';write(fd,&a,1);}fprintf(cgiOut,"</body>\n");fprintf(cgiOut,"</html>\n");close(fd);return 0;}Test.c#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main(int argc, const char *argv[]) {int fd;char buff[20]={0};fd=open("/dev/ttyUSB0",O_RDWR);if(-1==fd){printf("open failed\n");return -1;}while(1){read(fd,buff,sizeof(buff));}return 0;}单片机代码void setup(){pinMode(2,OUTPUT);pinMode(4,OUTPUT);pinMode(6,OUTPUT);pinMode(8,OUTPUT);Serial.begin(115200);void loop(){char c;c=Serial.read();if(c=='1'){digitalWrite(2,LOW); digitalWrite(4,HIGH); digitalWrite(6,LOW ); digitalWrite(8,HIGH); Serial.println("qianjin"); }if(c=='2'){digitalWrite(2,HIGH); digitalWrite(4,LOW); digitalWrite(6,HIGH); digitalWrite(8,LOW); Serial.println("daotui"); }if(c=='3'){digitalWrite(2,LOW); digitalWrite(4,HIGH); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("youzuan"); }if(c=='4'){digitalWrite(2,LOW); digitalWrite(4,LOW);digitalWrite(6,LOW); digitalWrite(8,HIGH); Serial.println("zuozuan"); }if(c=='0'){digitalWrite(2,LOW); digitalWrite(4,LOW); digitalWrite(6,LOW); digitalWrite(8,LOW); Serial.println("0");}}。