Программирование - это просто
Advertisement
Главная arrow C#, Delphi, VB, F#, Web и пр. arrow Прочее программирование arrow Микроэлектроника для чайников. arrow Микроэлектроника для чайников. Урок 3. "Музыка огоньков".
16.12.2017 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Микроэлектроника для чайников. Урок 3. "Музыка огоньков". Печать E-mail
Автор megabax   
28.08.2016 г.
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); //эта команда используется для ожидания между действиями, аргумент - время ожидания в миллисекундах

  }

}

 
« След.   Пред. »
 
© 2017 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше