Arduino analogRead: примеры считывания с аналоговых пиновОпубликовано: 27.08.2018 analogRead используется в Arduino для того, чтобы считывать значения с устройств, подключенных к аналоговому порту. В отличие от функции digitalRead мы можем получить широкий спектр значений и реагировать на небольшие изменения сигналов, подаваемых на плату с датчиков. У этой функции есть свои особенности использования, которые мы рассмотрим в этой статье. Открытые уроки по Arduino. Урок 1: знакомимся с Arduino Синтаксис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 и выполнить какие-то полезные действия. |