当前位置: 首页 > news >正文

Arduino基础知识

目录: 

第1章 概述

1.1 Arduino简介

1.2 Arduino内部结构

第2章 Arduino编程

2.1 Arduino开发环境

2.2 Arduino语言概述

2.3 Arduino基本函数

第3章 Arduino通信教程

3.1 SPI通信

3.2 红外通信

3.3 WiFi通信

3.4 蓝牙通信

第4章 Arduino实验

1、接收串口数据并显示

第5章 问题解决

1、Linduino One上传程序失败

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

第1章 概述

1.1 Arduino简介

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

1.1.1 Arduino Uno

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

硬件端口描述,如上图。

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

POWER:电源;

ANALOG IN:模拟口。

1.1.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设计的扩展板。

1.1.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和一个复位按钮。

1.1.4 Arduino Leonardo

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

1.1.5 Arduino扩展板

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

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

1.2 Arduino内部结构

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

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

第2章 Arduino编程

2.1 Arduino开发环境

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

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

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

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

2.2 Arduino语言概述

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

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

2.3 Arduino基本函数

2.3.1 I/O操作函数

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

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

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

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

2.3.2 模拟I/O操作函数

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

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

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

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

2.3.3 高级I/O

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

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

2.noTone()

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

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

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

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

2.3.4 shiftOut(dataPin,clockPin,bitOrder,val)

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

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

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

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

2.3.6 时间函数

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

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

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

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

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

2.3.7 中断函数

1.外部中断函数

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

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

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

2.中断使能函数

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

noInterrupts(),禁止中断。

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

2.3.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")

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

2.3.9 等比映射函数

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

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

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

2.3.9 函数使用查询

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

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

第3章 Arduino通信教程

3.1 SPI通信

3.2 红外通信

3.3 WiFi通信

3.4 蓝牙通信

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

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

第4章 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”。

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

第5章 问题解决

1、Linduino One上传程序失败

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

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

相关文章:

  • 【入门4】数组——蛇形方阵
  • web自动化测试——入门篇01
  • 探索云原生技术之容器编排引擎-Kubernetes/K8S详解(5)
  • 软考中级(软件设计师)——面向对象程序设计(C++Java二选一的题15分-目标3分)
  • 《JavaSE-第十四章》之文件(一)
  • 【C++】命名空间输入输出缺省参数函数重载
  • C++ STL速成
  • 网络安全知识之什么是网络安全?
  • Mybatis----多表查询
  • @Autowired注解的实现原理
  • 【C语言】指针(进阶)
  • Opencv 图像处理:数字图像的必会知识
  • 【Linux】Linux下的编辑器——vim
  • JVM是什么?
  • 基于ssm广东东莞大益球队管理系统-计算机毕业设计源码+LW文档
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 「译」Node.js Streams 基础
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS 7 防火墙操作
  • create-react-app项目添加less配置
  • ES6简单总结(搭配简单的讲解和小案例)
  • HTTP那些事
  • iOS小技巧之UIImagePickerController实现头像选择
  • Lucene解析 - 基本概念
  • PHP那些事儿
  • Python连接Oracle
  • Vue2 SSR 的优化之旅
  • 构建工具 - 收藏集 - 掘金
  • 前端面试题总结
  • 驱动程序原理
  • 实战|智能家居行业移动应用性能分析
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 用jQuery怎么做到前后端分离
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • $L^p$ 调和函数恒为零
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (zhuan) 一些RL的文献(及笔记)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)elasticsearch 源码之启动流程分析
  • (十一)c52学习之旅-动态数码管
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转) Android中ViewStub组件使用
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net 获取url的方法
  • .NET面试题(二)
  • @Autowired和@Resource的区别
  • @FeignClient注解,fallback和fallbackFactory
  • @SentinelResource详解
  • [1525]字符统计2 (哈希)SDUT
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [CSS]中子元素在父元素中居中