+1 голос

Зачем мы делим значение, полученное с аналогового входа перед тем, как задать яркость светодиода?

// даём разумные имена для пинов со светодиодом
// и потенциометром (англ potentiometer или просто «pot»)
#define LED_PIN     9
#define POT_PIN     A0
 
void setup()
{
  // пин со светодиодом — выход, как и раньше...
  pinMode(LED_PIN, OUTPUT);
 
  // ...а вот пин с потенциометром должен быть входом
  // (англ. «input»): мы хотим считывать напряжение,
  // выдаваемое им
  pinMode(POT_PIN, INPUT);
}
 
void loop()
{
  // заявляем, что далее мы будем использовать 2 переменные с
  // именами rotation и brightness, и что хранить в них будем
  // целые числа (англ. «integer», сокращённо просто «int»)
  int rotation, brightness;  
 
  // считываем в rotation напряжение с потенциометра:
  // микроконтроллер выдаст число от 0 до 1023
  // пропорциональное углу поворота ручки
  rotation = analogRead(POT_PIN);
 
  // в brightness записываем полученное ранее значение rotation
  // делённое на 4. Поскольку в переменных мы пожелали хранить
  // целые значения, дробная часть от деления будет отброшена.
  // В итоге мы получим целое число от 0 до 255
  brightness = rotation / 4;
 
  // выдаём результат на светодиод
  analogWrite(LED_PIN, brightness);
}

(6 баллов) 1 1 2

1 Ответ

+1 голос
 
Лучший ответ

Яркость светодиода устанавливается значениями от 0 до 255. Значения аналогового выхода от 0...1023. Разделив на 4 мы делаем преобразование одного диапазона значений в другой.
На самом деле есть другой более продвинутый способ достигнуть нужного результата - использовать функцию map

/* Переносим значение с аналогового входа (возможные значения от 0 до 1023) в 8 бит (0..255) */
void setup() {}
 
void loop()
{
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

при использовании map - если вы уже собрали схему а яркость светодиода увеличивается(уменьшается) при вращении ручки потенциометра не в ту сторону в какую бы вам хотелось можно изменить одну строчку на

val = map(val, 0, 1023, 255, 0);

и цель будет достигнута.
Подробнее читайте здесь

 

(1.2 тыс. баллов) 6 26 51
выбран
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. Un_ka

    8 балл(ов)

  2. Eriak

    4 балл(ов)

  3. AlexGorr

    2 балл(ов)

...