目录:

一、概述

1、关于Arduino

2、Arduino简介

3、Arduino内部结构

二、Arduino编程

1、Arduino开发环境

2、Arduino语言概述

3、Arduino基本函数

1)I/O操作函数   2)模拟I/O操作函数   3)高级I/O   4)shiftOut(dataPin,clockPin,bitOrder,val)

5)pulseIn(pin,state,timeout)   6)时间函数   7)中断函数   8)串口收发函数

9)等比映射函数   10)函数使用查询

4、Arduino内存优化

1)串口监视输出用   2)将常量存入Flash   3)全局变量与局部变量

4)尽量使用占用内存少的数据类型

5、第三方库

1)通过“库管理器”   2)通过“.zip库”   3)设置库位置   4)加载库的学习

三、Arduino通信教程

1、SPI通信

2、红外通信

3、WiFi通信

4、蓝牙通信

四、Arduino实验

1、接收串口数据并显示

10、实战库仑计(电池电量计)

1)项目简介   2)硬件连接   3)资料下载   4)加载到Arduino

五、Arduino烧录程序保护知识产权

1、在Arduino IDE上生成.hex文件

2、将Hex烧录进Arduino板子

六、Arduino定时器

1、定时器介绍

2、定时器的使用

------------------------------------------------------------------------------------------------------------------------

一、概述

1、关于Arduino

①当我们学习做一些东西时,会发现基础的单片机编程较为复杂。需要直接操作寄存器、处理中断、定时器等,所需时间也长。在这种情况下Arduino应运而生,它是将单片机的使用与控制高度封装后产生的一个平台。注意:它是一个平台,不是指某一种单片机。

②Arduino的官方编辑器,没有代码提示功能,很多时候会因为大小写的错误导致调用函数无效。最糟糕的是没有代码跳转功能,不能设置断点,调试困难。只要修改项目,就得编译一堆库,编译时间长,效率低下。做个项目手都敲的累。

③第三方开发工具的下载与使用移步:Visual Studio 2022开发Arduino详述。

④中文社区:https://www.arduino.cn/。

⑤在线模拟网站:https://wokwi.com/。

⑥Arduino开发板上标识的输出端口号与其AVR单片机自身端口号不一定一致。

------------------------------------------------------------

2、Arduino简介

Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。以下介绍几个较典型的开发板。

1) Arduino Uno

Uno的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出)、6路模拟输入、一个16MHz晶体振荡器、一个USB接口、一个电源插座、一个ICSP header和一个复位按钮。

硬件端口描述,如上图。

DIGITAL-PWM~:普通数字口,~PWM输出口;

POWER:电源;

ANALOG IN:模拟输入口,可配置为数字口。

2)Arduino Mega 2560

Arduino Mega 2560是采用USB接口的核心电路板,具有54路数字输入/输出,适合需要大量I/O接口的设计。处理器核心是ATmega 2560,同时具有54路数字输入∕输出口(其中16路可作为
PWM输出)、16路模拟输入、4路UART接口、一个16MHz晶体振荡器、一个USB接口、一个电源插座、一个ICSP header和一个复位按钮。Arduino Mega 2560也能兼容为Arduino Uno设计的扩展板。

3)Arduino Nano

Arduino Nano是Arduino USB接口的微型版本,其处理器核心是Atmega 168(Nano2.x)和Atmega 328(Nano3.0),同时具有14路数字输入∕输出口(其中6路可作为PWM输出)、8路模拟输入、一个16MHz晶体振荡器、一个Mini-B USB接口、一个ICSP header和一个复位按钮。

4)Arduino Leonardo

Arduino Leonardo是基于ATmega32U4的一个微控制器板。它有20个数字输入/输出引脚(其中7个可用于PWM输出、12个可用于模拟输入)、一个16 MHz的晶体振荡器、一个Micro USB接口、一个DC接口、一个ICSP接口以及一个复位按钮。

5)Arduino扩展板

较典型的是Proto Shield原型扩展板、GPRS Shield扩展板、Arduino Ethernet W5100 R3 Shield网络扩展板、WizFi210扩展板、Arduino L298N电机驱动扩展板、Arduino传感器扩展板等。

------------------------------------------------------------

3、Arduino内部结构

Arduino平台的基础就是AVR指令集的单片机,因此认清Arduino之前需要了解什么是单片机。移步“单片机、PLC、PLD”专栏,不再赘述。

------------------------------------------------------------------------------------------------------------------------

二、Arduino编程

1、Arduino开发环境

Arduino集成开发环境(IDE)是一个在计算机里运行的软件,可以上传不同的程序,而Arduino的编程语言也是由Processing语言改编而来的。Arduino没有程序跳转功能、单步执行等,不好调试,推荐使用第三方工具,比如Visual Micro。

几点注意:

①每次打开串口监视器,相当于对开发板做一次软复位。

②Arduino文件名不能有空格。

------------------------------------------------------------

2、Arduino语言概述

基本同C语言,移步“编程类”专栏,不再赘述。

------------------------------------------------------------

3、Arduino基本函数

1)I/O操作函数

(1)pinMode(pin,mode),将制定的针脚配置成输出或输入,模拟I/O无需定义。注意:模拟输入口也能当作数字口使用。

(2)digitalWrite(pin,value),给一个数字针脚写入HIGH或者LOW。注意:数字13号针脚难以作为数字输入使用,因为大部分的控制板上使用了一颗LED和一个电阻与其连接。

(3)int digitalRead(pin),读取指定针脚的值,HIGH或LOW。

---------------------------------

2)模拟I/O操作函数

(1)analogReference(type),设定用于模拟输入的基准电压(输入范围的最大值)。

(2)analongRead(),从指定的模拟引脚读取数值。

(3)analogWrite(),从一个针脚输出模拟值(脉冲宽度调整,Pulse Width Modulation,PWM),让LED以不同的亮度点亮或驱动电机以不同速度旋转。

---------------------------------

3)高级I/O

(1)tone(),在一个针脚上产生一个特定频率的方波(50%占空比)。

注意:如果要在多个针脚是产生不同的音调,则要在对下一个针脚使用tone()函数前,先使用noTone()函数。

(2)noTone()

(3)ShiftOut(),将数据的一个字节一位一位地移出。

(4)shiftIn(),将数据的一个字节一位一位地移入。

(5)pulseIn(),读取一个针脚的脉冲(HIGH或LOW)。

---------------------------------

4)shiftOut(dataPin,clockPin,bitOrder,val)

shiftOut函数能够将数据通过串行的方式在引脚上进行输出,相当于一般意义上的同步串行通信。

---------------------------------

5)pulseIn(pin,state,timeout)
pulseIn函数用于读取引脚脉冲的时间长度,而脉冲可以是HIGH或LOW。

---------------------------------

6)时间函数

(1)Millis(),返回Arduino开发板运行当前程序开始的毫秒数。

(2)micros(),返回Arduino开发板从运行当前程序开始的微秒数,这个数字将在约70分钟后溢出(归零)。

(3)delay(),程序设定的暂停时间(单位毫秒)。

(4)delayMicroseconds(),使程序暂停指定的一段时间(单位ms)。

---------------------------------

7)中断函数

(1)外部中断函数

attachInterrupt(interrupt,function,mode),当发生外部中断时,调用一个指定的函数。

注意:中断函数中,delay()不会生效,millis()的数值不会持续增加。当中断发生时,串口收到的数据可能会遗失。在中断函数里面使用到的全局变量应该声明为volatile变量。

detachInterrupt(interrupt),关闭给定的中断。

(2)中断使能函数

interrupts(中断),重新启用中断(使用noInterrupts()命令后将被禁用)。

noInterrupts(),禁止中断。

---------------------------------

8)串口收发函数

(1)Serial.begin(speed),将串行数据传输速率设置为bit/s(波特)。

(2)int Serial.available(),从串口读取有效的字节数(字符)。

(3)int Serial.read(),读取传入的串口的数据,read()继承自Stream类。

(4)Serial.flush(),等待超出的串行数据完成传输(在1.0及以上的版本中,flush()语句的功能不再是丢弃所有进入缓存器的串行数据)。

(5)Serial.print(data),以ASCII文本形式打印数据到串口输出。

(6)Serial.println(data),打印数据到串行端口,输出人们可识别的ASCII码文本并回车(ASCII13,或"\r")及换行(ASCII10,或"\n")

---------------------------------

9)等比映射函数

map()可以用来将某一数值从一个区间等比映射到一个新的区间。

map (x, in_min, in_max, out_min, out_max)

---------------------------------

10)函数使用查询

全部Arduino函数参见http://www.arduino.cc,或者http://www.taichi-maker.com之Arduino开发之Arduino编程。

------------------------------------------------------------

4、Arduino内存优化

1)串口监视输出用

Serial.println("Test");  //Test存入SRAM

Serial.println(F("Test"));  //Test存入Flash

---------------------------------

2)将常量存入Flash

const int a=125;  //125存入SRAM

const int PROGMEM a=125;  //125存入Flash

---------------------------------

3)全局变量与局部变量

局部变量共享SRAM,全局变量独享SRAM。尽量多使用局部变量代替全局变量。

---------------------------------

4)尽量使用占用内存少的数据类型

bool a;  //1个位

byte a  //1个字节

int a;  //2个字节

------------------------------------------------------------

5、第三方库

1)通过“库管理器”

---------------------------------

2)通过“.zip库”

---------------------------------

3)设置库位置

---------------------------------

