Arduino应用技术 课件 第1-3章 认识Arduino-Arduino基本示例_第1页
Arduino应用技术 课件 第1-3章 认识Arduino-Arduino基本示例_第2页
Arduino应用技术 课件 第1-3章 认识Arduino-Arduino基本示例_第3页
Arduino应用技术 课件 第1-3章 认识Arduino-Arduino基本示例_第4页
Arduino应用技术 课件 第1-3章 认识Arduino-Arduino基本示例_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章认识Arduino从零认识开源电子平台,走进物联网开发的世界《Arduino应用技术(第二版)》第一篇Arduino基础高职电子信息类专业教学用本章学习目标带着问题去学习:Arduino是什么?能做什么?如何上手?目标拆解1理解Arduino是什么2掌握Arduino的硬件结构3了解其他类型的Arduino板及扩展板4掌握ArduinoIDE的安装与使用5掌握VSCode与AI插件的安装与使用6了解Mixly图形化编程软件7了解Arduino在线仿真平台第一章·引题Arduino是什么?为什么它能风靡全球?在你印象里,电子工程师是不是要这样工作:又要懂芯片、又要会画电路、还要写复杂的底层程序?带着这个问题学习本章——答案就藏在一块小小的蓝色电路板里。1.1Arduino是什么?一个开源、易上手的电子原型开发平台定义:Arduino是一个开源平台,专门用于构建电子项目。它由多个系列型号的电路板(开发板)与电脑上运行的软件IDE两部分构成。硬件:开发板主控芯片(如ATmega328)+数字/模拟接口+供电与通信电路软件:ArduinoIDE类C/C++语言编写程序通过USB直接上传,无需额外编程器它能做什么:读取各类传感器的模拟/数字输入信号,据此进行输出控制——驱动电机、点亮/熄灭LED、连接云端,甚至作为新型“玩具”和艺术载体。1.1Arduino的六大特色01跨平台兼容IDE支持Windows、macOS、Linux三大系统02编程环境简洁类C语法、界面简洁,新手和高手都友好03硬件开源可扩展遵循知识共享协议,可设计个性化扩展模块04软件开源语言可由C/C++库扩展,驱动库积累丰富05发展迅猛众多开发者与高校课程纷纷引入Arduino06价格低廉兼容UNO板十几元即可获得,可买元件自组小结:开放+易用+廉价,让Arduino成为微控制器入门学习与物联网开发的首选工具。1.1Arduino在物联网中的应用在全自建的物联网系统中,传感器采集的温度、湿度等信息,经Arduino上传至Web应用并存入数据库;系统据此生成穿衣指数、防晒指数等智能分析建议。Arduino不仅能连接传感器,还能连接执行器与控制器等多种设备。图1-1全自建物联网系统数据链路:传感器→Arduino→Web服务器→Web应用两条去向:①收集存储→数据库②智能分析建议1.1Arduino的应用领域机器人领域接口丰富、库充实;超声波、陀螺仪、编码器等现成代码可复用智能家居电子积木式开发;解决传感器接入标准不统一问题工业与家电控制空调控制板、打印机控制器、智能电表、LED显示屏、医疗设备、GPS创客与艺术载体非专业爱好者也能创作有趣作品,成为“玩具”与艺术表达工具延伸:STM32、ESP32等厂商也加入Arduino生态,通过IDE插件即可用Arduino语法高效开发。1.2ArduinoUNO板硬件资源图1-2ArduinoUNO的硬件资源(中文标注)UNO:应用最广的型号“UNO”在意大利语中意为“1”,是USB系列首个型号,也是应用最广泛的Arduino板。板载资源一览主控单片机ATmega328(8位)DC电源接口(7–12V)+USB接口数字接口D0–D13(含PWM)模拟输入A0–A5板载LED(ON/RX/TX/L)复位按钮与ICSP接口1.2UNO关键板载资源详解板载资源型号/参数要点说明主控单片机ATmega328P(8位)32KBFlash/2KBSRAM/1KBEEPROM/16MHzDC电源接口7–12V(推荐)承受6–20V;切勿超过20VUSB转串口芯片ATmega16U2兼容板常见CH340等,需装驱动板载LEDON/RX/TX/LL接数字引脚13,可编程控制数字接口D0–D13PWM引脚:3、5、6、9、10、11(带~)模拟输入A0–A510位ADC,输入范围0–5V复位按钮RESET按下后重新启动已上传的程序1.2其他类型的Arduino开发板ArduinoLeonardoATmega32u4·可模拟USB键鼠ArduinoMega2560ATmega2560·54路I/O、4路串口ArduinoLilyPad·可穿戴ArduinoYún·Linux+Wi-Fi1.2Arduino扩展板(盾板)扩展板是为实现特定功能而设计的电路板(网络、GPRS、语音模块等);通过卡接方式层层叠加安装的扩展板也叫盾板(Shield)。W5100网络扩展板(图1-7)让Arduino具备上网能力Wi-Fi扩展板(图1-8)扩展Arduino的Wi-Fi接口1.3开发环境与交叉编译原理ArduinoIDE在电脑上编写类C语言代码,再交叉编译成单片机可执行的机器码,通过USB下载线烧写到开发板中运行。编写代码交叉编译生成机器码烧录到板为什么需要“交叉编译”?电脑处理器(x86/ARM)与单片机(AVR)指令集不同,必须用专门的编译器在电脑上生成AVR机器码。IDE已集成编译器与下载工具,单击“上传”即可完成编译+烧录开发环境只需:ArduinoIDE+开发板+USB数据线1.3IDE下载与安装(一)从官网下载安装包后双击运行,即可进入安装向导图1-9同意许可协议IAgree图1-10勾选安装组件注意:勾选USBDriver(驱动)与FileAssociations(关联.ino文件),安装完成后桌面会出现ArduinoIDE图标。1.3IDE下载与安装(二)选择安装目录并等待安装完成图1-11选择安装目录图1-12正在安装提示:默认安装到C:\ProgramFiles(x86)\Arduino,一般无需修改;安装完成后打开IDE,程序文件又称“草图”,扩展名为.ino。1.3认识IDE界面布局ArduinoIDE1.8.x主界面由四个区域组成图1-13新建空白草图图1-14界面四大区域菜单栏

