Это следующая часть нашей обучающей серии Arduino, и на этот раз мы будем изучать и использовать Массивы сделать маленький рождественский елочный орнамент с разными мигающими последовательностями. Это был бы идеальный проект, чтобы держать детей занятыми, если вы хотите научить их основам пайки — просто установите светодиоды на карточке, и вы сможете получать питание от стандартной 9-вольтовой батареи.
Это также ключевой урок в программировании для начинающих на Arduino, хотя, если вы не планируете использовать его в качестве украшения, я бы настоятельно рекомендовал в любом случае использовать его.
Примечание. Это учебное пособие для начинающих, и мы, конечно же, не будем открывать новые пути — это? просто устройство для обучения концепции использования Массивы а также Для петель иметь дело с большое количество светодиодов (или другие устройства вывода).
Если вы еще этого не сделали, сейчас самое время проследить за другими статьями серии:
- Что такое Arduino Что ты можешь сделать с этим
?
- Что такое стартовый комплект Arduino? Что это содержит?
- Более крутые компоненты для покупки с вашим стартовым комплектом
- Начало работы с вашим стартовым комплектом Arduino? Установка драйверов Настройка платы порт
- Fritzing, бесплатный инструмент для рисования принципиальных схем
- Пристальный взгляд на структуру приложения Arduino Пример программы Blink
Для этого проекта вам понадобится хотя бы 8 или 9 светодиодов в красном или зеленом цвете, резистор для каждого из них макетировать и некоторые провода для подключения. Стартовый комплект от Ooomlout, который я недавно приобрел сам и изображен в этом уроке, предлагает отличное соотношение цены и качества и имеет больше светодиодов и резисторов, чем вам когда-либо понадобится, а также поставляется с аккуратным макетом и корпусом Arduino для хранения вещей. аккуратный.
Вот последняя вещь:
И видео об этом в действии.
Вот вид на проводку от Fritzing. Это очень просто — просто подключите положительный вывод светодиодов к контактам 2-> независимо (до контакта 13) и подключите отрицательные ножки к земле, встроенные в резистор. Значение, которое я здесь использовал, составляет 560 Ом. Вот и все для проводки.
Что касается программного обеспечения, подумайте о том, как вы можете записать все эти светодиоды в коде. Вы можете сделать это следующим образом:
int led1 = 2; // первый светодиод на контакте 2
int led2 = 3; // второй на контакте 3
// и т. д.
void loop () {
digitalWrite (LED1, HIGH);
задержки (100);
digitalWrite (LED1, LOW);
задержки (100);
digitalWrite (LED2, HIGH);
// так далее
}
[/ NOEDIT]
Вы должны увидеть, что с 9 светодиодами это быстро утомит. Ответ лежит с Массивы, что, если вы не можете вспомнить наше Программирование 101 об основных типах данных
— это в основном просто списки.
Синтаксис выглядит следующим образом (поместите это как первую строку в вашем коде):
int leds [] = {2,3,4,5,6,7,8,9,10};
[/ NOEDIT]
Квадратные скобки указывают, что? Светодиоды? переменная будет массив. Фигурные скобки заключают список номеров выводов, которые будет содержать наш массив.
Теперь, чтобы использовать массив, нам нужно обратиться к нему по номеру индекса. Индекс начинается с 0, и поэтому всегда будет на 1 меньше, чем общее количество вещей внутри него (так что с 9 элементами последний будет иметь индекс 8).
Вы пишете это так:
светодиоды [0]
[/ NOEDIT]
Который в нашем случае выбрал бы число 2, потому что это то, что по индексу 0 в нашем массиве.
Следуя до сих пор? Отлично. Одного этого недостаточно для нас — нам также нужен какой-то способ перебора каждого элемента нашего массива светодиодов. Для этого мы будем использовать для цикла. Синтаксис для этого выглядит следующим образом:
for (начальная переменная; условие, при котором мы повторяем снова; меняем переменную на каждой итерации)
[/ NOEDIT]
Например:
для (int i = 0; i<9; i++)
[/ NOEDIT]
Который говорит
- начать этот цикл с переменной, я, который имеет значение нуль
- продолжать цикл только пока я менее чем 9?(так: 0,1,2,3,4,5,6,7,8)
- каждый раз, добавить 1 к я (i ++ - это короткий способ сказать, что i = i + 1)
Таким образом, в принципе, цикл будет повторяться столько раз, сколько у нас будет светодиодов, и каждый раз, когда он будет повторяться, у нас будет переменная, я, который мы можем использовать так, как нам нравится.
Мы будем использовать эту структуру дважды для начала. Оказавшись внутри функции настройки, все наши контакты переключаются в режим вывода, например так:
void setup () {
для (int i = 0; i< 9;i++){
pinMode(leds[i],OUTPUT);
}
}
[/ NOEDIT]
Ты видишь, что мы там сделали? Вместо того, чтобы писать 9 строк кода, чтобы объявить каждый отдельный вывод как выходной, мы создаем цикл «для», который повторяется 9 раз, каждый раз устанавливая другой вывод.
Теперь вы должны увидеть, как мы можем сделать то же самое в главном цикле программы, чтобы последовательно включить каждый светодиод:
void loop () {
для (int i = 0; i< 9;i++){
digitalWrite(leds[i],HIGH);
delay(100);
digitalWrite(leds[i],LOW);
}
}
[/ NOEDIT]
Попробуй это. Вы можете скачать полный код для сегодняшнего проекта отсюда, если вы не хотите вводить его снова (хотя я призываю вас, так как это помогает процессу обучения).
Хорошо, теперь у нас довольно скучная последовательность освещения. Давайте запрограммируем еще один. Просто для удовольствия, давайте сделаем это совершенно случайно. Замените код основного цикла следующим:
void loop () {
int randomLed = random (0,8);
digitalWrite (светодиоды [randomLed], HIGH);
задержка (50);
randomLed = случайный (0,8);
digitalWrite (светодиоды [randomLed], LOW);
}
[/ NOEDIT]
Вместо использования цикла «для» для итерации каждого светодиода мы выбираем случайное число от 0 до 9 и включаем его.
Я собираюсь оставить его там на сегодня, так как теперь у вас должно быть достаточно знаний, чтобы программировать все новые последовательности и экспериментировать с циклами. Чтобы доказать, насколько легко все это, я попросил свою жену подумать о последовательности, которую она хотела бы увидеть, а затем заставил ее самостоятельно ее запрограммировать, учитывая только тот код и уроки, которые у вас были до сих пор. Она придумала это, так что посмотрите, сможете ли вы подобрать это для домашней работы!
Вопросы, предложения, проблемы - пишите в комментариях.