首页 理论教育 智能车软件编程应用实践:技巧与经验分享

智能车软件编程应用实践:技巧与经验分享

时间:2023-06-25 理论教育 版权反馈
【摘要】:该函数的作用是设置引脚的输出电压为高电平或低电平。参数pin 表示所要获取模拟量电压值的引脚,返回为int 型;精度10 位,返回值为0~1 023。Arduino 中PWM 的频率大约为490 Hz。中断处理函数是一段子程序,当中断发生时执行该子程序部分。该函数用于取消中断,参数interrupt 表示所要取消的中断源。

智能车软件编程应用实践:技巧与经验分享

1.Auduino 软件编程

Arduino 是源自意大利的一个开放源代码的硬件项目平台,该平台包括一块具备简单I/O功能的电路板以及一套程序开发环境软件。Arduino 可以用来开发交互产品,比如它可以读取大量的开关和传感器信号,并且可以控制电灯、电动机和其他各式各样的物理设备;Arduino 也可以开发出与PC 相连的周边装置,能在运行时与PC 上的软件进行通信。Arduino平台的基础就是AVR 指令集单片机,AVR 单片机开发有ICCAVR、CVAVR 等,这些语言都比较专业,需要对寄存器进行读写操作,晦涩难懂。

Arduino 简化了单片机工作的流程,对AVR 库进行了二次编译封装,把端口都打包好了,寄存器、地址指针之类的基本不用管,大大降低了软件开发的难度,特别适合学生和一些非专业爱好者们使用。本章后续内容均在Arduino UNO 板上编程。Arduino 常用的函数有以下几个部分。

(1)数字I/O 口的操作函数

1) pinMode (pin, mode)。

pinMode 函数用以配置引脚的输出或输入模式,它是一个无返回值函数。函数有两个参数——pin 和mode。pin 参数表示要配置的引脚,mode 参数表示设置的参数INPUT(输入)和OUTPUT(输出)。INPUT 参数用于读取信号,OUTPUT 用于输出控制信号。pin 的范围是数字引脚0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号14 脚对应模拟引脚0,19 脚对应模拟引脚5。pinMode 函数一般会放在setup 里,先设置再使用。

2) digitalWrite (pin, value)。

该函数的作用是设置引脚的输出电压为高电平或低电平。该函数也是一个无返回值的函数。pin 参数表示所要设置的引脚,value 参数表示输出的电压为HIGH(高电平)或LOW(低电平)。注意:使用前必须先用pinMode 设置。

3) digitalRead (pin)。

该函数在引脚设置为输入的情况下,可以获取引脚的电压情况(HIGH 高电平)或者(LOW 低电平)。

例程:

(2)模拟I/O 口的操作函数

1) analogReference (type)。

该函数用于配置模拟引脚的参考电压,有3 种类型:DEFAULT 为默认值,参考电压是5 V;INTERNAL 表示低电压模式,使用片内基准电压源2.56 V;EXTERNAL 表示扩展模式,通过AREF 引脚获取参考电压。注意:若不使用本函数的话,则默认是参考电压5 V。使用AREF 接参考电压,需接一个5 kΩ 的上拉电阻

2) analogRead (pin)。

用于读取引脚的模拟量电压值,每读取一次需要花100 μs 的时间。参数pin 表示所要获取模拟量电压值的引脚,返回为int 型;精度10 位,返回值为0~1 023。注意:函数参数的pin 范围是0~5,对应板上的模拟口A0~A5。

3) analogWrite (pin, value)。

该函数是通过PWM 的方式在引脚上输出一个模拟量,主要用于LED 亮度控制、电动机转速控制等方面。Arduino 中PWM 的频率大约为490 Hz。UNO 板上支持以下数字引脚(不是模拟输入引脚)作为PWM 模拟输出:3、5、6、9、10、11。板上带PWM 输出的都有符号“~”。注意:PWM 输出位数为8 位,为0~255。

例程:

(3)高级I/O

Pulseln (pin, state, timeout)。

该函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH 或者LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平。返回脉冲持续的时间长度,单位为ms,如果超时没有读到的话,则返回0。

例程:做一个按钮脉冲计时器,测一下按钮的时间,测测谁的反应快,看谁能按出最短的时间。按钮接第3 脚。

(4)时间函数

1) delay (ms)。

延时函数,参数是延时的时长,单位是ms(毫秒)。

例程——跑马灯。

延时函数,参数是延时的时长,单位是μs(微秒),1 ms =1 000 μs。该函数可以产生更短的延时。

2) millis ()。

应用该函数,可以获取单片机通电到现在运行的时间长度,单位是ms。系统最长的记录时间为9 h 22 min,超出从0 开始。其返回值是unsigned long 型。该函数适合作为定时器使用,不影响单片机的其他工作(使用delay 函数期间无法做其他工作)。

3) micros ()。

该函数返回开机到现在运行的微秒值,其返回值是unsigned long,70 min 溢出。

(5)中断函数

单片机中中断的相关概念如下:

中断——由于某一随机事件的发生,计算机暂停原程序的运行,转去执行另一程序(随机事件),处理完毕后又自动返回原程序继续运行。