文件/编辑/项目/工具/帮助按钮区

验证、上传、串口监视器等代码编辑区

编写程序结果显示区

编译、下载反馈1.3菜单栏:文件菜单与编辑菜单菜单栏包含文件、编辑、项目、工具、帮助五个菜单图1-15文件菜单图1-16编辑菜单文件菜单:新建(Ctrl+N)、打开(Ctrl+O)、保存(Ctrl+S)、另存为、首选项(Ctrl+,)、关闭(Ctrl+Q)编辑菜单:撤销、重做、剪切/复制/粘贴、全选、注释/取消注释、增加/减少缩进、增大/减小字号、查找代码中的“注释”用//表示,可帮助理解程序1.3菜单栏:项目菜单与库管理器项目菜单:验证/编译、上传、加载库等图1-17项目菜单库管理器:搜索、安装第三方库(如DHT11)图1-18库管理器窗口要点:“验证/编译”只编译不烧录(Ctrl+R),“上传”编译并烧录(Ctrl+U);添加第三方库可通过“项目→加载库→管理库”搜索安装。1.3菜单栏:工具菜单与帮助菜单工具菜单:开发板、端口、串口监视器等图1-19工具菜单帮助菜单:入门、环境、参考等图1-20帮助菜单重点:“工具→开发板”选择板卡(如ArduinoUno),“工具→端口”选择USB串口(如COM3);帮助菜单可查阅函数参考与示例。1.3串口监视器与运行注意事项串口监视器:显示Arduino发送的数据,也可向板卡发数据图1-21串口监视器打开方式:工具→串口监视器(Ctrl+Shift+M)波特率须与程序Serial.begin(9600)一致(默认9600)运行程序前必须确认:开发板类型与端口号选择正确上传程序时开发板需连接电脑,且未被其他软件占用串口兼容板需安装USB转串口驱动(CH340等)串口监视器常用于查看传感器数据与调试输出,是调试Arduino程序的重要工具。1.3开始编写程序:HelloWorld标准C语言中的“HelloWorld”#include<stdio.h>intmain(){printf("HelloWorld!\n");return0;}Arduino中的“HelloWorld”(串口输出)voidsetup(){Serial.begin(9600);//初始化串口}voidloop(){Serial.println("HelloWorld!");delay(1000);}区别:单片机没有屏幕,Arduino用Serial.println()通过USB串口把文字发送到电脑,打开“串口监视器”即可看到输出;setup()执行一次,loop()反复执行。1.3Blink程序的一键下载上传流程四步1工具→开发板→ArduinoUno2工具→端口→选择COM口3单击“上传”按钮4等待“上传成功”,观察LED闪烁观察开发板上标有“L”的LED每隔1秒亮灭一次,即实验成功。也可通过“文件→示例→0.1.Basic→Blink”打开内置示例。图1-22一键上传成功UNO连接电脑硬件连接:ArduinoUNO通过USB数据线连接电脑,USB口既供电又负责程序下载与串口通信。上传成功时IDE底部显示“上传成功”与内存占用信息。1.3第一个程序:Blink点灯实验Blink.inovoidsetup(){pinMode(13,OUTPUT);//设为输出}voidloop(){digitalWrite(13,HIGH);//点亮LEDdelay(1000);//等待1秒digitalWrite(13,LOW);//熄灭LEDdelay(1000);//等待1秒}逐行理解setup():上电后执行一次,用于初始化。pinMode(13,OUTPUT):把13脚设为输出。loop():反复循环执行。digitalWrite(13,HIGH):输出高电平5V,LED点亮。delay(1000):延时1秒。digitalWrite(13,LOW):输出低电平0V,LED熄灭。也可通过“文件→示例→0.1.Basic→Blink”打开内置示例。1.4VSCode编程软件及PlatformIO插件VSCode(微软开源)轻量级、启动快、内存占用低高度可定制:主题、快捷键、插件多语言支持,可扩展C/C++等跨平台:Windows/macOS/Linux语法高亮、代码补全、括号匹配内置调试:断点、单步、变量查看插件生态丰富,社区活跃PlatformIO(小蜜蜂)专为物联网开发打造的开源生态跨平台开发环境+统一调试器支持1000+开发板、12000+库扩展中搜索“platformio”安装,自带Python环境NewProject创建项目,main.cpp编程丰富的代码提示与自动补全1.4VSCode下载与安装免费官网:,点击DownloadforWindows图1-23VSCode官网首页下载安装包后双击,同意许可协议图1-24许可协议界面说明:VSCode是微软推出的免费开源代码编辑器,安装时勾选“添加到PATH”更方便在终端中使用。1.4VSCode安装步骤选择目标位置图1-25选择目录选择附加任务图1-26附加任务准备安装图1-27准备安装要点:·目标位置一般使用默认目录即可;·附加任务建议勾选“创建桌面快捷方式”“添加到PATH”,方便日常使用;·确认信息无误后点击“安装”,等待安装完成。1.4VSCode首次启动与中文界面首次启动进入引导页,可自定义主题图1-28VSCode首次启动引导扩展商店搜索“chinese”安装中文语言包图1-29安装中文插件安装后重启VSCode即可切换为中文界面,更便于初学者使用。1.4安装PlatformIO插件扩展商店搜索platformio并安装图1-31搜索安装PlatformIO安装后侧边栏出现PIO图标,可进入PIOHome图1-32PlatformIO插件界面说明:PlatformIO是VSCode的Arduino开发核心插件,安装时自动下载Python环境与工具链,首次使用需等待初始化。1.4PlatformIO创建项目与编译上传NewProject:命名Blink,选择板卡ArduinoUno图1-33创建项目向导在main.cpp编写代码,点击编译/上传图1-34PlatformIO编辑与编译上传操作:底部状态栏依次点击编译、上传、串口监视器按钮;快捷键Ctrl+Alt+B编译、Ctrl+Alt+U上传。1.4TraeAI编程插件Trae(TheRealAIEngineer,原“豆包MarsCode编程助手”)适用于VSCode及JetBrains,在扩展中搜索“trae”安装并登录账号即可使用。主要功能智能问答自然语言对话,解答开发问题代码生成描述需求即生成代码,可插入文件代码解释理解项目仓库,解释功能实现代码注释自动为代码生成可读注释代码补全单行/多行预测,注释生成代码单元测试为选中函数生成测试用例代码修复智能发现并修复代码问题给学习者的建议:AI能降低入门门槛、充当智能导师;但更要培养评估、调试与修改代码的批判性思维,理解AI工具的局限与风险。1.4AI编程助手对学习编程的影响AI编程助手(如Trae)正改变我们的编程学习方式提升效率:自动补全代码、生成注释与文档即时答疑:用自然语言提问,快速定位并解决报错降低门槛:帮助初学者更快上手嵌入式开发培养思维:先想清思路再让AI实现,学习代码逻辑保持严谨:AI生成的代码需理解后使用,勤加验证在扩展商店搜索“trae”安装TraeAI插件图1-35TraeAI编程插件Trae(TheRealAIEngineer)由字节跳动推出,适用于VSCode与JetBrains;安装后登录账号即可在Chat模式中提问,也可用Builder模式直接生成项目。1.4Trae账号登录首次使用需授权并登录Trae账号图1-36授权打开Trae登录引导点击VSCode左侧Trae图标,进入欢迎页点击“登录”,浏览器弹出授权页点击“登录并打开Trae”完成授权勾选同意服务条款与隐私协议后登录回到VSCode,即可在Chat面板开始对话,登录后可同步使用Doubao/DeepSeek等大模型1.4Trae交互窗口与模型选择Chat面板可对话、解释代码、生成注释图1-37交互窗口对话语言:Auto/中文/English可选模型:Doubao-1.5-pro(快速)、Doubao-1.5-thinking-pro(深度)、DeepSeek-R1、DeepSeek-V3等内置/explain解释代码、/doc生成注释、/test生成单测可对选中的代码直接提问,AI结合上下文回答小提示:选择“深度思考”模型适合复杂的编程问题,初学者可用“快速响应”模型。输入框:以#引用代码,按回车发送,支持多轮追问。1.4Trae应用示例:点亮多个LED向Trae提问“如何点亮多个LED”,AI直接给出代码图1-38Trae编程示例Trae结合当前文件main.cpp给出修改建议代码中出现“采纳/拒绝”标记,可一键应用示例用数组ledPins[]管理多个引脚,循环点亮养成习惯:先理解AI代码,再采纳并验证1.5Mixly图形化编程软件Mixly(米思齐)由北京师范大学傅骞教授团队开发,支持Arduino、ESP32等平台,可拖拽积木生成Arduino与Python代码。特点搭积木式编程,贴近流程图仅调整少量参数即可完成设计便于初学者掌握程序逻辑有效减少语法错误官网:,推荐Windows下使用Mixly3.0一键更新离线版启动后先选主控板类型(如ArduinoAVR)与具体板卡积木分类输入输出控制数学变量函数串口编程画布初始化重复执行数字输出13高延时1000毫秒(示意图)积木拖拽完成后可查看对应代码1.5Mixly官网与软件界面官网,下载Mixly离线版图1-39Mixly官网图形化界面:拖拽积木即可编程图1-40Mixly软件界面界面组成:左侧为积木分类(输入/输出、控制、数学、逻辑、文本、数组、变量、函数、串口),中间为编程区域,顶部可选择板卡型号与串口,并可在模块/混合/代码三种显示方式间切换。1.6Arduino在线仿真平台在线仿真平台基于云计算与互联网,用浏览器即可完成电路搭建与程序仿真,无需本地安装软件、无需购买实验套件,推荐使用Chrome或Edge浏览器。TinkercadAutodesk出品·免费在线3D建模+电路设计教师以教育工作者身份注册,可创建“课堂”班级电路设计→代码:支持积木与文本两种模式资源菜单提供丰富教程与示例Wokwi在线电子电路仿真·免费支持Arduino、ESP32、STM32、树莓派Pico对国产ESP32/ESP32-C3/ESP32-S3支持出色Docs提供中文示例与教程可与Mixly联合仿真:Wokwi搭电路,Mixly编代码共同优势:无需硬件、随时随地上手,是课前预习与课堂演示的好帮手1.6Tinkercad在线仿真操作Tinkercad使用流程()①注册②创建电路③搭建电路④编写代码并仿真要点·教师以教育工作者身份注册,可创建课堂班级·电路设计支持积木与文本两种代码模式·无需硬件即可演示实验,图1-41~1-44依次对应注册、创建、搭建、编程四个环节1.6Wokwi在线仿真:世界先进的嵌入式在线仿真平台图1-45Wokwi官网左侧写代码,右侧仿真运行,LED实时闪烁图1-46Wokwi仿真Blink项目特点:支持Arduino、ESP32、STM32、树莓派Pico等,对国产ESP32系列支持出色;左侧sketch.ino编写代码,右侧可视化仿真,可与Mixly联合使用。1.7未来展望与本章小结创客文化与开源精神“创”指创造,“客”指从事特定活动的人——创客勇于把创意变为现实互联网精神:开放、共享、分权、崇尚技术Arduino简单、廉价、开源,完美契合创客文化,风靡全球物联网新势力:ESP系列乐鑫科技(Espressif)研发的ESP32/ESP8266是专为物联网设计的低功耗微控制器,已全面融入Arduino生态。本章小结认识Arduino平台与UNO板硬件资源(单片机、引脚、LED、电源)掌握IDE安装与Blink程序编写上传,理解setup/loop结构了解VSCode+PlatformIO、TraeAI插件、Mixly与在线仿真平台第二章Arduino语法基础从C语言出发,掌握Arduino编程的核心语法《Arduino应用技术(第二版)》·第二篇Arduino基础高职电子信息类专业教学用本章学习目标学完本章,你将能够回答:Arduino程序为什么长这样?数据怎么存、怎么算、怎么控制流程?1掌握Arduino程序基本结构2掌握Arduino数据类型与运算3掌握Arduino程序流程控制4掌握Arduino中的库函数5掌握Arduino自定义函数先想一想:为什么Arduino代码和C语言这么像?你会写C的HelloWorld,但第一次看到Blink时,还是有不少问号……main()去哪了?为什么只有setup()和loop()?pinMode、digitalWrite这些"函数"从哪来?为什么要学进制转换、数据类型、运算和流程控制?2.1Arduino文件结构:从.ino到main()编写草图

