一 实验目的
1.中断概念的了解以及运用
2.串口通信plus:蓝牙通信,软串口库的使用
3.进一步熟悉datasheet阅读
二 中断
中断是一个在单片机里非常重要的概念(功能),对提高系统的执行效率有很大的帮助。虽然在arduino uno中只有两个数字IO中断口,实现的功能有限,不过在更复杂的单片机如stm32、msp430中使用的会非常多,如IO电平变化触发中断、ADC采样触发中断、串口传输中断、定时器中断,各种各样的中断的加入可以让我们在程序中实现更多的功能(而且代码结构会更加简洁)。
具体内容介绍:课本p83,https://www.arduino.cn/thread-2421-1-1.html
对应实验:
1.通过中断实现按钮开关控制LED灯,四种中断模式都尝试一下,结合实际电路分析中断触发方式。
*2.通过中断实现按钮开关控制呼吸灯的开始/关闭。课上只有xyh做了,有两个注意的地方,一是一个端口只能注册一个触发事件,RISING写一个触发函数而FALLING又写一个函数,这样只会以最后一个注册事件为准;二就是思考如何在loop中原有呼吸灯代码不改变的情况下,实现触发事件后立刻停止呼吸灯。(我们想出的一个操作是改变ledpin端口变量)
三 串口通信plus
由于大家都没做完上节课的综合实验,本节课接着上一节课的做。关于Serial库更详细的介绍在书本第五章p103,里面有很多函数可以方便我们的编程,比如Serial.parseInt()就可以直接得到输入的下一个int数据,不需要自己去对字符串进行分析。
通过示波器观察串口UART、IIC、SPI通信协议波形,对有线通信协议有大概的了解。重点:串口虽然收发两条线(TX\RX),但是没有时钟信号线,发送机和接收机的时间不好同步,通信波特率太高的时候会造成乱码。IIC有时钟线SCLK和数据线SDA,SCLK的存在可以在提高传输速率的同时提高通信可靠性(降低误码率),不过因为只有一条数据线,在一个时刻只能发送/接收信息,半双工通信。SPI有时钟线CLK、主机发送数据线MOSI(Master Out Slave In)、从机发送数据线MISO,可以在较高通信速率下进行全双工通信。
1.遇到一个奇怪的问题:Serial.available()读完一次时候就变成0了(在后面还有数的情况下)???我回去找了找,会不会是要加一个短暂的延时......对出问题的程序可以加个delay再试一下
2.Serial.available()的用法:在程序setup那里可以加个while(!Serial.available()){}来让程序不要立马进入loop()
3.串口事件SerialEvent()函数,可以把串口读取到数据后的处理语句都写进去,优化代码结构。书本上p115有例程,对上次综合实验3没有思路的可以参考一下。该事件只对硬串口有效!
4.软串口:通过IO口来实现串口通信,详见SoftwareSerial库,一般使用的时候和硬串口差别不大,速率不要太高就行(其实到112500应该也可以)。
5.蓝牙:(1)和电脑的连接。在Arduino上分别通过硬串口、软串口进行数据输出。
(2)AT指令控制模式。(陷入自闭)
AT命令资料:https://www.arduino.cn/thread-2961-1-1.html、HC05AT指令集(然而进不去AT模式)
p.s.当模块跟市面上不一样时,还是打开原购买界面看一看
四 datasheet阅读
这次阅读了三极管S9012和S9013的datasheet。
三要素:1.元件类型:如三极管的PNP/NPN(是否功率管)、运放(高速型、低噪声型、单/双极性电源供电)
2.管脚图:三极管ebc分别是哪个管脚、集成芯片每个引脚的功能
3.工作范围/绝对参数:怎么才能烧
接下来的内容就根据不同元件而异了,这需要用到模电/数电中介绍的一些概念和知识,除了表格以外,图也是可以看一下的,对元件的特性有一个更直观的认识。要注意图的坐标不是等间隔的,类似于波特图。
五 实验报告要求!!!
由于下周有大物期中考,下一次安排在下下周。
1.中断实验1:通过中断实现按钮开关控制LED灯,四种中断模式都尝试一下,结合实际电路分析中断触发方式,画电路图,分析按钮按下前后的状态,什么时候对应上升沿、下降沿、CHANGE、低电平触发。附上代码和注释。
2.中断实验2:通过中断实现按钮开关控制呼吸灯的开始/关闭。除了视频,附上代码和注释。
3.上一次的综合实验,用电脑串口实现之后可以再试试用蓝牙控制,这时候电脑就只相当于提供电源和下载程序用了。附上代码和注释。
综合实验作业:除了代码和效果图/视频之外,还需要阐述程序的设计思路以及调试思路(如果有信心能一次编译完成实验就可以不写调试思路),比如这个实验的关键技术分为几个部分(功能框图)(串口读取、PWM、数组/字符串读取),之间有什么联系,觉得说不清楚画个流程图也行
(1)电脑串口控制LED灯亮度
(2)电脑串口控制呼吸灯频率电脑串口控制呼吸灯频率(tips:使用数组)
(3)电脑串口控制RGB呼吸灯顺序以及频率:
a.只在程序开头进行设置;b.在程序循环中随时能改变
tips:字符串分割(字符串可以看做是一个数组);Serial.parseInt(), Serial.parseFloat();Serial接收到的是char,要根据ASCII码转成数字,如if(inchar>='0' && inchar<='9') inint=inchar-'0';
wmj:开始选的那个音乐键盘的小项目可以开始做了。
六 关于工程思想
在两次的实验报告说明中,我都提到了要写设计思路以及调试思路,或者画一个功能框图,这个我在课上没有专门说,而是贯穿在和你们说一个东西怎么做或者调bug的过程中,因为这个的确不好说,每个项目都不同。但这个非常重要,比所有的技术细节都重要!做工程的,尤其是通信,必须要有很好的系统观,整个系统由什么重要模块组成,他们之间怎么联系,系统总体的技术指标要求怎么均衡得分派到各个模块,这都是我们去做一个具体项目时要去想的。有了这个总体框架,我们的学习/实现才能有条不紊地进行下去。不得不承认,我在这方面做得也不好(懒),希望以后做实验做项目的时候能和你们一起去有意识地锻炼这种思维习惯。共勉。