10.26 arduino lec2

2018-10-27  本文已影响0人  Eptsten

一 实验目的

1.认识串口通信,利用串口通信进行程序调试

2.初步阅读datasheet,对实验现象做出解释/预测

3.了解PWM并做简单运用

二 串口通信与调试

1.介绍Serial库的基本用法(硬串口):程序通过串口监视器向电脑传输数据,串口绘图器对大量数据点进行画图

对应实验:模拟IO输入检测光敏电阻电压(analogRead),并做一个简单的平均滤波器

*2.电脑通过串口控制单片机:书本p66~72,课上没时间讲,要求自学

对应实验:p70.串口控制led开关

**3.蓝牙通信:手机上下一个蓝牙调试助手与HC05模块连接传输数据,注意蓝牙模块的TX(transport)连接单片机的RX(receive)端,蓝牙模块的RX连接Arduino的TX端。还可以在单片机上用软串口(SoftwareSerial)对蓝牙进行连接控制。这部分有兴趣可以先做,下节课会讲两个单片机之前通过蓝牙连接。参考资料:

https://www.arduino.cn/thread-2961-1-1.html

https://blog.csdn.net/Silent_F/article/details/73555308

*自己做DAC:http://lib.csdn.net/article/embeddeddevelopment/67105

三 元件资料阅读

1.光敏电阻电路图以及参数表阅读(感谢徐老师的j精心讲解😏)

2.RGB模块的datasheet阅读:

首要关注点:怎么才能烧!Absolute、Typical表格,从单位找参数属性。

作业:重新看RGB的datasheet(pdf),高亮出你认为重要的部分;解释光敏电阻电路图,并结合参数表说出光敏电阻模块输出电压与外界亮度的关系。

3.解释上拉/下拉电阻的概念。

四 PWM原理讲解及应用

1.下载呼吸灯程序,通过示波器波形了解PWM原理。

对应实验:呼吸灯

2.应用实验:通过光敏电阻的读取值控制LED亮度,要求环境越亮LED越亮(手机屏幕调光)

问题:怎么接线,算法怎么写来进行转换,溢出控制

五 实验报告要求(基本)

1.对于论坛/书本上有详细介绍的实验,只写实验中遇到的问题和解决方法即可;自己编写的关键代码(如PWM应用中光敏电阻值到亮度的算法),或者是觉得比较有意义、有感悟的代码可以写上并解释

2.理论作业:见datasheet阅读部分,阐述PWM原理

3.综合实验作业:除了代码和效果图/视频之外,还需要阐述程序的设计思路以及调试思路(如果有信心能一次编译完成实验就可以不写调试思路),比如这个实验的关键技术分为几个部分(串口读取、PWM、数组/字符串读取),之间有什么联系,觉得说不清楚画个流程图也行

(1)电脑串口控制LED灯亮度

(2)电脑串口控制呼吸灯频率(tips:使用数组)

(3)电脑串口控制RGB呼吸灯顺序以及频率:

    a.只在程序开头进行设置;b.在程序循环中随时能改变(tips:字符串分割)

4.对课程进度以及讲解的意见与建议,给我点反馈我手才不会抖呀🌸🐔

*本次实验报告不要求这周末交,请坐和放宽,认真做完实验

*参考资料:Arduino基本函数库解释:https://arduino-wiki.clz.me/

六 我的感受

1.对硬件的熟悉程度比上节课好了,有些模块由于没接触过可能忘记了,问题不大多接触几次就好了。xyh单独研究了一下电路图还是研究出一点东西的,超过我的预想,以后我们还会接触一些不怎么能看懂的东西,还需要这种钻研的态度,再接再厉。zy的接线还是有点问题,不过起码面包版的逻辑弄清楚了,就是端口没接好,再仔细一点,相信很快可以做好。wmj做得挺顺利的,很稳。

2.关于datasheet。老实说,我平时用元件的时候一般都不会这么认真地读datasheet,只有当把东西烧了的时候才去认真看看是怎么回事😂 这不是个好习惯,如果要做电路设计,还是最好先认真读一下datasheet,标出主要参数,看一下符不符合自己设计的需要。这次还没有完全看懂也不要慌,后面我们还会陆续拿一些通用元件的datasheet慢慢研究~

3.软件方面,C语言的熟悉程度比上节课好了,起码没有这么多语法错误,可能有一些用法不太熟悉的后面我们慢慢巩固。这次印象比较深的是PWM的255溢出和wmj那个转换公式的bug。第一个是Arduino的int是16位的,而analogWrite函数的输入应该是一个unsigned char,如果实际值超出转换公式的范围brightness的值就会大于255溢出到0。第二个就是wmj转换公式的调试,首先使用了Serial.print对计算值进行输出来调试,即学即用,很好,然后在我去看之前已经发现乘除法的顺序问题并进行交换,可以看出来有一定C语言功底,最后发现真正的问题在于整数运算的范围和精度问题,使用了double进行变量储存,并用(double)和(int)运算符进行强制类型转换,解决问题。

4.进度不用急,我们一步一步来扎实基础,也已经可以逐步开始做一些有趣的事情了~如果觉得我的进度还是太快就在实验报告里面说一下,这个课不像其他的课程一样必须要你们做到什么什么样,主要目的还是培养你们的兴趣,知道自己所学的知识是可以做什么,去拥抱它们而不是畏惧它们

5.模电真的没有这么可怕!不过我不会再直接讲模电了,时间宝贵(逃

上一篇 下一篇

猜你喜欢

热点阅读