Схема бегущей строки на Arduino UNO

Для получения светодиодной бегущей строки на этом контроллере используем 5 светодиодов. Естественно, будем пользоваться портами Arduino. Это намного приятнее и лучше, чем работать непосредственно с входамивыходами контроллера. Данный факт позволит нам установить значения для светодиодов при помощий лишь одной операции.

У Arduino UNO имеется 3 порта:

Каждый порт подвергается управлению 3 регистрами. Регистр DDR сам определит, чем будет pin: вход или выход. Используя регистр PORT устанавливаем pin в состояние HIGH или LOW. При помощи регистра PIN можно считать состояние ножек Arduino, когда они работает на вход.

Бегущая строка на arduino

Будем использовать порт В. Установим ножки порта В как цифровые выхода. Порт В имеет только шесть ног. Mbns регистра для нашего порта В (DDRB) устанавливаются в 1 при использовании ноги как OUTPUT и в 0, если INPUT. Биты порта нумеруются с 0-7, но не обязательно они содержат все 8 ног.

Пример:

DDRB = B00111110; // установить ножки порта В с 1 по 5 как выхода, а 0 как вход.

В нашем проекте бегущего огня мы будем использовать 5 выходов:

DDRB = B00011111; // установить ноги порта В с 0 по 4 как выхода

Для записи значений в порт В необходимо использовать регистр PORTB. Зажечь первый светодиод можно командой:

PORTB = B00000001;

первый и четвертый:

PORTB = B00001001;

При помощи этих команд мы теперь можем легко зажигать и выключать LED.

Рассматриваем операторы сдвига.

Существуют два оператора сдвига: влево и вправо — >.

Пример:

varA = 1; // 00000001

varA = 1 varA = 1 varA = 1

Введем  2 переменные: перваяupDown — куда двигаться — вверх или вниз, а вторая cylon какие LED зажигать.

В функции setup() мы определяем какие ножки должны работать как выхода.

В главном цикле программы loop(), светодиоды по очереди загораются вверх путем увеличения переменной cylon, а когда доходит до самого верхнего, то переменной upDown присваивается 0 и светодиоды загораются вниз по очереди.

/*   Бегущая строка. 5 светодиодов  */  unsigned char upDown=1;         // начинаем с движения вверх     unsigned char cylon=0;          // определяет очередность LED  void setup() {                   DDRB = B00011111;             // устанавливаем порт B с 0 по 4 как выхода    }  void loop() {   if(upDown==1){          // если идем вверх, то     cylon++;     if(cylon>=4) upDown=0;      // когда достигнут наибольший номер LED, то в след. цикле идем вниз   }   else {     cylon--;     if(cylon==0) upDown=1;      // когда достигнут наименьший номер LED, то в след. цикле идем вверх   }   PORTB = 1      

Мы будем рады и вашему мнению

Оставить ответ

Журнал светодиод
Logo