xxx.inoIDE预处理

自动加#include编译为main.cpp

生成main()并调用main.cpp(IDE自动生成)#include<Arduino.h>intmain(void){init();setup();//用户函数:仅一次for(;;){loop();//用户函数:无限循环}}Arduino.h是核心头文件,定义了平台编程接口开发时不直接写main(),只需编写setup()与loop()点击"上传/校验"时IDE自动完成预处理与编译for(;;)是C语言中的无限循环2.1程序基本框架:setup与loop程序框架.inovoidsetup(){//只执行一次:初始化变量、//设置引脚模式、启用库}voidloop(){/*系统循环执行这里,每条语句以分号结束*/}核心函数setup():上电/复位后执行一次loop():反复循环执行的“主循环”pinMode(引脚,OUTPUT/INPUT):设置数字引脚模式digitalWrite(引脚,HIGH/LOW):输出5V/0Vdelay(毫秒):延时语法要点:分号“;”表示语句结束;花括号“{}”界定代码块;缩进提升可读性;注释用//或/**/,编译器会忽略。2.1示例:按钮控制LED图2-1按钮电路(R2=220Ω,R1=10kΩ)Button_LED.inoconstintbuttonPin=2;//按钮引脚constintledPin=13;//LED引脚intbuttonState=0;//按钮状态voidsetup(){pinMode(ledPin,OUTPUT);pinMode(buttonPin,INPUT);}voidloop(){buttonState=digitalRead(buttonPin);if(buttonState==HIGH){digitalWrite(ledPin,HIGH);}else{digitalWrite(ledPin,LOW);}}2.2进制转换基础:比特、字节与数制比特与字节比特(bit):表示0或1两种状态,是构成数字信息的最小单位。字节(byte):1字节=8比特,用大写B表示;主存储器的每个存储单元存放一个字节。数制的三个基本要素数码:表示基本数值的符号(十进制0~9)。基数:数码的个数(二进制基数为2)。位权:某一位上1所代表的数值(十进制123中,1的位权是100)。数制数码基数标志十进制0~910D二进制0、12B八进制0~78Q十六进制0~9、A~F16HK进制0到K-1K-表2-1不同数制的数码、基数、位权与标志2.2进制之间的转换方法任意进制→十进制方法:按位权展开并求和

