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

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

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

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

  • B (цифровые входа/выхода с 8 по 13)
  • C (аналоговые входа)
  • D (цифровые входа/выхода с 0 по 7)

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

Бегущая строка на 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 << 0; // 00000001
varA = 1 << 1; // 00000010
varA = 1 << 2; // 00000100

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

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

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

/*
  Бегущая строка. 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 << cylon;			//сдвиг
  delay(200);              		// пауза 200 мс
}

НЕТ КОММЕНТАРИЕВ

ОСТАВЬТЕ ОТВЕТ