Мы уже научились загружать и запускать нашу первую программу, давайте более внимательно разберем ее.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Начинается программа с блока комментариев.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
*/
Мы можем записать сюда любые данные, например описание программы, для того чтобы в будущим было проще разобраться с программой и не перепутать одну программу с другой. Блок комментария, начинается с символов **
и заканчивается обратным порядком этих же символов
**
Далее идет однострочный коментарий, перед вызовом слудующей функции. Для комментирования строчки необходимо в начале ее поставить два слеша "//".
// the setup function runs once when you press reset or power the board
Программа на Arduino, всегда должна содержать две функции setup() и loop(). При создании новой программы, конструктор IDE сразу создает эти функции.
Пример функции setup()
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
Строка void setup(){} означает, что определяется функция setup(). Слово void обозначает что функция ничего не возвращает. Всегда при обьявлении функции, необходимо указывать тип возвращаеммых данных.
Код из функции setup(), выполниться один раз при запуске программы. Поэтому в эту функцию размещают вызовы, которые выполняют настройку микроконтроллера перед началом работы.
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
Далее идет вторая необходима функция loop(). Особенностью этой функции, явлетя то, что она выполняется все время в цикле. Как только функция выполнит все команды, она начинает работать заново.
Поэтому наш светодиод моргает постоянно.
Кратко разберем строчки
// the loop function runs over and over again forever
void loop() {
Строка как и в примере выше, содержит комментарий к функции, и начало определения функции loop()
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
После выключения светодиода, ожидаем одну секунду.
На этом наша программа заканчивается. Но так как мы находимся в функции loop(), то программа начинает работать заново, включает светодиод, ожидает, выключает, ожидает и тд.
Ниже приведен пример программы, которая мигает светодиодом, и не останавливает его работу. Программа считает время, и если интервал превышен, то меняет состояние светодиода. Такой прими более "правильный" хотя и более сложный.
/* Blink without Delay
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number :
const int ledPin = LED_BUILTIN;// the number of the LED pin
// Variables will change :
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change :
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
В нашем примере setup(), мы вызываем одну функция pinMode(LED_BUILTIN, OUTPUT); , которая устанавливает режим работы выхода LED_BUILTIN как "выход".
Первой командой , мы подаем "высокий сигнал" на ногу LED_BUILTIN. Светодиот загорается.
Следующая команда останавливает программу на 1000мс (1 секунда).
Далее , устанавливает низкий уровень (выключает) светодиод.
Данный пример использует для работы функцию ,, которая "останавливает" работу всего микроконтроллера. Такой способ работы не подходит, если вам необходимо чтобы микроконтроллер выполнял другую работу, помимо "мигания".