必备函数

想要写一个Arduino程序,这些函数是必须的。

setup()

函数原型

void setup();

作用

Arduino通电或复位后,即会开始执行 setup() 函数中的程序,该函数只会执行一次

loop()

函数原型

void loop();

作用

在setup() 函数中的程序执行完后,Arduino会接着会无限循环 loop() 函数。

main() 函数呢?

我们知道,不管是C语言还是C++,程序的入口都是 main() 函数,那么为什么 Arduino 程序没有 main() 函数呢?

实际上,main() 函数并没有消失,它依然是 Arduino 程序的入口,只是 Arduino 设计人员将它移到了核心库里,让我们翻看一下 Arduino 核心库的 main.cpp 文件,它在 Arduino安装目录/hardware/arduino/avr/cores/arduino

// main.cpp

#include <Arduino.h>

int atexit(void (* /*func*/ )()) { return 0; }

void initVariant() __attribute__((weak));
void initVariant() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;
}

一个程序不能有两个 main() 函数,Arduino 核心库已经定义了 main() 函数,因此我们的程序里不能包含 main() 函数。

示例

这个例子可以使 LED 闪烁

将 LED 的正极接电阻,再接 3 号引脚,负极接 GND 引脚

/*
 * Author:  Skyone
 * Date:    2020/02/28
 * Website: https://www.skyone.host
 */

#define LED 3

void setup() {
    // Put your setup code here, to run once.
    // 将你用于初始化的代码放在这里,这些代码只会执行一次。

    pinMode(LED, OUTPUT);   // 将 `LED` 引脚初始化为输出模式
}

void loop() {
    // Put your main code here, to run repeatedly.
    // 将你的业务函数放在这里,这些代码会一直循环的运行。

    digitalWrite(LED, HIGH);    // 将 `LED` 引脚设为 高电平
    sleep(1000);                // 停止 1 秒
    digitalWrite(LED, LOW);     // 将 `LED` 引脚设为 低电平
    sleep(1000);                // 停止 1 秒
}

最后更新于