Analog In, Out Serial

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

Этот пример показывает вам, как читать аналоговый входной пин, отображать результат в диапазоне от 0 до 255, использовать этот результат для установки ширины импульса модуляции (PWM) выходного пина для затемнения или увеличения яркости светодиода и выводить значения на серийный монитор Arduino Software (IDE).

Необходимое оборудование:

  • Плата Arduino
  • Потенциометр/переменный резистор
  • Cветодиод
  • Резистор 220 ом

Схема

Подключите один пин от вашего потенциометра к 5V, центральный пин к аналоговому пину 0, а оставшийся пин к земле. Затем подключите ограничительный резистор 220 ом к цифровому пину 9 с светодиодом в серии. Длинная, положительная ножка (анод) светодиода должна быть подключена к выходу от резистора, а короткая, отрицательная ножка (катод) подключена к земле.

Код
В приведенном ниже скетче, после объявления двух пинов (аналоговый 0 для потенциометра и цифровой 9 для светодиода) и двух переменных, sensorValue и outputValue, единственное, что вы делаете в функции setup(), - это начинаете серийное общение.

Затем, в основном цикле, sensorValue назначается для хранения сырого аналогового значения, считанного с потенциометра. У Arduino есть диапазон analogRead от 0 до 1023, и диапазон analogWrite только от 0 до 255, поэтому данные с потенциометра нужно преобразовать, чтобы поместиться в меньший диапазон перед использованием их для затемнения светодиода.

Для преобразования этого значения используйте функцию map()
outputValue = map(sensorValue, 0, 1023, 0, 255);
outputValue назначается равным масштабированному значению с потенциометра. map() принимает пять аргументов: значение для отображения, нижняя граница диапазона и верхняя граница диапазона входных данных, а также нижняя и верхняя граница диапазона к которму мы приводим значения. В этом случае данные с датчика уменьшаются от исходного диапазона от 0 до 1023 до 0 до 255.

Новые масштабированные данные с датчика затем выводятся на аналоговый выходной пин, затемняя или увеличивая яркость светодиода при повороте потенциометра. Наконец, как исходные, так и масштабированные значения датчика отправляются в окно серийного монитора Arduino Software (IDE).

/*
  Аналоговый вход, аналоговый выход, серийный выход
  Чтение аналогового входного пина, отображение результата в диапазон от 0 до 255 и использование
  результата для установки ширины импульса модуляции (PWM) выходного пина. 
  Также выводит результаты на Serial Monitor.
  Схема:
  - потенциометр подключен к аналоговому пину 0.
    Центральный пин потенциометра идет к аналоговому пину.
    Боковые пины потенциометра идут к +5V и земле
  - светодиод подключен от цифрового пина 9 к земле

  автор Tom Igoe
  Этот пример кода находится в общественном достоянии.
  https://www.arduino.cc/en/Tutorial/AnalogInOutSerial
*/

// Эти константы не изменятся. Они используются для присвоения имен пинам:
const int analogInPin = A0;  // Аналоговый входной пин, к которому подключен потенциометр
const int analogOutPin = 9; // Аналоговый выходной пин, к которому подключен светодиод

int sensorValue = 0;        // значение, считанное с потенциометра
int outputValue = 0;        // значение, выводимое на PWM (аналоговый выход)

void setup() {
  // инициализация серийной связи со скоростью 9600 бит/с:
  Serial.begin(9600); 
}

void loop() {
  // чтение аналогового входного значения:
  sensorValue = analogRead(analogInPin);            
  // отображение его в диапазон аналогового выхода:
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  // изменение аналогового выходного значения:
  analogWrite(analogOutPin, outputValue);         

  // вывод результатов через Serial Monitor:
  Serial.print("sensor = ");       
  Serial.print(sensorValue);      
  Serial.print("\t output = ");      
  Serial.println(outputValue);   

  // ожидание 2 миллисекунд перед следующим циклом для установки аналого-цифрового
  // преобразователя после последнего чтения:
  delay(2);                     
}