4)加载库的学习

我们可以通过示例查看代码。

也可以在库安装目录内查看。

.md文件详细描述了当前库文件的内容。若用Windows自带词本打开,不好阅读。

推荐Notepad++,文字不至于连成一串。

------------------------------------------------------------------------------------------------------------------------

三、Arduino通信教程

1、SPI通信

2、红外通信

3、WiFi通信

4、蓝牙通信

相关例程移步:https://download.csdn.net/download/liht_1634/86814659。

------------------------------------------------------------------------------------------------------------------------

四、Arduino实验

1、接收串口数据并显示

void setup()
{Serial.begin(9600);Serial.println("Input Data:");
}int RecieveData; //int型数据将显示ascii码,改为char即可
void loop()
{if(Serial.available()>0){RecieveData = Serial.read();Serial.println(RecieveData);delay(10);}
}

缓冲器中有“2”和“3”,返回值的数量:2,先读取第1个返回值“2”。

缓冲器中只有“3”,返回值的数量:1,读取第2个返回值“3”。

空缓冲器返回“-1”。

------------------------------------------------------------

10、实战库仑计(电池电量计)

1)项目简介

测量电池组电压、电流和功率,0.3% 电流和电压精度,通过隔离isoSPI发送给上位机。

---------------------------------

2)硬件连接

LTC2949内的微控制器的isoSPI与LTC6820连接,由LTC6820转为4线SPI,再与Linduino One通信。由Linduino One与电脑通信。

---------------------------------

3)资料下载

在ADI官网搜素“Linduino”,如下图。

资料可以在相关链接中下载,特别留意“sketchbook”为代码,其中没有LTC2949代码库,需要从官方人员获取。正确加载后如下图所示。

---------------------------------

4)加载到Arduino

(1)硬件设置

可知与Arduino Uno兼容,在IDE中需选择“Arduino Uno”。

(2)代码导入

------------------------------------------------------------------------------------------------------------------------

五、Arduino烧录程序保护知识产权

产品设计公司使用Arduino开发了一些产品,卖给客户,遇到产品需要升级的时候又不想提供源代码,既要保护知识产权又要烧录程序,提供如下解决方案。

1、在Arduino IDE上生成.hex文件
1)首先,使用“Arduino IDE”软件打开源文件,即.ino文件。
2)跳转到Sketch > Export compiled Binary。

3)等文件编译转换完成后,跳转至Sketch > Show Sketch Folder。

4)此时弹出窗口的文件夹中应该有两种文件:.ino和.hex文件,选取生成的.hex文件。

------------------------------------------------------------

2、将Hex烧录进Arduino板子
把上一步骤生成的.hex文件导入 “Arduloader” 软件进行烧录,步骤如下图所示。
“Arduloader”是一款.hex文件烧录工具,支持所有hex格式程序烧录,选择要烧录的hex文件,所使用的COM串口,选择硬件型号,Upload烧录即可。

------------------------------------------------------------------------------------------------------------------------

六、Arduino定时器

1、定时器介绍

UNO和NANO都使用的是ATmega328芯片,这款芯片有3个定时器,Timer0、Timer1、
Timer2,其中Timer0和Timer2都是8位寄存器(256)、Timer1是16位寄存器(65536),意味着更高的分辨率。

mege2560使用的是ATmege2560芯片,这款芯片有6个定时器,在328的基础上,增加了Timer3、Timer4、Timer5。这三个定时器都是16位的寄存器。

定时器 位数 封装函数 mega2560引脚对应
Timer0 8bit delay() , millis() 和 micros()等 4,13
Timer1 16bit UNO的servo库 11,12
Timer2 8bit tone()等 9,10
Timer3 16bit 2,3,5
Timer4 16bit 6,7,8
Timer5 16bit mega2560的servo库 46,45,44

------------------------------------------------------------

2、定时器的使用
可以到网上下载TimerOne, TimerThree等库文件,TimerOne.h就对应为timer1定时器。

TimerOne.h的下载链接:TimerOne-1.1.0.zip。下载不了移步:https://download.csdn.net/download/liht_1634/86919117

