"); //-->
结构
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引脚,其他引脚都可以使用中断功能。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。