程序运行结构

setup()

Arduino整体程序结构主要由 setup() 和loop()两个函数以及其他子函数构成。在Arduino中程序运行时将首先调用 setup() 函数。用于初始化变量设置针脚的输出\输入类型配置串口引入类库文件等等。每次 Arduino 上电或重启后,setup 函数只运行一次。
例如:

int buttonPin = 3;void setup()
{Serial.begin(9600);pinMode(buttonPin, INPUT);
}void loop()
{// ...
}

loop()

在 setup() 函数中初始化和定义了变量,然后执行 loop() 函数。顾名思义,该函数在程序运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制 Arduino 主控板。
示例如下:

int buttonPin = 3;// setup 中初始化串口和按键针脚.
void setup()
{beginSerial(9600);pinMode(buttonPin, INPUT);
}// loop 中每次都检查按钮,如果按钮被按下,就发送信息到串口void loop()
{if (digitalRead(buttonPin) == HIGH)serialWrite('H');elseserialWrite('L');delay(1000);
}

函数部分

pinMode()

该函数主要用于配置指定引脚的输入输出,语法结构为pinMode(pin,mode),其中pin:要设置模式的引脚;mode:INPUT或OUTPUT,在Arduino中模拟输入脚也能当做数字脚使用,,使用示例如下:
ledPin = 13 // LED连接到数字脚13

void setup()
{
pinMode(ledPin,OUTPUT); //设置数字脚为输出
}void loop()
{
digitalWrite(ledPin,HIGH); //点亮LEDdelay(1000);                  // 等待一秒digitalWrite(ledPin, LOW);    // 灭掉LED
延迟(1000); //等待第二个
}

digitalWrite()

该函数用于给一个数字引脚写入HIGH或者LOW。
如果一个引脚已经使用pinMode()配置为OUTPUT模式,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。如果引脚配置为INPUT模式,使用digitalWrite()写入HIGH值,将使内部20K上拉电阻(详见数字引脚教程)。写入LOW将会禁用上拉。上拉电阻可以点亮一个LED让其微微亮,如果LED工作,但是亮度很低,可能是因为这个原因引起的。补救的办法是 使用pinMode()函数设置为输出引脚。

注意:数字13号引脚难以作为数字输入使用,因为大部分的控制板上使用了一颗LED与一个电阻连接到他。如果启动了内部的20K上拉电阻,他的电压将在1.7V左右,而不是正常的5V,因为板载LED串联的电阻把他使他降了下来,这意味着他返回的值总是LOW。如果必须使用数字13号引脚的输入模式,需要使用外部上拉下拉电阻。

digitalWrite()语法规则:digitalWrite(pin, value) ,其中pin: 引脚编号(如1,5,10,A0,A3),value: HIGH or LOW ;

程序代码示例如下:

int ledPin = 13;                 // LED连接到数字13号端口void setup()
{pinMode(ledPin, OUTPUT);      // 设置数字端口为输入模式
}void loop()
{digitalWrite(ledPin, HIGH);   // 使LED亮delay(1000);                  // 延迟一秒digitalWrite(ledPin, LOW);    // 使LED灭delay(1000);                  // 延迟一秒
}

digitalRead()

该函数用于读取指定引脚的值,HIGH或LOW。语法规则:digitalRead(PIN) ,pin:你想读取的引脚号(int),数据读取之后,将返回HIGH 或 LOW 。程序示例如下:

ledPin = 13 // LED连接到13脚
int inPin = 7;   // 按钮连接到数字引脚7
int val = 0;  //定义变量存以储读值void setup()
{pinMode(ledPin, OUTPUT);      // 将13脚设置为输出pinMode(inPin, INPUT);      // 将7脚设置为输入
}void loop()
{val = digitalRead(inPin);   // 读取输入脚digitalWrite(ledPin, val);    //将LED值设置为按钮的值
}

模拟IO analogReference(type)

配置用于模拟输入的基准电压(即输入范围的最大值)。选项​​有:
DEFAULT:默认5V(Arduino板为5V)或3.3伏特(Arduino板为3.3V)为基准电压。
INTERNAL:在ATmega168和ATmega328上以1.1V为基准电压,以及在ATmega8上以2.56V为基准电压(Arduino
Mega无此选项) INTERNAL1V1:以1.1V为基准电压(此选项仅针对Arduino Mega)
INTERNAL2V56:以2.56V为基准电压(此选项仅针对Arduino Mega)
EXTERNAL:以AREF引脚(0至5V)的电压作为基准电压。

type:使用哪种参考类型(DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, 或者 EXTERNAL)。

注意事项

改变基准电压后,之前从anal​​ogRead()读取的数据可能不准确。 警告

不要在AREF引脚上使用使用任何小于0V或超过5V的外部电压。如果你使用AREF引脚上的电压作为基准电压,你在调用analogRead()前必须设置参考类型为EXTERNAL。否则,你将会削短有效的基准电压(内部产生)和AREF引脚,这可能会损坏您Arduino板上的单片机。

另外,您可以在外部基准电压和AREF引脚之间连接一个5K电阻,使你可以在外部和内部基准电压之间切换。请注意,总阻值将会发生改变,因为AREF引脚内部有一个32K电阻。这两个电阻都有分压作用。所以,例如,如果输入2.5V的电压,最终在在AREF引脚上的电压将为2.5

  • 32 /(32 + 5)= 2.2V。

analogRead()

从指定的模拟引脚读取数据值。 Arduino板包含一个6通道(Mini和Nano有8个通道,Mega有16个通道),10位模拟数字转换器。这意味着它将0至5伏特之间的输入电压映射到0至1023之间的整数值。这将产生读数之间的关系:5伏特/ 1024单位,或0.0049伏特(4.9 mV)每单位。输入范围和精度可以使用analogReference()改变。 它需要大约100微秒(0.0001)来读取模拟输入,所以最大的阅读速度是每秒10000次。
语法规则:analogRead(PIN) ,PIN:从输入引脚(大部分板子从0到5,Mini和Nano从0到7,Mega从0到15)读取数值,讲返回0~1023的整数值。

如果模拟输入引脚没有连入电路,由analogRead()返回的值将根据多项因素(例如其他模拟输入引脚,你的手靠近板子等)产生波动。

例子

int analogPin = 3;    //电位器(中间的引脚)连接到模拟输入引脚3//另外两个引脚分别接地和+5 V
int val = 0;  //定义变量来存储读取的数值void setup(){
serial.begin(9600); //设置波特率(9600)
}void loop()
{
val = analogRead(analogPin); //从输入引脚读取数值
serial.println(val); //显示读取的数值
}

analogWrite() - PWM

该函数用于从一个引脚输出模拟值(PWM)。可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。PWM信号的频率大约是490赫兹。
在大多数arduino板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在aduino Mega上,引脚2到13可以实现该功能。老的Arduino板(ATmega8)的只有引脚9、10、11可以使用analogWrite()。在使用analogWrite()前,你不需要调用pinMode()来设置引脚为输出引脚。

analogWrite函数与模拟引脚、analogRead函数没有直接关系。

语法:analogWrite(pin,value)
参数
pin:用于输入数值的引脚。
value:占空比:0(完全关闭)到255(完全打开)之间。

说明和已知问题

引脚5和6的PWM输出将高于预期的占空比(输出的数值偏高)。这是因为millis()和delay()功能,和PWM输出共享相同的内部定时器。这将导致大多时候处于低占空比状态(如:0 - 10),并可能导致在数值为0时,没有完全关闭引脚5和6。

例子

通过读取电位器的阻值控制LED的亮度int ledPin = 9;  // LED连接到数字引脚9
int analogPin = 3;  //电位器连接到模拟引脚3
int val = 0;  //定义变量存以储读值void setup(){
pinMode(ledPin,OUTPUT);  //设置引脚为输出引脚
}void loop()
{
val = analogRead(analogPin);  //从输入引脚读取数值
analogWrite(ledPin,val / 4);  // 以val / 4的数值点亮LED(因为analogRead读取的数值从0到1023,而analogWrite输出的数值从0到255)
}

通信-Serial

用于Arduino控制板和一台计算机或其他设备之间的通信。所有的Arduino控制板有至少一个串口(又称作为UART或USART)。它通过0(RX)和1(TX)数字引脚经过串口转换芯片连接计算机USB端口与计算机进行通信。因此,如果你使用这些功能的同时你不能使用引脚0和1作为输入或输出。