十进制→其他进制整数部分:除基数取余、逆序排列

小数部分:乘基数取整、顺序排列29D=11101B0.6875D=0.1011B整数部分:除2取余逆序(图2-2)小数部分:乘2取整顺序(图2-2)1位八进制↔3位二进制1位十六进制↔4位二进制八、十六进制是二进制的"缩写"可用电脑"计算器→程序员模式"辅助转换2.2二进制运算与数的表示二进制的四则运算加法:0+0=0,0+1=1,1+1=0(进位1)减法:1-1=0,1-0=1,0-1=1(借位1)乘法:0×0=0,0×1=0,1×1=1逻辑运算真值表AB与·或+异或非000001101011-10011-11110-带符号数的表示:原码/反码/补码原码:最高位为符号位(0正1负),其余为数值。反码:正数同原码;负数符号位不变,其余取反。补码:正数同原码;负数为反码+1。计算机中的整数一律以补码存储和运算。图2-3带符号整数的位结构例:8位机器,-5的补码=11111011B(原码10000101→反码11111010→+1)。2.2标识符与关键字基本字符与标识符基本字符:大小写字母、数字、下划线,以及+-*/%<>=等运算符和分隔符。标识符:给变量、常量、函数等起的名字。规则:以字母或下划线开头后跟字母、数字、下划线区分大小写(LED与led不同)不能与关键字重名命名规范建议变量:小驼峰(buttonState)函数:动词开头(readSensor)常量:全大写加下划线(LED_PIN)名字要有意义,避免a、b、x关键字(保留字)具有特定含义、不能被用作标识符的单词,例如:数据类型:void、int、char、float、double、long、unsigned、byte、boolean流程控制:if、else、switch、case、default、for、while、do、break、continue、return其他:const、static、define、include提示:编程软件中的关键字会以高亮颜色显示,便于区分。命名时尽量避开它们。2.2转义字符转义字符以反斜杠\开头,用于在字符串中表示特殊含义的字符。在Arduino中常用\n换行与\t制表来美化串口输出。转义字符含义说明\n换行光标移到下一行行首\t水平制表跳到下一个制表位\r回车光标移到行首\\反斜杠输出一个\\"双引号字符串内输出"\0空字符字符串结束标志示例.inoSerial.println("A\tB");//输出:ABSerial.println("你好\n世界");//输出分两行显示Serial.println("\"引号\"");//输出:"引号"反斜杠在字符串中有特殊含义,需要输出反斜杠本身时写两个:\\。2.2基本数据类型数据类型字节数取值范围用途boolean1true/false逻辑判断结果char1-128~127单个字符或小整数byte10~255无符号小整数int2-32768~32767最常用的整数类型unsignedint20~65535无符号整数long4-2147483648~2147483647较大整数(如时间戳)unsignedlong40~4294967295millis()返回值类型float4约3.4E+38带小数点的实数double8约1.8E+308更高精度浮点数2.2常量与变量常量(const)定义后其值在程序运行中不再改变。常用于定义引脚号等固定参数。常量示例.inoconstintLED_PIN=13;constfloatPI=3.14;//LED_PIN=12;//错误!不能修改变量先声明类型再赋值,可在程序中改变其值。全局变量:定义在所有函数之外,所有函数都能访问,长期占用内存。局部变量:定义在函数内部,仅函数内可用,函数结束即释放。全局变量与局部变量变量作用域.inointcount=0;//全局变量voidsetup(){inttemp=0;//局部变量count=1;//可访问全局}voidloop(){//temp在这里不可见count++;//计数累积}注意:Uno内存仅2KB,滥用全局变量容易内存不足。能用局部变量就不用全局变量;全局变量在setup/loop外声明,才能跨函数共享并保持值。2.2串口调试:让数据"看得见"常用串口函数Serial.begin(波特率):初始化串口,如9600Serial.print(值):输出,不换行Serial.println(值):输出并换行Serial.available():接收缓冲区有数据返回非0Serial.read():读取一个字节数据打开串口监视器方法一:菜单"工具→串口监视器"方法二:快捷键Ctrl+Shift+M波特率需与Serial.begin一致(如9600)。串口输出.inovoidsetup(){Serial.begin(9600);}voidloop(){inta=10,b=20;Serial.print("a=");Serial.println(a);Serial.println(a+b);delay(1000);}2.2数组与字符串数组:同类型数据的集合声明并初始化,按下标访问,下标从0开始。数组.inointa[5]={10,20,30,40,50};intsum=a[0]+a[4];//a[0]=10,a[4]=50,sum=60数组越界访问不会报错,但会读到错误数据,务必注意下标范围。循环遍历数组用for循环配合下标,批量处理数组元素,是嵌入式编程的常见写法。字符串的两种形式字符数组:charstr[]="OK";以隐含的\0结尾,占用3字节。String类:Strings="OK";功能更丰富,但消耗更多内存。字符串.inoStringname="Arduino";Serial.println(name.length());Stringnum="123";intv=num.toInt();//v=123提示:Uno内存小,频繁创建String对象易造成内存碎片;简单场景优先用字符数组。2.2数组与字符串(二):字符串处理函数string.h库函数与String类方法string.h常用函数字符串整体操作优先使用string.h库:strcpy(dst,src):字符串赋值strcat(dst,src):字符串连接strcmp(s1,s2):按ASCII比较,左大1、相等0、右大-1strlen(s):返回有效字符长度(不含\0)string.h示例.inochars1[20],s2[10]="World";strcpy(s1,"Hello");//s1="Hello"strcat(s1,s2);//s1="HelloWorld"strcmp(s1,s2);//比较ASCII值strlen(s1);//10String类:Arduino还提供String类型(C++构造类型):length()、charAt()、indexOf()、substring()、toInt()、toFloat()等方法,功能更丰富但更耗内存。提示:字符数组用双引号定义会自动补\0;需要整体操作字符串时用string.h或String类。2.2数据类型转换自动类型转换(隐式)运算中不同数据类型相遇时,系统自动向"高"级别转换,不丢失数据。图2-5自动类型转换级别(低→高)注意:由高向低(如double赋给int)会丢失小数部分,需谨慎。强制类型转换(显式)语法:(目标类型)表达式。由用户明确指定转换,可能截断数据。常用于整数除法取整、浮点数取整等场景。强制转换.inointa=7,b=2;floatx=(float)a/b;//3.5inty=(int)3.99;//3(截断)charc=(char)65;//'A'floatz=a/b;//3(先整除)易错点:a/b两个整数相除结果为整数,先转换其中一个为float再除,才能得到小数结果。2.3数值运算:算术、赋值、关系与逻辑算术运算与赋值算术:+加、-减、*乘、/除、%取余注意:整数相除结果取整,如7/2=3;%求余数,如7%2=1。赋值:=把右侧值赋给左侧变量。自增自减与复合赋值++a先自增再用;a++先用后自增;--同理。复合赋值:a+=2等价a=a+2;还有-=、*=、/=、%=。例:inta=5;b=a++;→b=5,a=6;

