Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦
(o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go!
o( ̄▽ ̄)ブ本文视频链接:
【【深海王国】小学生都能玩的单片机?(10)总结:学习Arduino踩过的坑-哔哩哔哩】
(10)总结:学习Arduino踩过的坑
恭喜大家!来到了本系列最后一节,即将顺利完成本系列的学习,相信大家现在已经对单片机有了一定了解,这节我们要做个总结,大都督分享一下自己当初学Arduino时遇到的诸多问题,帮助大家避坑!
Arduino上传代码的问题:
- Arduino是可以直接使用标准串口上传代码的,不一定要使用USB接口。只要将USB转TTL串口模块连接至Arduino的标准串口即可(即0、1引脚)。
- 一部分Arduino需要冷启动才能上传代码,比如Arduino Nano、Arduino Pro Mini。也就是说,在上传之前,需要按住Arduino上的reset重置按钮,当Arduino IDE提示正在上传的时候,松开重置按钮,才能完成上传。
- 没有安装CH340驱动。(详见(4)CH340驱动安装与Arduino程序下载)
- 没有共地。(详见初识Arduino与基本单片机电路知识)
蓝牙串口模块问题:
-
熟悉大都督的小伙伴们都知道,大都督经常用的是BLE低功耗蓝牙HC-08,为什么呢。其中一个原因就是因为蓝牙功耗问题,传统蓝牙例如HC-05或HC-06模块的工作电压是3.3V,但是,用3.3V供电很可能会让蓝牙模块功率不足,甚至频繁断开连接的问题,而用低功耗蓝牙就不存在这个问题。
-
虽然蓝牙模块一般都是3.3V供电,但实际上用Arduino开发板上的5V引脚供电也是可以的,虽然理论上说这样有烧坏芯片的风险,但大都督本人亲身实验,用5V供电一段时间是没问题的,还可以解决传统蓝牙功率不足的问题,如下:用5V供电灯会更亮一点,哈哈。
-
使用蓝牙模块连接手机APP不仅要打开蓝牙功能,还要打开手机定位,并且记得给权限。
-
当同一场所中蓝牙模块过多,会影响通讯和连接,尤其是低功耗蓝牙在这方面很不行,如果你要使用蓝牙的场景在人很多的场合,比如大学比赛,最好直接用传统蓝牙。
Arduino开发板供电问题:
-
在刚开始介绍单片机的时候,大都督就说过,嵌入式系统就是管家。虽然Arduino UNO开发板上有5V供电引脚,但是这并不意味着你真的可以用Arduino供电,怎么能让管家干下人的活呢?供电就要由专门的供电模块来。(详见(1)单片机的介绍与嵌入式基本知识)
-
如果需要连接的模块功率不高,或者模块不多,是可以用Arduino供电的,但是由于Arduino的供电归根到底是来自于USB转TTL模块的功率,所以,像传统蓝牙模块、Wi-Fi模块,并不一定能带得动,如果你连接的多了,更带不动,所以最好还是找个电源专门给它们供电吧。
-
如果你想给Arduino开发板供电,有四种方式:
-
使用USB/Type-c下载接口供电:电压5v,最快捷简单的供电方法,找个充电宝就可以。
-
使用5V引脚供电:Arduino开发板电源引脚中的5V引脚不仅可以为外部电子元件提供+5V电源,也可以用于为Arduino开发板自身供电,在PCB设计中常用的供电方式。
-
使用电源接口供电:可以通过直流电源通过Arduino开发板的电源接口为其供电,直流电源电压为9V~12V,就是Arduino开发板上那个黑色圆头头,学名DC电源头5.5*2.1MM,可用12V锂电池供电。
-
使用Vin引脚供电:直流电源电压必须为7V~12V。如果是电池模组供电可以考虑用,但还是比较不常用。
-
软串口问题:
- SoftwareSerial库只能提供一个额外的软串口!((8)软串口与SoftwareSerial库使用)
- 波特率越高越容易出现数据传输错误。
- 如果你需要很多串口,建议直接选Arduino Mega2560,它有四个硬件串口。
Arduino UNO内存问题:
Arduino uno开发板的主控是叫ATmega328P一个8位的单片机,Arduino Nano和Arduino Pro Mini也用的这个主控。资源很有限,它的ROM有32K,RAM只有2k,在开发时RAM真的很紧张,简单来说就是它的内存不太行。内存快满的时候就会像下面这样:
即使没到达满的状态也可能会导致Arduino uno 运行时重置或者卡死现象,如果你想做大项目,建议直接选Arduino Mega2560。
char与String,’ '与" ",字符与字符串:
刚学Arduino,肯定会因为字符和字符串问题犯迷糊,比如我们上一节的实战代码(详见(9)实战:使用软串口与蓝牙APP串口通讯)。大都督现在就给大家详细解释一下这两者的区别:
-
char
:- char是基础数据类型之一,用于存储单个字符。比如,char myChar = ‘A’;这里myChar变量存储了字符A。
- Arduino(C/C++语言)中,字符是以其ASCII码形式存储的,char类型的变量占用1个字节的内存(-128到127或0到255),可以存储一个ASCII码字符。
- char类型可以用来创建字符数组,通过这种方式可以用来表示字符串。例如:char myChars[] = “Hello”;这里myChars是一个字符数组,以\0(空字符)结尾,实际存储了Hello\0。
- 单引号
' '
用来包裹单个字符,与char
类型搭配使用。例如:char a = 'A';
。 - 在进行串口通信时经常需要通过
char()
函数将ASCII转化为字符类型。
-
String
:-
String类型是Arduino语言中的一个高级结构,用于存储和操作动态字符串。例如:String myString = “Hello World”;。
-
String对象背后是动态分配的内存,可以在运行时增减其大小。这意味着可以随时向String对象中添加更多字符。
-
String提供了丰富的方法来执行如拼接、比较、搜索、提取等操作。
-
双引号
" "
用来创建字符串字面量,可以包含零个或多个字符。与char数组或String对象搭配使用。 -
使用双引号创建的字符串,实质上是一个以NULL(\0)字符结尾的char数组。例如:char myString[] = “Hello”;实际上存储了H e l l o \0
-
Arduino常用的数据类型:
既然都说到了Arduino的char和String,那就顺便把Arduino常用的数据类型总总结一下吧:
int
: 存储整数,通常占用2个字节(-32,768到32,767)。unsigned int
: 存储无符号整数,也通常占用2个字节(0到65,535)。byte (或 uint8_t)
: 存储一个字节的无符号数,占用1个字节(0到255)。long
: 存储较大的整数,占用4个字节(-2,147,483,648到2,147,483,647)。unsigned long (或 uint32_t)
: 存储较大的无符号整数,占用4个字节(0到4,294,967,295)。short
: 通常为16位的整数,占用2个字节。float
: 存储单精度浮点数,占用4个字节。用于存储有小数点的数值。double
: 在某些Arduino板上,如Arduino Due,double提供了更高的精确度,占用8个字节。但在许多其他Arduino板上(如UNO、Mega2560),double的实际精度和float相同,即占用4个字节。bool
: 存储真(true)或假(false)值。
经过本系列的学习,相信大家已经对单片机学习颇有信心了,哈哈,是不是没想象中那么难?加油,大都督看好你!之后大都督还会推出其他关于单片机的系列文章,大家可以继续关注哦!
最后感谢大家对本系列的支持!深海王国没你不行!
学到这里的你,今天也辛苦啦!需要的相关材料链接我都放在公众号「深海大都督」里了,回复「Arduino」就能获得啦~
哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~
(・ω< )★ 加入深海大家庭,快乐摆烂每一天!