Найти в Дзене
Igor_CAD

Два варианта мигания светодиодом в Arduino IDE с помощью функций digitalWrite и analogWrite

Для подготовки просто переведём контакт 2 в режим OUTPUT: void setup() { pinMode(2, OUTPUT); } Рассмотрим два варианта подачи напряжения на контакт платы микроконтроллера. Первый вариант - с использованием функции digitalWrite, которая подаёт сигнал на указанный контакт, диапазон допустимых значений здесь либо LOW (соответствует 0), либо HIGH (соответствует 1), т.е. либо сигнала нет, светодиод не горит, либо сигнал есть (светодиод горит, на него подаётся рабочее напряжение 5В). Код, цикла работы программы, использующий digitalWrite: void loop() { digitalWrite(2, HIGH); // Подаём рабочее напряжение на контакт delay(500); digitalWrite(2, LOW); // Подаём 0 на контакт delay(500); } Функция analogWrite принимает на вход значение от 0 до 255, что позволяет имитировать подачу градаций напряжения от 0 до 5 вольт с помощью ШИМ (широтно-импульсной модуляции). В данном варианте передача значения 0 будет, как и раньше, означать отсутствие сигнала, передача значения 127 будет означать,

Для подготовки просто переведём контакт 2 в режим OUTPUT:

void setup() {

pinMode(2, OUTPUT);

}

Рассмотрим два варианта подачи напряжения на контакт платы микроконтроллера.

Первый вариант - с использованием функции digitalWrite, которая подаёт сигнал на указанный контакт, диапазон допустимых значений здесь либо LOW (соответствует 0), либо HIGH (соответствует 1), т.е. либо сигнала нет, светодиод не горит, либо сигнал есть (светодиод горит, на него подаётся рабочее напряжение 5В).

Код, цикла работы программы, использующий digitalWrite:

void loop() {

digitalWrite(2, HIGH); // Подаём рабочее напряжение на контакт

delay(500);

digitalWrite(2, LOW); // Подаём 0 на контакт

delay(500);

}

Функция analogWrite принимает на вход значение от 0 до 255, что позволяет имитировать подачу градаций напряжения от 0 до 5 вольт с помощью ШИМ (широтно-импульсной модуляции). В данном варианте передача значения 0 будет, как и раньше, означать отсутствие сигнала, передача значения 127 будет означать, что в одном цикле подачи напряжения 50% времени будет подаваться напряжение 0В, а 50% времени будет подаваться 5В (имитация подачи напряжения 2.5В), значение 255, соответственно, как и для digitalWrite будет означать, что в цикле будет всегда подаваться 5В. Другие пропорции подачи 0В и 5В по времени в рамках одной итерации цикла будут имитировать подачу соответствующего напряжения между величинами от 0В до 5В.

int dir = 5; // Направление и шаг изменения яркости

int brightness = 0; // Текущее значение яркости

void loop() {

analogWrite(2, brightness); // Подаём на контакт текущее значение яркости

brightness += dir; // Изменяем яркость на текущее значение шага, имитация подачи промежуточных значений между 0 и 5В.

if (brightness >= 255 || brightness <= 0) // Если значение яркости достигло предела (максимума или минимума)

dir = -dir; // Меняем направление изменения яркости

delay(10);

}

При плавной смене значений светодиод будет плавно менять яркость.

Результаты работы обоих вариантов можно посмотреть на видео: