Реклама ⓘ
Главная » Arduino
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Arduino UNO урок 4 - Бегущий огонь

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

У Arduino UNO имеется 3 порта:
B (цифровые входа/выхода с 8 по 13)
C (аналоговые входа)
D (цифровые входа/выхода с 0 по 7)

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

Мы будем использовать порт B. Сначала, мы должны установить все ножки порта B как цифровые выхода. У порта B имеется только 6 ножек. Биты регистра для В-порта DDRB должны быть установлены в 1, если нога будет использоваться как выход (OUTPUT), и в 0, если нога будет использовать как вход (INPUT). Биты портов нумеруются с 0 по 7, но не всегда содержат все 8 ног. Пример:
DDRB = B00111110; // установить ножки порта В с 1 по 5 как выхода, а 0 как вход.

Обратите внимание, что в микроконтроллерах фирмы Microchip все наоборот. 0 бит - нога работает как выход, а 1 - как вход.

В нашем проекте бегущего огня мы будем использовать 5 выходов:
DDRB = B00011111; // установить ноги порта В с 0 по 4 как выхода

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

Теперь вы видите, как легко мы можем включать и выключать светодиоды. Теперь расскажем вам об операторах сдвига

Есть 2 оператора двоичного сдвига: оператор сдвига влево << и оператор сдвига вправо >>. Оператор сдвига влево << заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >> сдвигает биты вправо.

Пример:
varA = 1; // 00000001
varA = 1 << 0; // 00000001
varA = 1 << 1; // 00000010
varA = 1 << 2; // 00000100

Бегущая дорожка на Arduino UNO

Теперь вернемся к нашей программе, которая показана ниже. Нам нужно ввести 2 переменные: первая upDown будет содержать значение куда двигаться - вверх или вниз, а вторая cylon какие светодиоды зажигать.

В функции 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 << cylon;			//сдвиг
  delay(200);              		// пауза 200 мс
}

Оригинал статьи

Теги:

Колтыков А.В. Опубликована: 2011 г. 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (5) | Я собрал (0) | Подписаться

0
Sm1th #
Для Arduino Mega 2560 порты регистра B - 10, 11, 12, 13, 50, 51, 52, 53.
Подробнее: http://arduino.cc/en/uploads/Hacking/PinMap2560big.png
Ответить
+1
Nodit #
Подскажи, пожалуйста, как рассчитываются номиналы резисторов и светодиодов, чтобы не спалить выходы платы? Там ведь +5V и токи до 40 милиампер допускаются?
И какие светодиоды с резисторами сюда можно ставить? Резистор как ограничитель напряжения выступает?
Ответить
+1
Иван #
Если выход понимает до 5 вольт, то есть закон Кирхгофа... Светодиод ест 3 В, и потребляет 20-30мА, остальные 2 вольта должен съесть резистор, 150 Ом. Чтобы ток в цепи не был больше 20-30мА, иначе светодиод сгорит
Ответить
0
Жора Дорфман #
Для щадящего режима лучше питать светодиоды от +5В через R=220 Ohm, а на ноги ардуины записывать ноль
Ответить
0
Асхат #
Подскажите, как реализовать на Arduino UNO: цифровые сигналы с 4 входов (4 канала переключателя гирлянд) транслировать на оставшиеся выходы. Прим этом необходимо иметь возможность коммутировать выходы между собой по заданной программе.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Ветрогенератор AVR-программатор USB ASP
вверх