Несмотря на кажущуюся схожесть с другой парой функций digitalRead() и digitalWrite(), которые работают по одному механизму, только в разных направлениях, функции analogRead() и analogWrite() имеют в корне разную природу, в первую очередь на аппаратном уровне. Поэтому и рассматривать их нужно в отрыве друг от друга — функционал analogRead() целиком и полностью реализован на «железном уровне» в аналого-цифровом преобразователе (АЦП), analogWrite() — в регистрах выходного сравнения OCR (ШИМ-генераторам), работающим на одном из встроенных таймеров.
Несмотря на кажущуюся схожесть с другой парой функций digitalRead() и digitalWrite(), которые работают по одному механизму, только в разных направлениях, функции analogRead() и analogWrite() имеют в корне разную природу, в первую очередь на аппаратном уровне. Поэтому и рассматривать их нужно в отрыве друг от друга — функционал analogRead() целиком и полностью реализован на «железном уровне» в аналого-цифровом преобразователе (АЦП), analogWrite() — в регистрах выходного сравнения OCR (ШИМ-генераторам), работающим на одном из встроенных таймеров.
Если вы попали на эту страницу, значит вас перестало устраивать быстродействие вашей платы Arduino, вы понимаете, что что-то не так, но не можете понять что. Именно для вас эта статья.
Может я сделаю открытие, но стандартные для Arduino-версии языка C++ самые распространенные функции pinMode, digitalWrite, digitalRead, analogWrite, analogRead, Serial.print, Serial.println (и другие) — это всего лишь удобные обертки для тех, кто не желает лезть в дебри программирования. Эти функции-обертки содержат определенные механизмы проверок корректности исполнения, которые увеличивают время получения результата в разы!
Многие программисты Arduino сталкиваются с тем, что в качестве параметров некоторых функций приходится отправлять переменные типа byte (байт). Байт состоит из 8 битов. Бит — это наименьшая единица информации в компьютерном мире — может принимать всего два значения — 1 или 0. О том как манипулировать битами в байте в статье...