intc=5;d=++c;→c=6,d=6。关系运算与逻辑运算关系运算:==、!=、>、<、>=、<=,结果为true/false。逻辑运算:&&逻辑与、||逻辑或、!逻辑非。关系式结果3<5true(3>5)&&(1<2)false!(3>5)true辨析:判断相等用两个等号==;单个=是赋值,写错会导致条件恒成立等难以排查的bug。2.3.1赋值运算将右侧的值或表达式结果存储到左侧变量赋值运算符=赋值运算符为"=",作用是把右侧的值或表达式结果存入左侧变量。单个"="与数学等号含义不同,是"存入"而非"相等"。两个等号"=="才表示相等判断(见关系运算)。赋值优先级很低,仅高于逗号运算。赋值.inointi=3;i=i+5;//i变为8//先取出i当前值3,//加5得8,再存回iSerial.println(i);//8要点:赋值=是把右侧值存入左侧变量;判断相等用==,勿混用。2.3.2基本算术运算加、减、乘、除与取余运算及运算优先级基本算术运算符五个基本运算符:+、-、*、/、%。整数相除结果取整:5/2=2(非2.5)。%为取余(求余数),不是百分比:5%2=1。不同类型运算按自动转换级别隐式转换:3.0/2=1.50。注意优先级:先乘除后加减,括号可改变顺序。算术运算.inointx=5,y=2,z;z=x+y;//7z=x-y;//3z=x*y;//10z=x/y;//2(整数除)z=x%y;//1(取余)z=x+x*y-y;//13z=(x+x)*y-y;//18易错点:两个整数相除结果为整数;需要小数结果时,先把其中一个转换为浮点型再运算。2.3.3自增自减运算前缀与后缀的区别、右结合规则与综合示例自增自减规则运算符++(自增1)与--(自减1)。前缀++x:先自增再使用;后缀x++:先使用再自增。自增自减遵循右结合规则。不建议在单一表达式中连续使用多个++/--,可读性差。不能同时出现在变量两侧,如++x++编译报错。自增自减.inointx=2;x++;//x=3++x;//x=4y=x++;//y=4,x=5y=++x;//x=6,y=6//复合示例(右结合)x=5;y=3;z=++x+y+++x++;//=(++x)+(y++)+(x++)//z=6+3+6=15建议:避免在单一表达式中使用多个自增/自减,以免影响可读性;++x++这类写法会编译报错。2.3.4复合运算算术/位运算与赋值结合的简化写法复合运算符复合运算是运算与赋值结合的简化写法。算术复合:+=、-=、*=、/=、%=位复合:&=、|=、^=、<<=、>>=a+=2等价于a=a+2。复合运算.inointa=10;a+=2;//a=12a-=3;//a=9a*=2;//a=18a/=4;//a=4(取整)a%=3;//a=1a<<=2;//a=4(左移2位)要点:复合赋值使代码更简洁,等价于先运算后赋值;复合位运算常用于标志位的置位/清零。2.3.5位运算按位与、或、异或、取反及移位运算位运算符:&|^~<<>>位运算直接对二进制位进行操作。&按位与:两位都是1结果为1|按位或:有一位是1结果为1^按位异或:两位不同结果为1~按位取反:0变1,1变0<<左移:整体左移,右侧补0(相当于乘2)>>右移:整体右移,左侧补0(相当于除2)位运算.inointa=0b1100;//12intb=0b1010;//10a&b//0b1000=8a|b//0b1110=14a^b//0b0110=61<<3//0b1000=88>>2//0b0010=2应用:用于寄存器/引脚位操作(bitSet/bitClear)、LED状态标志、数据打包解包。要点:位运算处理二进制位,配合bitSet/bitClear可精确控制寄存器或引脚的某一位。2.3.6关系运算比较大小关系,结果为true/false关系运算符关系运算用于比较大小,结果为true(1)或false(0)。==相等;!=不等;>大于;<小于;>=大于等于;<=小于等于。常用于if/while等条件判断中。关系运算.inointa=5,b=3;a>b//truea==b//falsea!=b//trueif(a>=3){Serial.println("OK");}辨析:判断相等必须用两个等号==;误用单个=赋值会导致条件恒成立等难以排查的问题。2.3.7逻辑运算逻辑与、或、非及短路求值逻辑运算符:&&||!逻辑运算操作布尔值,结果为true/false。&&逻辑与:两侧都为真结果为真||逻辑或:任一侧为真结果为真!逻辑非:取反短路求值:&&左侧为假不再算右侧;||左侧为真不再算右侧。逻辑运算.inoboolr;r=(3>5)&&(1<2);//false(3>5为假,短路)r=(3>5)||(1<2);//truer=!(3>5);//true(取反)优先级:逻辑非!最高,其次算术、关系,逻辑与&&高于逻辑或||。要点:逻辑运算返回true/false,常用短路特性优化判断,注意与位运算&、|区分。2.4程序流程控制三种基本结构顺序:从上到下依次执行;选择:按条件分支;循环:重复执行。选择结构if...else:二选一分支if...elseif...else:多选一switch...case:多分支选择,适合整型判断嵌套if:条件再套条件循环结构for:循环次数已知while:先判断后执行,可能一次都不执行do...while:先执行后判断,至少执行一次break/continue:跳出循环/跳过本次流程控制.ino//选择:if-elseif(x>10){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}//多分支:switchswitch(cmd){case1:Serial.println("A");break;case2:Serial.println("B");break;default:Serial.println("?");}//循环:forfor(inti=0;i<5;i++){Serial.println(i);}//循环:whilewhile(digitalRead(2)==HIGH){}2.5库函数与自定义函数库函数Arduino把常用操作封装成函数,直接用函数名加参数调用即可。数字I/O:pinMode、digitalWrite、digitalRead模拟/时间:analogRead、analogWrite、delay、millis数学:map、constrain、abs、pow、sqrt库函数示例.inointv=analogRead(A0);intp=map(v,0,1023,0,255);analogWrite(9,p);调用格式:函数名(实参)。库函数需在开头#include头文件引入(如LiquidCrystal.h)。自定义函数语法:返回类型函数名(形参列表){函数体;return返回值;}无返回值用void;有返回值用return返回。自定义函数.inointadd(inta,intb){returna+b;}voidblinkLED(intpin,intms){digitalWrite(pin,HIGH);delay(ms);digitalWrite(pin,LOW);}//调用示例ints=add(3,4);//s=7blinkLED(13,500);函数必须先定义(或先声明原型)再使用。2.5库函数各模块与常用函数Arduino常用库函数按模块分类一览模块常用函数数字I/OpinMode/digitalWrite/digitalRead模拟I/OanalogRead/analogWrite高级I/Otone/noTone/pulseIn/shiftOut/shiftIn时间millis/micros/delay/delayMicroseconds数学min/max/abs/constrain/map/pow/sqrt三角函数sin/cos/tan字符isAlpha/isDigit/isAlphaNumeric/isSpace/isLowerCase随机数randomSeed/random位操作lowByte/highByte/bitRead/bitWrite/bitSet/bitClear/bit外部中断attachInterrupt/detachInterrupt/interrupts/noInterrupts串口Serial.begin/print/println/available/read/write用法:库函数以"函数名(实参)"调用,需在开头#include相应头文件引入。本章小结1.程序结构setup()初始化一次,loop()无限循环;书写要规范分号、缩进与注释。2.数制转换掌握二/八/十六进制与十进制的互转;整数除2取余逆序,小数乘2取整顺序。3.数据与运算合理选择数据类型;区分常量/变量、全局/局部;注意类型转换与整数除法。4.流程控制if/switch实现选择,for/while实现循环;==判断相等,=是赋值。5.函数善用库函数提高效率;自定义函数先定义再调用,用return返回结果。6.调试利器串口监视器(Serial)是观察程序运行状态的重要调试手段。课后实践:尝试改造按钮控制LED程序——用数组存储5种延时值,通过for循环依次改变LED闪烁频率,并用串口监视器输出当前延时;再自定义一个函数实现"呼吸灯"效果。第三章Arduino基本示例传感器感知世界,Arduino让创意动起来《Arduino应用技术(第二版)》·温湿度·红外·液晶·超声波·声音·电机·数码管·键盘·多任务高职电子信息类专业教学用本章学习目标学完本章,你将能利用Arduino驱动传感器与执行器,完成一个个可运行的电子小实验。1掌握温湿度传感器及其使用2掌握人体运动红外传感器及其使用3掌握液晶显示器及其使用4掌握超声波传感器及其使用5掌握声音播放6了解电机驱动与控制7了解数码管驱动与显示8了解矩阵键盘的使用9了解多任务处理方法本章共10节:从温湿度检测、红外感应到液晶显示、超声波测距、声音控制、电机驱动、数码管、矩阵键盘,最后掌握多任务处理技巧。3本章地图:从"感知"到"行动"的十个实验每一节都按"认识模块→连接电路→编写程序→观察现象"四步完成一个小实验3.1温湿度检测DHT11数字

