Прежде чем использовать аналоговые данные для управления другими компонентами в вашей программе, вам может потребоваться масштабировать их или ограничить их между некоторыми минимальными и максимальными значениями.
Например, представьте, что вы хотите использовать показания с вашего аналогового входа для управления яркостью светодиода с помощью analogWrite() (см. в справочнике).
analogRead() возвращает числа от 0 до 1023, но analogWrite() принимает только цифры от 0 до 255. В этом случае вы можете использовать функцию map() для масштабирования диапазона значений analogRead() до подходящих analogWrite().
map(value, fromLow, fromHigh, toLow, toHigh) (см. в справочнике) - масштабировать один диапазон к другому.
map() принимает четыре входа:
- значение, которое мы пытаемся масштабировать,
- минимум диапазона от которого мы масштабируемся,
- максимум диапазона от которого мы масштабируемся,
- минимум диапазона до которого мы масштабируемся,
- максимум до которого мы масштабируемся.
Вот небольшой пример:
int potPin = A0; int ledPin = 9; void setup(){ pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop(){ int analogVal = analogRead(potPin); // analogVal между 0 и 1023 int scaledVal = map(analogVal, 0, 1023, 0, 255); // масштабируемая величина 0 до 255 Serial.print("analogVal = "); Serial.print(analogVal); Serial.print(" scaledVal = "); Serial.print(scaledVal); analogWrite(ledPin, scaledVal); }
Также проверьте constrain(x, a, b) (см. в справочнике) - ограничивает число x между a и b. Если x меньше функция возвращает a, если x больше чем b, функция возвращает b, в противном случае возвращает x.