Программирование - это просто
Advertisement
Главная arrow Статьи arrow Микроэлектроника для чайников. arrow Микроэлектроника для чайников. Урок 3. "Музыка огоньков".
01.12.2020 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
Микроэлектроника для чайников. Урок 3. "Музыка огоньков". Печать E-mail
Автор megabax   
15.11.2020 г.
New Page 1

Микроэлектроника для чайников. Урок 3. "Музыка огоньков".

На прошлом уроке мы с вами создали схему и программу "бегущий огонь" а потом развили ее до простой "музыки огоньков". Сегодня мы еще усложним программу, используя такое понятие языка C, как структура:

struct item {

    bool light; //горит ли лампочка

    int led; //номер порта

} a[16] = {{true, 10}, {true, 11}, {true, 12}, {true,13}, {false,13}, {false,12}, {false,11}, {false, 10}, {true, 10}, {false, 10}, {true,11},

          {false,11}, {true,12}, {false,12}, {true,13}, {false,13}}; 

 

 

void setup() {

  // put your setup code here, to run once:

  pinMode(10, OUTPUT);

  pinMode(11, OUTPUT);

  pinMode(12, OUTPUT);

  pinMode(13, OUTPUT);

}

 

void loop() {

  for(int i=0; i<16; i++)

  {

    if(a[i].light)

    {

      digitalWrite(a[i].led, HIGH); //эта команда используется для включения или выключения напряжения на цифровом порте; led - номер порта, второй аргумент - включение (HIGH) или выключение (LOW)

    }

    else

    {

       digitalWrite(a[i].led, LOW); //эта команда используется для включения или выключения напряжения на цифровом порте; led - номер порта, второй аргумент - включение (HIGH) или выключение (LOW)

    }

    delay(300); //эта команда используется для ожидания между действиями, аргумент - время ожидания в миллисекундах

  }

}

 

 

Теперь мы можем произвольно зажигать (light=true) и гасить (light=false) произвольную лампочку. в данном примере сначала мы зажигаем первую, потом вторую., третью и четвертую лампочки, таким образом что в будут гореть все четыре светодиода. потом в обратном порядке гасим их, после чего по очереди каждый светодиод  еще и зажигаем и потом гасим.

А теперь еще немножко доработаем программу. во первых, сделаем так, чтобы дину массива задать только в одном месте, а не в двух, как у нас сейчас. Для этого при помощи define объявим целочисленную константу count. А во-вторых, зададим разное время для каждого такта нашего бегущего огонька:

 

#define count 16 //количество элементов массива, правильней его задать так

 

struct node {

    bool light; //горит ли лампочка

    int led; //номер порта

    int delay_mils; //задержка, миллисекунд

} a[count] = {{true, 10, 300}, {true, 11, 300}, {true, 12, 300}, {true,13, 300}, {false,13,1000}, {false,12,1000}, {false,11,1000}, {false, 10,1000}, {true, 10,500},

          {false, 10,200}, {true,11,500},

          {false,11,200}, {true,12,500}, {false,12,200}, {true,13,500}, {false,13,1500}}; 

 

 

void setup() {

  // put your setup code here, to run once:

  pinMode(10, OUTPUT);

  pinMode(11, OUTPUT);

  pinMode(12, OUTPUT);

  pinMode(13, OUTPUT);

}

 

void loop() {

  for(int i=0; i<count; i++)

  {

    if(a[i].light)

    {

      digitalWrite(a[i].led, HIGH); //эта команда используется для включения или выключения напряжения на цифровом порте; led - номер порта, второй аргумент - включение (HIGH) или выключение (LOW)

    }

    else

    {

       digitalWrite(a[i].led, LOW); //эта команда используется для включения или выключения напряжения на цифровом порте; led - номер порта, второй аргумент - включение (HIGH) или выключение (LOW)

    }

    delay(a[i].delay_mils); //эта команда используется для ожидания между действиями, аргумент - время ожидания в миллисекундах

  }

}

 
« След.   Пред. »
 
© 2020 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги