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);
//эта команда используется для ожидания между действиями, аргумент - время
ожидания в миллисекундах
}
} |
|