#include<TimerOne.h>
#define LedState digitalRead(A0)  //读出引脚A0的状态int count=1; //记录定时次数
void setup()
{pinMode(A0,OUTPUT);  //定义模拟口A0为数字输出口Timer1.initialize(10000);  //设置中断速度10mSTimer1.attachInterrupt(LedFlash);  //关联中断函数interrupts(); //开启中断
}void LedFlash()
{count++;if(count>=100){count=1;digitalWrite(A0,!LedState); //10mS*100=1S,LedState改变一次}
}void loop()
{}

引自:https://blog.csdn.net/TarshinHUANG/article/details/99580738。

------------------------------------------------------------------------------------------------------------------------

Arduino基础与进阶相关推荐

  1. 计算机编程书籍-笨办法学Python 3:基础篇+进阶篇

    编辑推荐: 适读人群 :本书适合所有已经开始使用Python的技术人员,包括初级开发人员和已经升级到Python 3.6版本以上的经验丰富的Python程序员. "笨办法学"系列, ...

  2. 简明python教程 豆瓣-福利分享:个人整理的Python书单,从基础到进阶

    原标题:福利分享:个人整理的Python书单,从基础到进阶 我挑选的一些书籍,大家可以自行到书店或是网上自己选购.也由于个人水平有限,很可能大家觉得优秀的书籍没有列出,如果大家有觉得不错的书籍,欢迎大 ...

  3. python网络爬虫权威指南 豆瓣_福利分享:个人整理的Python书单,从基础到进阶...

    原标题:福利分享:个人整理的Python书单,从基础到进阶 我挑选的一些书籍,大家可以自行到书店或是网上自己选购.也由于个人水平有限,很可能大家觉得优秀的书籍没有列出,如果大家有觉得不错的书籍,欢迎大 ...

  4. Database之SQLSever:SQLSever基础知识进阶、软件安装注意事项、软件使用经验总结之详细攻略

    Database之SQLSever:SQLSever基础知识进阶.软件安装注意事项.软件使用经验总结之详细攻略 目录 SQLSever基础知识进阶 SQL与T-SQL.PL-SQL的区别 数据库相关基 ...

  5. 二进制函数_Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表...

    书接前文,本文主要介绍 Go 二进制文件中 Meta Information 的解析,与函数符号和源码文件路径列表的提取.最后详细介绍一下 Moduledata 这个结构.传送门:Go二进制文件逆向分 ...

  6. 蓝牙基础知识进阶——Physical channel

    蓝牙基础知识进阶--Physical channel 二.物理通道 物理通道是piconet区分的标准,它是蓝牙系统结构层次中的最底层了. Q1:物理通道有哪些类型 物理通道通常可以分为四种类型: 1 ...

  7. 由浅入深学java iso_由浅入深学Java:基础、进阶与必做260题 PDF扫描版[47MB]

    由浅入深学Java:基础.进阶与必做260题讲解了Java方方面面的知识,全书共分为4篇共28章,第1篇从最基本的JDK安装讲起,包括基本语法与数据类型.数组.字符串.程序控制语句.面向对象编程.继承 ...

  8. 由浅入深学java pdf_由浅入深学Java:基础、进阶与必做260题 PDF_IT教程网

    资源名称:由浅入深学Java:基础.进阶与必做260题 PDF 第1篇  语言基础篇 第1章  Java入门(教学视频:18分钟) 1.1  Java简介 1.2  Java的特点 1.3  JDK的 ...

  9. Docker基础、进阶笔记,为k8s的学习预预热

    标题 Docker基础.进阶笔记,为k8s的学习预预热 笔记来源于视频: 狂神docker基础篇 狂神docker进阶篇 笔记中图片有些取自于:这位博主的两篇docker笔记中的一些图片 百度云笔记工 ...

最新文章

  1. 如何禁止灵格斯的新词锐词弹出框
  2. php 继承内核中的基类,php – 从基类调用继承类的父方法
  3. 北大OJ百练——4073:最长公共字符串后缀(C语言)
  4. Activiti学习(二)数据表结构
  5. python求导函数的值_python怎么实现函数求导
  6. 设计模式的一些小整理
  7. Java执行系统命令策略
  8. ie浏览器样式兼容写法_IE浏览器兼容问题-----html和css的兼容写法
  9. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
  10. 一键安装WinRAR主题界面美化
  11. 电子元器件选型——MOSFET
  12. 用PS抽出滤镜让头发溶于背景nbsp;简单…
  13. 罗马数字转化阿拉伯数字
  14. HDLCPPP原理与配置
  15. 1987年国际C语言混乱代码大赛获奖的一行代码
  16. 一个Word中的样式导入另一个Word
  17. 【转载】C/C++ 笔试面试(1)—— sizeof
  18. PHP 蒙太奇马赛克拼图,AndreaMosaic制作一幅马赛克拼图
  19. web 前端的浏览器
  20. 分布式应用:从CAP理论到PACELC理论

热门文章

  1. Fortran笔记,Module
  2. 少儿编程教育培训机构加盟
  3. UE导入FBX、GLTF模型
  4. 网络-----各种协议等
  5. PyQt5 教科书级完整教程(一)安装与入门
  6. Excel单元格设置成下拉选
  7. 第一周--Centos7中的 at 使用技巧及其历史命令管理和用法
  8. 文章什么时候发布最有利于被搜索引擎收录?
  9. 第一章 计算机概要和技术
  10. 佰马加入智慧灯杆产业联盟