Мар 172013
 

Почти первая программа для Arduino — своеобразный «Hello, world!». Для того, чтоб понять как работает Arduino в большинстве туториалов предлагают поморгать лампочкой, но это совсем просто и я, поморгав диодом на 13 контакте, пошел дальше.

Вот что будет происходить.


Собственно, простейшее управление устройствами происходит через подачу напряжения на один контактов I/O Arduino. Также ардуино может считывать значения с контактов.

Начну с описания электронной схемы.

  • RGB_LED: Светодиод.
  • R1, R2, R3: Резисторы на 200Ом. Для ограничения тока на светодиод. 4 ноги. 3 ноги для подачи напряжения и одна на землю (самая длинная).
  • R4, R5, R6: Резисторы на 10КОм. Стягивающие резисторы для того, чтоб убрать случайные шумы на кнопках.
  • S1, S2, S3: Кнопки. Нажимаем сигнал проходит, отпускаем — нет.
  • Контакты Arduino I/O 9,10,11: Выходы с поддержкой Широтно-Импульсной Модуляции (ШИМ на плате обозначается тильдой). ШИМ потребуется для управления яркостью светодиода.
  • Контакты Arduino I/O 5,6,7: Входы. Шим не принципиален. Для считывания значений с кнопок.
  • GND и +5V также взяты с Arduino.

  • Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino

    Теперь переходим к программе. IDE Arduino
    Архив с программой тут

    // red green blue led control
    // compblog.vlukyanov.com
    
    //Объявляем переменные.
      
    int pinR = 9;    // RED    Контакты для управления цветами светодиода 
    int pinB = 10;   // GREEN
    int pinG = 11;   // BLUE
    int pin13 = 13;  // Для управления контактом 13, чтоб погасить светодиод на плате.
    
    int buttonR = 7; // Для считывания значений с кнопок.
    int buttonG = 6; 
    int buttonB = 5; 
    
    // Этот раздел переменных используется для корректного получения значений с кнопок.
    // RED
    boolean lastbuttonR = LOW;    // последнее значение кнопки
    boolean currentbuttonR = LOW; // текущее значение кнопки
    int ledonR = 0;               // яркость светодиода
    
    //GREEN
    boolean lastbuttonG = LOW;
    boolean currentbuttonG = LOW;
    int ledonG = 0;
    
    //BLUE
    boolean lastbuttonB = LOW;
    boolean currentbuttonB = LOW;
    int ledonB = 0;
    
    
    // Функция Setup выполняется Ардуино только один раз при включении.
    // данная функция используется для установки параметров микроконтрллера.
    void setup()
    {
      //pinMode установка параметров контактов I/O
      // OUTPUT - выход.
      // INPUT - вход.
      pinMode(pin13, OUTPUT); 
      pinMode(pinR, OUTPUT);
      pinMode(pinG, OUTPUT);
      pinMode(pinB, OUTPUT);
      pinMode(buttonR, INPUT);
      pinMode(buttonG, INPUT);
      pinMode(buttonB, INPUT);
    
      digitalWrite(pin13, LOW); // установка 13 контакта в 0. Светодиод на 13 контакте гаснет. По-умолчанию он горит.
    }
    
    // Булевая функция для определения состояний кнопок.
    // Кнопка красного цвета
    boolean debounceR(boolean last) // Переменная last принимает значение, переданное функции
    {
      boolean current = digitalRead(buttonR); // Объявляем переменную current и считываем в нее значение кнопки
      if (last != current)                    // Если текущее значение кнопки отличается от переданной в функцию ( != - не равно )
      {
        delay(5);                            // тогда ждем 5 милисекунд. Это необходимо чтоб избавиться от колебаний напряжения поступающих с кнопки и получить точное значение.
        current = digitalRead(buttonR);      // повторно считвыаем значение с кнопки. Уже без шумов.
      }
      return current;                        // Возвращаем значение полученное логическое значение. 
                                             // last и current доступны только в пределах данной функции.
    }
    
    // Кнопка зеленого цвета
    boolean debounceG(boolean last)
    {
      boolean current = digitalRead(buttonG);
      if (last != current)
      {
        delay(5);
        current = digitalRead(buttonG);
      }
      return current;
    }
    
    // Кнопка синего цвета
    boolean debounceB(boolean last)
    {
      boolean current = digitalRead(buttonB);
      if (last != current)
      {
        delay(5);
        current = digitalRead(buttonB);
      }
      return current;
    }
    
    // Бесконечный цикл, повоторяющийся на микроконтроллере, пока он включен.
    void loop()
    {
    
      // Управление красным цветом светодиода.
      currentbuttonR = debounceR(lastbuttonR);            // проферяеям при помощи функции debounceR состояние кнопки.
      if (lastbuttonR == LOW && currentbuttonR == HIGH )  // Если предыдущее значение было ноль, а текущее единица.
      {
        ledonR = ledonR + 51 ;                            // Тогда увеличиваем яркость светодиода на 51
        if ( ledonR > 255) ledonR=0;                      // Если значении становится больше 255, то гасим светодиод
      }
      lastbuttonR = currentbuttonR;                       // Запоминамем текущее состояние кнопки
      analogWrite(pinR, ledonR);                          // Передаем измененное значение яркости на вывод Ардуино.
    
    
     // Управление зеленым цветом светодиода.
     currentbuttonG = debounceG(lastbuttonG);
      if (lastbuttonG == LOW && currentbuttonG == HIGH )
      {
        ledonG = ledonG + 51 ;
        if ( ledonG > 255) ledonG=0;
      }
      lastbuttonG = currentbuttonG;
      analogWrite(pinG, ledonG); 
    
     // Управление синим цветом светодиода.
     currentbuttonB = debounceB(lastbuttonB);
      if (lastbuttonB == LOW && currentbuttonB == HIGH )
      {
        ledonB = ledonB + 51 ;
        if ( ledonB > 255) ledonB=0;
      }
      lastbuttonB = currentbuttonB;
      analogWrite(pinB, ledonB); 
    
    
    }
    

     Leave a Reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    (required)

    (required)