На этом уроке мы научимся управлять яркостью светодиода с помощью переменного
резистора.
Для этого соберем схему:
Токоограничительный резистор (последовательно со светодиодом) номиналом 470 Ом,
а сопротивление переменного резистора - 47 кОм.
Программа очень простая, раcсмотрим её внимательнее:
void setup()
{
pinMode(11, OUTPUT); // программируем пин 9 как выход, к нему подключим светодиод.
pinMode(A0, INPUT); // программируем пин A0 как вход, на него подется сигнал с потенциометра.
}
void loop()
{
analogWrite(11, analogRead(A0) / 4); // на вывод 9 подаем сигнал от 0 до 255, в завимости от считанного с вывода A0
}
Небольшое пояснение к программе.
Сигнал на входе A0 может принимать значение от 0 до 5В. А считанное значение
с вывода A0, возвращаемое функцией analogRead(A0), соответственно принимает
значение от 0 до 1023. А так как функция analogWrite() может передавать на
указанный пин значение от 0 до 255, то мы просто разделим считанное значение
на четыре. Таким образом функция analogWrite(9, analogRead(A0) / 4) выдаст на
пин 11 значение от 0 до 255, в зависимости от угла поворота ручки переменного
резистора.
Рассмотрим еще одну схему. Теперь управлять яркостью будем с помощью
матричной клавиатуры:
Используем немного переделанный скетч из предыдущих уроков с матричной
клавиатурой:
Функция (int)customKey преобразует переменную customKey в целое число, и выдает
значение нажатой клавиши в соответвии с таблицей ASCII, т.е. от 48 до 57,
в зависимости от нажатой цифры. Есоли нажать 0, то возвращает число 48, если
1, то 49 и т.д. Теперь диапазон от 48 до 57 нужно пропорционально преобразовать
в диапазон от 0 до 255
Сделать это можно математически. Сначала мы отнимем от возвращаемого значения
нажатой кнопки 48, тогда мы получим число соответствующее нажатой кнопке.
Теперь это число нужно умножить на 28, тогда значению 0 будет соответвовать
значение 0, значению 1 - значение 28, значению 2 - значение 56 и так далее до
значения 252, это будет соответвовать максимальной яркости.
Значение нажатой клавиши и уровень яркости можно посмотреть в мониторе порта.
Логические операторы
Логические операторы чаще всего используются в проверке условия оператора if.
Базовые сведения о логических операциях здесь:
Алгебра логики
&& (логическое И)
Истина, если оба операнда истина (true).
if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) { // считывает состояние двух портов
// ...
}
Истина если оба порта вход/выхода HIGH
|| (логическое ИЛИ)
Истина, если хотя бы один операнд истина, например:
if (x > 0 || y > 0) {
// ...
}
будет верно (истина) если x или y больше 0.
! (логическое отрицание)
True, если операнд false, и наоборот, например:
if (!x) {
// ...
}
условие верно, если x - false (x равно 0).
Важно различать логический оператор "И" - && и битовый оператор "И" - &. Тоже
самое относится к логическому оператору "ИЛИ" - || и битовому оператору
"ИЛИ" - |.
Пример
if (a >= 10 && a <= 20){} // условие верно, если a больше или равно 10, но меньше или равно 20