您可以使用Arduino IDE内置的串口监视器与Arduino板通信。点击工具栏上的串口监视器按钮,调用begin()函数(选择相同的波特率)。

Arduino Mega 有三个额外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX)。 若要使用这三个引脚与您的个人电脑通信,你需要一个额外的USB转串口适配器,因为这三个引脚没有连接到Mega上的USB转串口适配器。若要用它们来与外部的TTL串口设备进行通信,将TX引脚连接到您的设备的RX引脚,将RX引脚连接到您的设备的TX引脚,将GND连接到您的设备的GND。(不要直接将这些引脚直接连接到RS232串口;他们的工作电压在+/- 12V,可能会损坏您的Arduino控制板。)

Arduino Leonardo板使用Serial 1通过0(RX)和1(TX)与viaRS-232通信,。Serial预留给使用Mouse and Keyboard libarariies的USB CDC通信 。更多信息,请参考Leonardo 开始使用页和硬件页。
函数

if (Serial)
available()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println()
read()
readBytes()
readBytesUntil()
setTimeout()
write()
SerialEvent()

Examples

ReadASCIIString
ASCII Table
Dimmer
Graph
Physical Pixel
Virtual Color Mixer
Serial Call Response
Serial Call Response ASCII

中断attachInterrupt(interrupt, function, mode)

当发生外部中断时,调用一个指定函数。当中断发生时,该函数会取代正在执行的程序。大多数的Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。
arduino Mege有四个外部中断:数字2(引脚21),3(20针),4(引脚19),5(引脚18)。

语法:
interrupt:中断引脚数
function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。
mode:定义何时发生中断以下四个contstants预定有效值:
LOW 当引脚为低电平时,触发中断
CHANGE 当引脚电平发生改变时,触发中断
RISING 当引脚由低电平变为高电平时,触发中断
FALLING 当引脚由高电平变为低电平时,触发中断.

注意事项

当中断函数发生时,delay()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。

使用中断

在单片机自动化程序中当突发事件发生时,中断是非常有用的,它可以帮助解决时序问题。一个使用中断的任务可能会读一个旋转编码器,监视用户的输入。

如果你想以确保程序始终抓住一个旋转编码器的脉冲,从来不缺少一个脉冲,它将使写一个程序做任何事情都要非常棘手,因为该计划将需要不断轮询的传感器线编码器,为了赶上脉冲发生时。其他传感器也是如此,如试图读取一个声音传感器正试图赶上一按,或红外线槽传感器(照片灭弧室),试图抓住一个硬币下降。在所有这些情况下,使用一个中断可以释放的微控制器来完成其他一些工作。
程序示例

int pin = 13;
volatile int state = LOW;void setup()
{pinMode(pin, OUTPUT);attachInterrupt(0, blink, CHANGE);
}void loop()
{digitalWrite(pin, state);
}
void blink()
{state = !state;
}

