Рис. 10.11. Измененный скрипт.
Скачать данный скрипт 10_02.xml можно по ссылке https://amegakit.ru/libraries/lib_Lab_Om-Robot.zip
Создание скетча в программе Arduino IDE.
Рассмотрим процесс создания скетча – "бегущий огонек" на ленте из 5 светодиодов с использованием массивов. Массив – это набор переменных, к которым обращение идет по индексу (месту переменной в массиве). Только в отличие от Scratch нумерация элементов массива начинается с 0.
Объявление массива из элементов – контактов подключения светодиодов:
int pinLeds[]={9,10,11,12,13};
Обращение к элементу массива происходит по индексу, например
int num=pinLeds[3]
Значение num=12 (четвертый элемент массива, нумерация с 0!).
Очень удобный метод работы с массивами циклы. При этом счетчик чикла используется для индексации каждого элемента массива. Перебор всех элементов массива:
int num;
for(int i=0;i<5;i++) {
num= pinLeds[i];
}
И "выключить" все светодиоды
for(int i=0;i<5;i++) {
digitalWrite(pinLeds[i],LOW);
}
Так же в цикле включаем светодиоды. В переменной num храним индекс активного светодиода. И каждый цикл увеличиваем значение num на единицу. По достижении значения 5 (шестой элемент массива) делаем num=1.
num=num+1;
if(num==5) {
num=0;
}
Включаем светодиод с индексом из переменной num и делаем задержку 1 секунда.
digitalWrite(pinLeds[num], HIGH);
delay(1000);
Полное содержание скетча представлено в листинге 10.1.
Листинг 10.1.
// Массив для хранения контактов подключения светодиодов
int pinLeds[]={9,10,11,12,13};
// Переменная хранения индекса активного светодиода
int num=0;
void setup() {
// Сконфигурировать контакты светодиода как выход
for(int i=0;i<5;i++) {
pinMode(pinLeds[i],OUTPUT);
digitalWrite(pinLeds[i],LOW);
}
}
void loop() {
// "выключить" все светодиоды
for(int i=0;i<5;i++) {
digitalWrite(pinLeds[i],LOW);
}
// изменить переменную num
num=num+1;
if(num==5) {
num=0;
}
// Включаем светодиод с индексом из переменной num
digitalWrite(pinLeds[num], HIGH);
// задержка 1 секунда
delay(1000);
}
Загружаем скетч на плату Arduino и проверяем работу. Скачать данный скетч 10_01.ino можно по ссылке https://amegakit.ru/libraries/lib_Lab_Om-Robot.zip
Еще один вариант – можем сделать цикл в цикле (тогда не нужна и переменная num). Смотрите листинг 10.2.
Листинг 10.2.
// Массив для хранения контактов подключения светодиодов
int pinLeds[]={9,10,11,12,13};
void setup() {
// Сконфигурировать контакты светодиода как выход
for(int i=0;i<5;i++) {
pinMode(pinLeds[i],OUTPUT);
digitalWrite(pinLeds[i],LOW);
}
}
void loop() {
// цикл перебора активного светодиода
for(int i=0;i<5;i++) {
// выключение всех светодиодов
// в качестве счетчика другая переменная k!
for(int k=0;k<5;k++) {
digitalWrite(pinLeds[k],LOW);
}
// Включаем светодиод
digitalWrite(pinLeds[i], HIGH);
// задержка 1 секунда
delay(1000);
}
}
Скачать данный скетч 10_02.ino можно по ссылке https://amegakit.ru/libraries/lib_Lab_Om-Robot.zip