LM35模拟3.2人体红外PIR传感器

继电器输出3.3液晶显示LCD1602

I2C接口3.4超声波测距HC-SR04

声速测距3.5

声音电子琴

音乐播放3.6舵机驱动SG90伺服

角度控制3.7步进电机28BYJ-48

步进控制3.8数码管显示七段码

动态扫描3.9矩阵键盘键值读取

密码锁3.10

多任务millis

中断前五节以"传感器"为主,后五节以"执行器与系统"为主,最终回归多任务处理这一进阶主题。3.1.1DHT11温湿度传感器DHT11是一款具备已校准数字信号输出的温湿度传感器:内部集成电阻式感湿元件+NTC测温元件+高性能8位单片机。校准系数以程序形式存放在OTP内存中,检测信号时自动调用,因此可靠性高、长期稳定。单总线(单线制)串行接口,系统集成简单快捷4针单排引脚封装,体积超小、功耗低性价比极高,是入门温湿度检测的首选注意:避免安装在强风、强光直射或化学气体浓度过高的环境中主要性能指标湿度量程20%~90%RH湿度精度±5%RH温度量程0~50℃温度精度±2℃工作电压3.3V~5.5V工作电流平均约1mA响应时间湿度约25s,温度1~2s3.1.1DHT11电路连接DHT11为4针单排封装:第1脚VCC、第2脚DATA、第3脚悬空、第4脚GND图3-2DHT11与Arduino的连接第1脚接电源,第4脚接地VCC与数据脚间接4.7kΩ~10kΩ上拉电阻,保证空闲时数据线为高电平第2脚(数据)接Arduino的D3可加100nF去耦电容滤除电源噪声小提示:也可直接选购已封装好外围电路(含上拉电阻)的DHT11模块,接线更简单。3.1.1DHT11程序编写DHT11通信协议较复杂,可直接使用网络上成熟的dht库:把库文件放入IDE的libraries目录,再通过#include调用。dht11.ino·温湿度检测#include<dht.h>#defineDHT11_PIN3dhtDHT;voidsetup(){Serial.begin(9600);Serial.println("TherealtimeTemperature");Serial.println("andHumidityis:");}voidloop(){intchk=DHT.read11(DHT11_PIN);//读入数据Serial.print("Humidity:");Serial.print(DHT.humidity,1);Serial.println('%');Serial.print("Temparature");Serial.print(DHT.temperature,1);Serial.println('C');delay(2000);}运行结果(串口监视器)图3-3温湿度程序运行结果上传完成后打开串口监视器,选择正确端口与波特率9600,即可看到每秒刷新的温度与湿度。3.1.2LM35温度传感器图3-4LM35温度传感器(TO-92封装)线性输出:每升高1℃输出电压增加10mV25℃时约250mV,100℃时约1000mV工作电压4~30V;典型精度±0.25℃常用型号与测温范围LM35DH0℃~70℃LM35DZ0℃~100℃LM35CZ-40℃~110℃LM35AH-55℃~150℃一般精度越高,价格也稍高免校准:负载1mA时输出阻抗低至0.1Ω低功耗、自热效应极低(静止时约0.08℃),适合电池供电正负双电源供电可测量负温度3.1.2LM35电路连接与程序图3-5LM35电路连接接线建议:电源两端加0.1μF瓷片电容退耦;信号线尽量短,采用模拟接地,避免与数字地共用。

