← Вернуться к оглавлению

Урок 11. Связываем analogRead() и analogWrite()

Прежде чем использовать аналоговые данные для управления другими компонентами в вашей программе, вам может потребоваться масштабировать их или ограничить их между некоторыми минимальными и максимальными значениями.

Например, представьте, что вы хотите использовать показания с вашего аналогового входа для управления яркостью светодиода с помощью 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.

Ардуино+