Cветодиод – простейший индикатор, который можно использовать для отладки кода: его можно включить при срабатывании условия или просто подмигнуть. Но для начала его нужно подключить.
Светодиод – это устройство, которое питается током, а не напряжением. Как это понимать? Яркость светодиода зависит от тока, который через него проходит. Казалось бы, достаточно знания закона Ома из первого урока в разделе, но это не так!
Светодиод в цепи нельзя заменить “резистором”, потому что он ведёт себя иначе, нелинейно.
Светодиод полярен, то есть при неправильном подключении он светиться не будет.
Светодиод имеет характеристику максимального тока, на котором может работать. Для обычных 3 и 5 мм светодиодов это обычно 20 мА.
Светодиод имеет характеристику падение напряжения (Forward Voltage), величина этого падения зависит от излучаемого цвета. Цвет излучается кристаллом, состав которого и определяет цвет. У красных светодиодов падение составляет ~2.5 вольта, у синих, зелёных и белых ~3.5 вольта. Более точную информацию можно узнать из документации на конкретный светодиод. Если документации нет – можно пользоваться вот этой табличкой, тут даны минимальные значения:
Мигать светодиодом с Ардуино очень просто: подключаем катод к GND, а анод – к пину GPIO. Очень многие уверены в том, что “аналоговые” пины являются именно аналоговыми, но это не так: это обычные цифровые пины с возможностью оцифровки налогового сигнала. На плате Nano пины A0-A5 являются цифровыми и аналоговыми одновременно, а вот A6 и A7 – именно аналоговыми, то есть могут только читать аналоговый сигнал. Так что подключимся к A1, настраиваем пин как выход и мигаем!
void setup() {
pinMode(A1, OUTPUT);
}
void loop() {
digitalWrite(A1, HIGH);
delay(500);
digitalWrite(A1, LOW);
delay(500);
}
Cкетч для бегущих по порядку огней. На этот раз в коде будет в один цикл for, добавим переменную, следящую за направлением движения.
const int ARRAY_SIZE = 6;
int ledPin[] = {2, 3, 4, 5, 6, 7};
int ledDelay = 500;
int direction = 1;
int currentLed = 0;
unsigned long changeTime;
void setup() {
for (int i = 0; i < ARRAY_SIZE; i++) {
pinMode(ledPin[i], OUTPUT);
}
changeTime = millis();
}
void loop() {
if ((millis() - changeTime) > ledDelay) {
changeLed();
changeTime = millis();
}
}
void changeLed() {
// выключаем все светодиоды
for (int i = 0; i < ARRAY_SIZE; i++) {
digitalWrite(ledPin[i], LOW);
}
// включаем текущий LED
digitalWrite(ledPin[currentLed], HIGH);
// увеличиваем значение
currentLed += direction;
// меняем направление, если достигли конца
if (currentLed == ARRAY_SIZE - 1) {
direction = -1;
}
if (currentLed == 0) {
direction = 1;
}
}