Мини-проекты с Arduino


Эксперимент 3. Светильник с управляемой яркостью

В этом эксперименте мы меняем яркость светодиода, вращая ручку переменного резистора.




Скетч

p030_pot_light.ino

// даём разумные имена для пинов со светодиодом
// и потенциометром (англ 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);
}



Пояснения к коду

  •        С помощью директивы #define мы сказали компилятору заменять идентификатор POT_PIN на A0 — номер аналогового входа. Вы можете встретить код, где обращение к аналоговому порту будет по номеру без индекса A. Такой код будет работать, но во избежание путаницы с цифровыми портами используйте индекс.
  •        Переменным принято давать названия, начинающиеся со строчной буквы.
  •        Чтобы использовать переменную, необходимо ее объявить, что мы и делаем инструкцией:

  •       int rotation, brightness;
      Вопросы для проверки себя

    1.        Можем ли мы при сборке схемы подключить светодиод и потенциометр напрямую к разным входам GND микроконтроллера?
    2.        В какую сторону нужно крутить переменный резистор для увеличения яркости светодиода?
    3.        Что будет, если стереть из программы строчку pinMode(LED_PIN, OUTPUT)? строчку pinMode(POT_PIN, INPUT)?
    4.        Зачем мы делим значение, полученное с аналогового входа перед тем, как задать яркость светодиода? что будет, если этого не сделать?
      Задания для самостоятельного решения

    1.        Отключите питание платы, подключите к порту 5 еще один светодиод. Измените код таким образом, чтобы второй светодиод светился на 1/8 от яркости первого


    <<< Назад        Вперед >>>