analogRead используется в Arduino для того, чтобы считывать значения с устройств, подключенных к аналоговому порту. В отличие от функции digitalRead мы можем получить широкий спектр значений и реагировать на небольшие изменения сигналов, подаваемых на плату с датчиков. У этой функции есть свои особенности использования, которые мы рассмотрим в этой статье.
Содержание
Синтаксис
analogRead(<номер порта>)
- номер порта – номер аналогового порта, с которого мы будем считывать значение
Возвращаемое значение: число типа int в диапазоне от 0 до 1023.
Описание analogRead
Принцип работы
Функция используется для считывания сигналов с аналоговых пинов платы arduino. На выходе мы получаем число, пропорциональное реальному значению входного напряжения (но не само напряжение). По своей сути, с помощью analogRead мы создаем вольтметр и можем использовать его показания для анализа информации с датчиков и выработки каких-либо действий.
Почему мы получаем некоторое абстрактное число, а не реальное значение напряжения? Все дело в том, что наша программа может запускаться на разных платах arduino с разными подключенными датчиками, с разными рабочими напряжениями. И мы бы должны изменять программу при каждом изменении типа платы или датчика, что крайне не удобно.
Почему функция возвращает значение от 0 до 1023? Все очень просто: аналогово-цифровой преобразователь, преобразующий значение напряжения в его цифровое значение, в ардуино имеет 10 разрядов, а 2 в 10 степени равно 1024. Таким образом, диапазон значений от 0 до 1023 дает нам 1024 варианта уровня сигнала. Мы просто сравниваем полученное число с границами диапазона и принимаем решение о том, что делать.
Примеры использования
- analogRead(A0); // считать сигнал с аналогового порта A0
- analogRead(15); // аналогично, порт 15 и A0 – это одно и то же
Преобразование значения с помощью функции map()
В арудино есть специальная функция, упрощающая преобразование диапазонов значений. Вы передаете ей значение и два диапазона (исходный и требуемый), а функция возвращает новое значение, которое будет также относиться к границам требуемого диапазона как и к границам исходного. Например, значение 5 в диапазоне от 0 до 10 преобразуется в значение 10 в диапазоне от 0 до 20. Значение 500 из диапазона от 0 до 1000 преобразуется в значение 5 из диапазона от 0 до 10.
Пример использования функции map совместно с функцией analogRead ():
int val = map(analogRead(A0), 0, 1023, 1, 10); //Вернет значение аналогового порта в диапазоне от 0 до 10. При этом 0 будет соответствовать 0, а 10 – 1023.
Пример использования analogRead с платой Arduino Uno
Рассмотрим простой пример работы с функцией analogRead. Мы присоединяем напрямую к ардуино потенциометр, подключив его к аналоговому порту A0. В скетче мы считываем значение и выводит его в монитор порта. Загрузите скетч в плату и откройте окно монитора последовательного порта. Вы увидите длинную вереницу чисел, выводящихся с помощью функции Serial.println().
void setup() { Serial.begin(9600); // Инициализируем общение c компьютером на скорости 9600 } void loop() { // Считываем значение с аналогового порта int sensorValue = analogRead(A0); // Печатаем значение в мониторе порта Serial.println(sensorValue); // Небольшая задержка, чтобы бать ардуино слегка отдышаться delay(1); }
Выводы
С помощью функции analogRead мы считываем значение с аналоговых портов Arduino. Использовать функцию очень просто – мы указываем номер порта и получаем на выходе значение от 0 до 1023, пропорциональное уровню входного сигнала. Затем мы можем преобразовать число в нужный нам диапазон с помощью функции map и выполнить какие-то полезные действия.
int val = map(analogRead(A0), 0, 1023, 1, 10)
Перед десяткой должен стоять ноль, чтобы сошлось с текстом
Прямой ток от середины резистора в верхнем положение ( +5 вольт ) ,без ограниченного резистора 1килоом может спалить Ардуино.