详情参考:[https://wiki.nxez.com/arduino:language]

Arduino学习笔记相关推荐

  1. Arduino学习笔记(1):太极创客 第一部分

    Arduino学习笔记 太极创客 第一部分 笔记 1-5 变量 1-6 程序结构 1-7 变量操作 1-8/1-9 程序函数 1-10/1-11 数字输出 1-12 面包板 1-13/1-14 数字输 ...

  2. Arduino学习笔记2

    一.蜂鸣器输出实验 1.源代码 int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口 void setup() { pinMode(buzzer,OUTPUT);//设置对应的输出模式 ...

  3. arduino 学习笔记及课件01基础入门

    arduino 学习笔记及课件01基础入门 以下学习笔记中图片部分由太极创客视频截图所得 概论 一. 引脚及信号 1.1引脚模式 INPUT:当Arduino没有使用上拉电阻或下拉电阻而直接与开放的开 ...

  4. 【Arduino学习笔记】E18-D50NK红外避障传感器使用说明

    网上淘的E18-D50NK到货了,闲着没事试了一下,顺便做个笔记 就是这货,红色接5V正极,绿色接GND,黄色为信号线 后面的小圆孔可以调节有效检测距离 arduino代码如下: int E18Pin ...

  5. 【Arduino学习笔记】系列1 - 定时器配置

    目录 一.Arduino定时器简介 二.定时器基本概念 定时器速度(HZ) = Arduino时钟速度(16MHz) / 预分频器系数 中断频率(Hz)=(Arduino时钟速度16MHz)/(预分频 ...

  6. 【Arduino学习笔记】使用L298N电机驱动模块驱动直流电机

    L298N是Arduino的电机驱动模块,能驱动步进电机和两路直流电机,驱动步进电机和直流电机的文章网上百度一大堆,这里我想说的是L298N模块外接独立12V电压驱动电机的方法.我使用的L298N模块 ...

  7. Arduino 学习笔记_3 案例:按下按钮生成一位随机数字,在数码管中显示

    猜数字案例 有一位8段数码管,和一个按钮.每次按下按钮,随机生成一个0~9的数并在LED显示器上显示出来. 首先先可以参考下官网上的案例.这个案例是从0到9所有数字循环显示,里面用到了数码管对应引脚, ...

  8. 【Arduino学习笔记】手把手教你使用ESP8266----①接线篇

    在物联网时代搞技术就必须跟网络沾上边,这两天把前段时间淘宝上淘的ESP8266模块拿出来捣鼓了一下,初学Arduino,对硬件模块没啥了解,刚开始简直无从下手,在几个技术QQ群求教未果,技术大大们对我 ...

  9. Arduino学习笔记一:一篇讲明白什么是Arduino

    "前言:什么是Arduino以及能干嘛?" 一.前言 二.Arduino是什么? 三.Arduino能干什么? 四.Arduino适合什么人? 五.Arduino的优缺点 优点 缺 ...

  10. Arduino学习笔记day2——RGB LED的使用

    前言 上回玩了下最基本的LED,直接通过数字引脚点亮LED,很基本.这次来玩一下基本+1的东西,RGB LED. RGB LED呼吸灯实验 RGB LED能发出三种颜色的光,Red.Green和Blu ...

最新文章

  1. 美妆AI要抢李佳琦的饭碗?
  2. 怎么判断适合学java_如何知道自己是否适合学习java开发
  3. java实现遍历树形菜单方法——数据库表的创建
  4. JSP的四大作用域和九大内置对象
  5. Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题
  6. letecode [204] - Count Primes
  7. gcn 图卷积神经网络_GCN图卷积网络入门详解
  8. NOI Online能力测试2视频版,让我们看看出题专家怎么说!(入门组)
  9. Eclipse安装插件的“最好方法”:dropins文件夹的妙用
  10. 【雷达与对抗】【2004.05】合成孔径雷达X波段发射机和频率分配单元的设计与实现
  11. 《一天学懂深度学习》PPT翻译一
  12. 朴素贝叶斯python实现预测_Python朴素贝叶斯预测.PDF
  13. 8、共射放大电路一般性质与放大电路的直流偏移
  14. upupoo启动不了 mysql_【upupoo动态桌面壁纸和phpMySQLConsole 0.1哪个好用】upupoo动态桌面壁纸和phpMySQLConsole 0.1对比-ZOL下载...
  15. ASP医院管理系统—病历管理系统的设计与实现
  16. 渗透测试工具网址--自用
  17. 抢票原理通俗解释,​候补购票是什么?你还在交智商税吗?
  18. 诸葛io的技术架构图_大数据平台的技术演化之路 诸葛io平台设计实例
  19. 关于如何搭建网站并发布上线
  20. U盘单个文件最大4G限制问题

热门文章

  1. Navicat连接本地数据库10038,1251
  2. 蘑菇战争2显示没有连接服务器,蘑菇战争2新手怎么玩?四步带你解决新手难关[多图]...
  3. 标准库函数begin和end的使用
  4. 普通期刊论文发表录用时间一般要多久
  5. 3656. 心与心的距离
  6. 常用的学术论文研究方法(着重讲解文献法)
  7. 【LeetCode刷题——数据结构篇】
  8. git submodule update报错: error: Server does not allow request for unadvertised object
  9. Java锁原理与应用
  10. XTU OJ 素数1076