中断源——引起中断的原因,或能发生中断申请的来源。

主程序——计算机现行运行的程序。

中断服务子程序——处理突发事件的程序。

attachInterrupt(interrput,function,mode):该函数用于设置外部中断,函数有3 个参数,分别表示中断源、中断处理函数和触发模式。

中断源可选0 或者1,对应2 或者3 号数字引脚。中断处理函数是一段子程序,当中断发生时执行该子程序部分。触发模式有四种类型,LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)和FALLING(高电平变为低电平触发)。

例程:数字D2 口接按钮开关,D4 口接LED 灯1(红色),D5 口接LED2(绿色),LED3 每秒闪烁一次,使用中断0 来控制LED1、中断1 来控制LED2。按下按钮,马上响应中断,由于中断响应速度快,故LED3 不受影响,继续闪烁。其比查询的效率要高。

尝试4 个参数,例程1 试验LOW 和CHANGE 参数,例程2 试验RISING 和FALLING参数。

该函数用于取消中断,参数interrupt 表示所要取消的中断源。

(6)串口通信函数

串行接口Serial Interface 是指数据一位位按顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信。串口的出现是在1980 年前后,数据传输率是115~230 kb/s。串口出现的初期是为了实现连接计算机外部设备,初期串口一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。由于串口(COM)不支持热插拔且传输速率较低,故目前部分新主板和大部分便携式电脑已开始取消该接口,目前串口多用于工控和测量设备以及部分通信设备中,如各种传感器采集装置、GPS 信号采集装置、多个单片机通信系统、门禁刷卡系统的数据传输及机械手控制、操纵面板控制电动机等,广泛应用于低速数据传输的工程。(www.xing528.com)

Arduino 软件中的串口函数常用的有下面几种:

1) Serial.begin ()。

该函数用于设置串口的波特率,一般的波特率有9 600 b/s、19 200 b/s、57 600 b/s、115 200 b/s 等。波特率是指每秒传输的比特数,除以8 可以得到每秒传输的字节数。

示例:

Serial.begin (57600);

2) Serial.available ()。

该函数用来判断串口是否收到数据,函数的返回值为int 型,不带参数。

3) Serial.read ()。

将串口数据读入。该函数不带参数,返回值为串口数据,int 型。

4) Serial.print ()。

该函数往串口发数据。可以发变量,也可以发字符串。

例句1:Serial.print(“today is good”);

例句2:Serial.print(x,DEC); (以10 进制发送x)

例句3:Serial.print(x,HEX); (以16 进制发送变量x)

5) Serial.println ()。

该函数与Serial.print()类似,只是多了换行功能。

6)数学库。

Arduino 软件中的常用数学运算函数如下:

min(x,y);求两者最小值。

max(x,y);求两者最大值。

abs(x);求绝对值。

sin(rad);求正弦值。

cos(rad);求余弦值。

tan(rad);求正切值。

random(small,big);求两者之间的随机数

2.Auduino 软件编程实例

(1)按钮开关的例程

按键开关模块和数字13 接口自带LED 搭建简单电路,制作按键提示灯。利用数字13接口自带的LED,将按键开关接入数字3 接口,当按键开关感应到有按键信号时,LED 亮,反之则灭。

(2)光敏传感器的例程

光敏传感器实质是一个光敏电阻,根据光的照射强度会改变其自身的阻值。

编程原理:将光敏电阻的S 端接在一个模拟输入口,光强的变化会改变阻值,从而改变S 端的输出电压。将S 端的电压读出,使用串口输出到计算机并显示结果。

因为AVR 是10 位的采样精度,输出值为0~1 023。当光照强烈时,值减小;当光照减弱时,值增加;完全遮挡光线时,值最大。

(3)魔术光杯(一对)的例程

水银开关多加了一个独立的LED,两个可以组成魔术光杯。

原理:将魔术光杯其中一个模块S 脚接数字脚7,LED 控制接数字脚5(PWM 功能),另一个模块S 脚接数字脚4,LED 控制接数字脚6。

现象:当一个水银开关倾倒时,一个灯会越来越暗,另一个灯会越来越亮,像心电感应一样。

(4)双色共阴LED 模块的例程

发光颜色:绿色+红色(左边头大一点的),黄+红(右边头小一点的)。

产品广泛应用于电子词典、PDA、MP3、耳机数码相机、VCD、DVD、汽车音响、通信、计算机、充电器、功放、仪器仪表礼品、电子玩具及移动电话等诸多领域

编程原理:通过模拟端口控制LED 的亮度,0~255 表示0~5 V。2 种颜色的灯混合,让其值总和为255,可以看到,从红色过渡到绿色的现象,中间颜色是混合成的黄色。

3.智能车Auduino 软件综合编程实例

超声波避障小车。

舵机带动超声波传感器转动,分别检测前方、左边和右边3 个方向是否有障碍物。若前方障碍物大于25 cm 则前进,若前方有障碍物则转动;检测左、右的障碍物,哪边的空间大,则往哪边转动。

示范例程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