lm35.ino·串口每1秒刷新一次温度voidsetup(){Serial.begin(9600);}voidloop(){Serial.print((0.488*analogRead(A0)));Serial.println("C");delay(1000);}软件上可用多次取平均等算法,减少数据大幅波动。3.1温湿度传感器实物与原理补充DHT11传感器实物与LM35原理图,完善“认识模块”环节图3-1DHT11温湿度传感器图3-6LM35原理图小结:DHT11输出数字信号(单总线),LM35输出模拟电压(10mV/℃),是数字与模拟温度传感器的典型代表。3.2人体运动红外检测·PIR传感器运动传感器把"人或物体的运动"转化为电信号。按工作方式分为两类:主动式(AIR):主动发射辐射,检测其反射变化。被动式(PIR):不发射辐射,只接收人体体温发出的红外线(约10μm),应用最广泛。图3-7PIR模块工作电压4.5~20V;输出电压高3.3V/低0V;探测角度约120°,探测范围最大7m。工作原理(被动热释电)人体约10μm红外线→菲涅耳透镜增强→聚焦到热释电元件→温度变化使元件电荷失衡→电路检测处理后输出信号。图3-9PIR检测原理图3.2PIR传感器内部结构认识PIR的热电传感器与菲涅耳透镜,了解电路板各功能区图3-8PIR内部结构图3-10PIR电路板结构组成:热电传感器接收人体红外,菲涅耳透镜负责聚焦;电路板带3V稳压器、单次/重复触发选择及两个可调电位器。3.2PIR敏感度与延时调节电路板上的两个电位器分别调节感应距离与高电平保持时间图3-11敏感度调节图3-12延时时间调节调节:敏感度旋钮逆时针/往左增加感应距离(最左可达7m),顺时针/往右减小;延时旋钮决定高电平保持5s~5min。3.2PIR电路连接与继电器图3-14PIR与Arduino硬件电路连接图PIR信号输出端→ArduinoD2继电器信号端→ArduinoD3分别接通电源(VCC)与地线(GND)继电器常开/常闭输出端可连接大电流负载继电器引脚说明地连接0V信号低电平有效,输入低于约2V时继电器开启电源连接5VPIR电路板功能调节(表3-1)延时时间高电平停留5s~5min可调敏感度检测范围3~7m可调数字输出检测到运动输出高电平(3.3V)电源4~20V直流供电3.2继电器结构与连接实物了解继电器引脚(常开/常闭/公共),并查看PIR与Arduino的实物连接图3-13继电器结构示意图图3-15运动传感器与Arduino连接实物图接线:继电器三针接口分别接地、电源与信号(低电平有效),常开/常闭输出端可连接大电流负载。3.2PIR运动检测程序检测到人体运动→LED点亮、继电器动作→延时10s后自动关闭;无人时LED熄灭pir.ino·变量定义与setup()intledPin=13;//LED输出13脚intrelayInput=3;//继电器输出3脚intinputPin=2;//PIR输入2脚intpirState=LOW;//初始未侦测到动作intval=0;//读入引脚状态voidsetup(){pinMode(ledPin,OUTPUT);pinMode(inputPin,INPUT);pinMode(relayInput,OUTPUT);digitalWrite(relayInput,HIGH);Serial.begin(9600);}pir.ino·loop()主循环voidloop(){val=digitalRead(inputPin);if(val==HIGH){//检测到高电平digitalWrite(ledPin,HIGH);if(pirState==LOW){Serial.println("Motiondetected!");pirState=HIGH;digitalWrite(relayInput,LOW);Serial.println("TurnontheLamp!");delay(10000);//等待10sdigitalWrite(relayInput,HIGH);Serial.println("TurnofftheLamp!");}}else{digitalWrite(ledPin,LOW);if(pirState==HIGH){Serial.println("Motionended!");pirState=LOW;}}}要点:pirState用于记录状态变化,只在状态跳变时打印与动作,避免重复触发继电器。3.3液晶显示器(LCD1602)认识LCD1602液晶显示器的外观,2行×16字符点阵图3-16液晶显示器要点:本教材采用带PCF8574TI2C模块的LCD1602,仅用SDA、SCL两条数据线即可驱动,对比度由背面蓝色电位器调节。3.3液晶显示·LCD1602(I2C接口)传统LCD会占满几乎所有I/O口;本教材采用带PCF8574T/PCA8574I2C模块的LCD1602,仅用两条数据线即可驱动。I2C串行总线:SDA数据线+SCL时钟线,需上拉电阻,支持5V/3.3V。对比度由背面蓝色电位器调节;移除背光跳线帽即关背光。ArduinoLCD1602GNDGND5VVCCA4SDAA5SCL表3-2Arduino与LCD的接线注意:LCD1602默认I2C地址通常是0x27,也可能是0x37/0x3E/0x24,使用前需确认。图3-17Arduino与LCD电路连接图只用4根线(GND、VCC、SDA、SCL)即可点亮LCD,为其他外设省下大量I/O口。3.3安装液晶I2C库文件在ArduinoIDE库管理器中搜索并安装LiquidCrystal_I2C库图3-19安装液晶I2C库文件(一)图3-19安装液晶I2C库文件(二)安装:库管理器搜索LiquidCrystal_I2C→选择版本点击“安装”;也可用ZIP方式手动导入库文件夹。3.3寻找I2C地址与安装库i2c_scanner.ino·扫描总线上的设备地址#include<Wire.h>voidsetup(){Wire.begin();Serial.begin(9600);}voidloop(){byteerror,address;Serial.println("Scanning...");for(address=1;address<127;address++){Wire.beginTransmission(address);error=Wire.endTransmission();if(error==0){Serial.print("Foundat0x");if(address<16)Serial.print("0");Serial.println(address,HEX);}}delay(5000);}图3-18寻找I2C液晶地址(串口显示0x27)安装LiquidCrystal_I2C库(三选一)下载ZIP解压到libraries目录项目→加载库→添加.ZIP库…库管理器搜索安装3.3LCD显示程序lcd_display.ino·显示"Hello!world"#include<Wire.h>#include<LiquidCrystal_I2C.h>LiquidCrystal_I2Clcd(0x27,16,2);voidsetup(){lcd.init();//初始化LCD}voidloop(){lcd.setCursor(0,0);//光标第一行lcd.backlight();//打开背光lcd.print("Hello!");lcd.setCursor(0,1);//光标第二行lcd.print("world");}lcd(0x27,16,2)表示地址0x27、16列、2行;setCursor(列,行)定位光标。图3-20LCD实物显示效果拓展:两行文字向左滚动显示chara1[]="Helloall!";chara2[]="WelcometoNJCIT";voidloop(){lcd.setCursor(15,0);for(intp=0;p<26;p++){lcd.scrollDisplayLeft();lcd.print(a1[p]);delay(500);}lcd.clear();lcd.setCursor(15,1);}3.4超声波测距·HC-SR04图3-21超声波传感器HC-SR044引脚:VCC(5V)、GND、Trig(触发)、Echo(回响)工作过程1.Trig引脚触发测距:发送至少10μs高电平2.模块自动发射8个40kHz方波,并检测回波3.检测到回波后,Echo引脚输出高电平,其持续时间即超声波往返时间

