Эксперимент Маячок


Эксперимент 7. Бегущий огонёк



бет15/45
Дата13.02.2023
өлшемі1,82 Mb.
#67503
түріЗакон
1   ...   11   12   13   14   15   16   17   18   ...   45
Байланысты:
Amperka eksperiment

Эксперимент 7. Бегущий огонёк
← Пульсар | Оглавление | Мерзкое пианино →

В этом эксперименте мы заставляем огонёк бежать по светодиодной шкале.


Список деталей для эксперимента

  • 1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • 1 светодиодная шкала

  • 10 резисторов номиналом 220 Ом

  • 11 проводов «папа-папа»

Принципиальная схема

Схема на макетке

Обратите внимание

  • Обратите внимание, что в данном эксперименте резисторы установлены между катодами и землей в отличие от эксперимента пульсар.

  • Мы подключаем светодиоды к цифровым портам, начиная с порта 2. Мы можем использовать порты 0 и 1, но они являются каналами передачи данных последовательного порта и для каждой перепрошивки платы придется отключать устройства, подключенные к ним.

Скетч
p070_running_bar.ino
// светодиодная шкала подключена к группе пинов расположенных
// подряд. Даём понятные имена первому и последнему пинам
#define FIRST_LED_PIN 2
#define LAST_LED_PIN 11
void setup()
{
// в шкале 10 светодиодов. Мы бы могли написать pinMode 10
// раз: для каждого из пинов, но это бы раздуло код и
// сделало его изменение более проблематичным.
// Поэтому лучше воспользоваться циклом. Мы выполняем
// pinMode для (англ. for) каждого пина (переменная pin)
// от первого (= FIRST_LED_PIN) до последнего включительно
// (<= LAST_LED_PIN), всякий раз продвигаясь к следующему
// (++pin увеличивает значение pin на единицу)
// Так все пины от 2-го по 11-й друг за другом станут выходами
for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
pinMode(pin, OUTPUT);
}
void loop()
{
// получаем время в миллисекундах, прошедшее с момента
// включения микроконтроллера
unsigned int ms = millis();
// нехитрой арифметикой вычисляем, какой светодиод
// должен гореть именно сейчас. Смена будет происходить
// каждые 120 миллисекунд. Y % X — это остаток от
// деления Y на X; плюс, минус, скобки — как в алгебре.
int pin = FIRST_LED_PIN + (ms / 120) % 10;
// включаем нужный светодиод на 10 миллисекунд, затем —
// выключаем. На следующем проходе цикла он снова включится,
// если гореть его черёд, и мы вообще не заметим отключения
digitalWrite(pin, HIGH);
delay(10);
digitalWrite(pin, LOW);
}


Достарыңызбен бөлісу:
1   ...   11   12   13   14   15   16   17   18   ...   45




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет