"); //-->
结构
Arduino程序可以分为三个主要部分:结构,值(变量和常量)和函数。在本教程中,我们将逐步了解Arduino软件程序,以及如何编写程序而不会出现任何语法或编译错误。
软件结构包括两个主要函数:
· Setup()函数
· Loop()函数
Void setup ( ) {
}
程序启动时会调用 setup()函数。使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino板的每次上电或复位后运行一次。Void Loop ( ) {
}
在创建了用于初始化并设置初始值的setup()函数后,loop() 函数,正如它的名称所指,允许你的程序连续循环的更改和响应。可以使用它来主动控制Arduino板。
延时函数
Delay(ms)void delay (unsigned long ms)
延时(毫秒)
延时, 单位毫秒(1秒有1000毫秒).
注意:
参数为unsigned long, 因此在延时参数超过32767(int型最大值)时, 需要用"UL"后缀表示为无符号 长整型, 例如: delay(60000UL);. 同样在参数表达式, 切表达式中有int类型时, 需要强制转换为 unsigned long类型, 例如: delay((unsigned long)tdelay * 100UL);.
一下例子设置13引脚对应的LED等以1秒频率闪烁:int ledPin = 13; // LED connected to digital pin 13void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output}void loop(){
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second}
DelayMicroseconds(us)void delayMicroseconds (unsigned int us)
延时(微秒)
延时, 单位为微妙(1毫秒有1000微妙). 如果延时的时间有几千微妙, 那么建议使用 delay 函数. 目前参数最大支持16383微妙(不过以后的版本中可能会变化).
以下代码向第8号引脚发送脉冲, 每次脉冲持续50微妙的时间.int outPin = 8; // digital pin 8void setup(){
pinMode(outPin, OUTPUT); // sets the digital pin as output}void loop(){
digitalWrite(outPin, HIGH); // sets the pin on
delayMicroseconds(50); // pauses for 50 microseconds
digitalWrite(outPin, LOW); // sets the pin offIO操作函数
pinMode()函数
pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。
pinMode()函数语法Void setup () {
pinMode (pin , mode);
}
• pin - 你希望设置模式的引脚的编号
• mode - INPUT,OUTPUT或INPUT_PULLUP。
• 示例int button = 5 ; // button connected to pin 5int LED = 6; // LED connected to pin 6void setup () {
pinMode(button , INPUT_PULLUP);
// set the digital pin as input with pull-up resistor
pinMode(button , OUTPUT); // set the digital pin as output}void setup () {
If (digitalRead(button ) == LOW) // if button pressed {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms
}
}
•
digitalWrite()函数
digitalWrite()函数用于向数字引脚写入HIGH或LOW值。如果该引脚已通过pinMode()配置为OUTPUT,则其电压将被设置为相应的值:HIGH为5V(或3.3V在3.3V板上),LOW为0V(接地)。如果引脚配置为INPUT,则digitalWrite()将启用(HIGH)或禁止(LOW)输入引脚的内部上拉。建议将pinMode()设置为INPUT_PULLUP,以启用 内部上拉电阻。
如果不将pinMode()设置为OUTPUT,而将LED连接到引脚,则在调用digitalWrite(HIGH)时,LED可能会变暗。在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。
digitalWrite()函数语法Void loop() {
digitalWrite (pin ,value);
}
• pin - 你希望设置模式的引脚的编号
• value - HIGH或LOW。
• 示例int LED = 6; // LED connected to pin 6void setup () {
pinMode(LED, OUTPUT); // set the digital pin as output}void setup () {
digitalWrite(LED,HIGH); // turn on led
delay(500); // delay for 500 ms
digitalWrite(LED,LOW); // turn off led
delay(500); // delay for 500 ms}
digitalRead()
说明
读取数字引脚的 HIGH(高电平)或 LOW(低电平)。
语法
digitalRead(pin)
参数
pin:被读取的引脚号码
返回值
HIGH 或 LOWconst int ledPin = 13;
const int inputPin = 2;
// 当Arduino控制器通电或复位后,setup函数会运行一次void setup()
{
//将引脚13设置为输出模式
pinMode(ledPin, OUTPUT);
//将引脚2设置为输入上拉模式
//引脚2与外部按钮连接
pinMode(inputPin, INPUT_PULLUP);
}
// 当Arduino控制器通电或复位后,loop函数会反复运行void loop(){ // 读取引脚2的输入情况
// 开关闭合后,引脚2将获得低电平信号
int val = digitalRead(inputPin);
// 检查引脚2是否为低电平
// 当按钮按下时,引脚2为低电平,点亮引脚13 LED
// 当按钮未按下,引脚2为高电平,熄灭引脚13 LED
if (val == LOW)
{
digitalWrite(ledPin, HIGH);
} else
{
digitalWrite(ledPin, LOW);
}
}
analogRead()函数
Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。
在Arduino板的右下角,你会看到6个标记为“Analog In”的引脚。这些特殊引脚不仅可以告知是否有电压施加给它们,还可以告知它们的值。通过使用analogRead()函数,我们可以读取施加到其中一个引脚的电压。
此函数返回0到1023之间的数字,表示0到5伏特之间的电压。例如,如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。
analogRead()函数语法
analogRead(pin);
• pin - 要读取的模拟输入引脚的编号
• 示例int analogPin = 3;//potentiometer wiper (middle terminal)
// connected to analog pin 3 int val = 0; // variable to store the value readvoid setup() {
Serial.begin(9600); // setup serial}
void loop() {
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value}
IO引脚说明
数字I/O口 Digital IO
Arduino 引脚号直接对应ESP8266 GPIO 引脚。pinMode,digitalRead,和 digitalWrite 函数照常使用,所以读取GPIO2引脚,这样写:digitalRead(2) 。
数字引脚 0~15可以设置为 INPUT,OUTPUT 或者 INPUT_PULLUP 模式。引脚 16可以设置为INPUT,OUTPUT 或者 INPUT_PULLDOWN_16 模式。在启动时,引脚被配置为INPUT。引脚同样可以提供其他功能,像串行,I2C,SPI。这些函数通常需要使用相应的库。下图为ESP-12模块的引脚图:Void setup ( ) {
}
程序启动时会调用 setup()函数。使用它来初始化变量,引脚模式,启用库等。setup函数只能在Arduino板的每次上电或复位后运行一次。
Void Loop ( ) {
}
在创建了用于初始化并设置初始值的setup()函数后,loop() 函数,正如它的名称所指,允许你的程序连续循环的更改和响应。可以使用它来主动控制Arduino板。
延时函数Delay(ms)void delay (unsigned long ms)延时(毫秒)
延时, 单位毫秒(1秒有1000毫秒).
注意:
参数为unsigned long, 因此在延时参数超过32767(int型最大值)时, 需要用"UL"后缀表示为无符号 长整型, 例如: delay(60000UL);. 同样在参数表达式, 切表达式中有int类型时, 需要强制转换为 unsigned long类型, 例如: delay((unsigned long)tdelay * 100UL);.
一下例子设置13引脚对应的LED等以1秒频率闪烁:
int ledPin = 13; // LED connected to digital pin 13 void setup(){
pinMode(ledPin, OUTPUT); // sets the digital pin as output}
void loop(){
digitalWrite(ledPin, HIGH); // sets the LED on delay(1000); // waits for a second digitalWrite(ledPin, LOW); // sets the LED off delay(1000); // waits for a second}延时(微秒)
延时, 单位为微妙(1毫秒有1000微妙). 如果延时的时间有几千微妙, 那么建议使用 delay 函数. 目前参数最大支持16383微妙(不过以后的版本中可能会变化).
以下代码向第8号引脚发送脉冲, 每次脉冲持续50微妙的时间.
int outPin = 8; // digital pin 8 void setup(){
pinMode(outPin, OUTPUT); // sets the digital pin as output}
void loop(){
digitalWrite(outPin, HIGH); // sets the pin on delayMicroseconds(50); // pauses for 50 microseconds digitalWrite(outPin, LOW); // sets the pin offIO操作函数pinMode()函数pinMode()函数用于将特定引脚配置为输入或输出。可以使用INPUT_PULLUP模式启用内部上拉电阻。
pinMode()函数语法Void setup () {
pinMode (pin , mode);
}· pin - 你希望设置模式的引脚的编号
· mode - INPUT,OUTPUT或INPUT_PULLUP。
· 示例
int button = 5 ; // button connected to pin 5int LED = 6; // LED connected to pin 6 void setup () {
pinMode(button , INPUT_PULLUP);
// set the digital pin as input with pull-up resistor pinMode(button , OUTPUT); // set the digital pin as output}
void setup () {
If (digitalRead(button ) == LOW) // if button pressed { digitalWrite(LED,HIGH); // turn on led delay(500); // delay for 500 ms digitalWrite(LED,LOW); // turn off led delay(500); // delay for 500 ms }
}·
digitalWrite()函数digitalWrite()函数用于向数字引脚写入HIGH或LOW值。如果该引脚已通过pinMode()配置为OUTPUT,则其电压将被设置为相应的值:HIGH为5V(或3.3V在3.3V板上),LOW为0V(接地)。如果引脚配置为INPUT,则digitalWrite()将启用(HIGH)或禁止(LOW)输入引脚的内部上拉。建议将pinMode()设置为INPUT_PULLUP,以启用 内部上拉电阻。
如果不将pinMode()设置为OUTPUT,而将LED连接到引脚,则在调用digitalWrite(HIGH)时,LED可能会变暗。在没有明确设置pinMode()时,digitalWrite()将启用内部上拉电阻,这就像一个大的限流电阻。
digitalWrite()函数语法Void loop() {
digitalWrite (pin ,value);
}· pin - 你希望设置模式的引脚的编号
· value - HIGH或LOW。
· 示例
int LED = 6; // LED connected to pin 6 void setup () {
pinMode(LED, OUTPUT); // set the digital pin as output}
void setup () {
digitalWrite(LED,HIGH); // turn on led delay(500); // delay for 500 ms digitalWrite(LED,LOW); // turn off led delay(500); // delay for 500 ms}读取数字引脚的 HIGH(高电平)或 LOW(低电平)。
语法digitalRead(pin)
参数pin:被读取的引脚号码
返回值HIGH 或 LOW
const int ledPin = 13;
const int inputPin = 2;
// 当Arduino控制器通电或复位后,setup函数会运行一次void setup() {
//将引脚13设置为输出模式 pinMode(ledPin, OUTPUT);
//将引脚2设置为输入上拉模式 //引脚2与外部按钮连接 pinMode(inputPin, INPUT_PULLUP);
}
// 当Arduino控制器通电或复位后,loop函数会反复运行void loop(){
// 读取引脚2的输入情况 // 开关闭合后,引脚2将获得低电平信号 int val = digitalRead(inputPin);
// 检查引脚2是否为低电平 // 当按钮按下时,引脚2为低电平,点亮引脚13 LED // 当按钮未按下,引脚2为高电平,熄灭引脚13 LED if (val == LOW)
{
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}Arduino能够检测是否有一个电压施加到其引脚,并通过digitalRead()函数报告。开/关传感器(检测物体的存在)和模拟传感器之间存在一个差异,模拟传感器的值连续变化。为了读取这种类型的传感器,我们需要一个不同类型的引脚。
在Arduino板的右下角,你会看到6个标记为“Analog In”的引脚。这些特殊引脚不仅可以告知是否有电压施加给它们,还可以告知它们的值。通过使用analogRead()函数,我们可以读取施加到其中一个引脚的电压。
此函数返回0到1023之间的数字,表示0到5伏特之间的电压。例如,如果施加到编号0的引脚的电压为2.5V,则analogRead(0)返回512。
analogRead()函数语法analogRead(pin);
· pin - 要读取的模拟输入引脚的编号
· 示例
int analogPin = 3;//potentiometer wiper (middle terminal)
// connected to analog pin 3
int val = 0; // variable to store the value read
void setup() {
Serial.begin(9600); // setup serial
}
void loop() {
val = analogRead(analogPin); // read the input pin
Serial.println(val); // debug value
}
数字I/O口 Digital IO
Arduino 引脚号直接对应ESP8266 GPIO 引脚。pinMode,digitalRead,和 digitalWrite 函数照常使用,所以读取GPIO2引脚,这样写:digitalRead(2) 。
数字引脚 0~15可以设置为 INPUT,OUTPUT 或者 INPUT_PULLUP 模式。引脚 16可以设置为INPUT,OUTPUT 或者 INPUT_PULLDOWN_16 模式。在启动时,引脚被配置为INPUT。引脚同样可以提供其他功能,像串行,I2C,SPI。这些函数通常需要使用相应的库。下图为ESP-12模块的引脚图:
可见图中没有数字引脚6~11,因为大部分模块使用这几个引脚连接了flash存储芯片了。这些引脚不可使用,否则可能导致程序崩溃。
注意:ADC输入电压范围 0~1V,取值范围:0~1024,有些电路板和模块(ESP-12ED NodeMCU 1.0)也释放了引脚9和11,如果Flash芯片工作在DIO模式下(默认QIO模式),它们可以被当做IO口使用。引脚中断可以使用attachInterrupt,detachInterrupt函数。除了GPIO16引脚,其他引脚都可以使用中断功能。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
基于Arduino的超声测距系统的设计
Arduino的教程
了解一点新东西“Arduino”
Arduino 电子积木 4位7段数码管
贸泽电子开售Arduino UNO Q为实时响应的AI驱动机器视觉与声音解决方案提供支持
高通收购硬件公司Arduino,深耕机器人领域
Arduino最全的中文教程
牛人DIY:关注空气质量 自制Arduino检测器
Arduino 电子积木 霍尔开关
ArduinoISP, Hex & Bootloader
高通收购Arduino,开源社区持怀疑态度
基于Portenta的农业和草坪管理
Arduino硬件模拟器 vs 实物零件:哪个更合适?
chipKit Uno32与Arduino Uno的比较
1 物联网与嵌入式开发
基于Arduino的双模科学计算器设计
3D8S的“脱机运行”
基于arduino开发板的网络独立下载终端
基于Arduino DIY一个会打招呼的超萌机器人
Arduino 电子积木 4路MOSFET开关 V02版
基于非特定人语音识别芯片的技术方案
什么是 Linduino
Arduino UNO Q登陆DigiKey,现已开放预订
高通收购Arduino带来了全新的氛围——UNO Q上的人工智能与信号处理
动手玩转Arduino
基于Arduino将老式DVD改造成一个3D打印机
动手玩转Arduino
在 Ubuntu 12.04 上安装 Arduino IDE
使用Arduino和EMG的错误姿势和肌肉拉伤监测器,带实时蓝牙警报
二十年过去 Arduino已经远不止是Arduino了