图3-22超声波工作原理图3.4HC-SR04电路连接图3-23HC-SR04与Arduino连接图Echo→D2(回响信号输入)Trig→D3(触发信号输出)VCC→5V

GND→GND图3-25串口实时显示测量距离实验过程中通过串口实时查看距离;超出2~400cm量程时显示"Outofrange"。3.4HC-SR04连接实物图超声波模块与Arduino的实际接线效果,以及串口实时显示距离图3-24HC-SR04与Arduino连接实物图图3-27HC-SR04与Arduino显示连接实物图接线:Echo→D2、Trig→D3、VCC→5V、GND→GND;串口每1秒刷新一次距离值。3.4连接Arduino板到电脑用USB数据线将Arduino板连接到电脑,选择端口并下载程序图3-26连接Arduino板到电脑步骤:连接USB→IDE选择开发板Arduino/GenuinoUno→选择对应COM端口→点击上传。3.4超声波测距程序Trig发10μs高电平触发→pulseIn()测得Echo高电平宽度(往返时间)→换算成距离ultrasonic.ino·引脚与setup()#defineechoPin2//回声引脚#definetrigPin3//触发引脚voidsetup(){Serial.begin(9600);pinMode(trigPin,OUTPUT);pinMode(echoPin,INPUT);}ultrasonic.ino·loop()测距与输出voidloop(){floatduration,distance;digitalWrite(trigPin,LOW);delayMicroseconds(2);digitalWrite(trigPin,HIGH);delayMicroseconds(10);digitalWrite(trigPin,LOW);duration=pulseIn(echoPin,HIGH);distance=(duration/2)*0.0344

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论