拖尾灯代码,打算拆了2 做按钮中断
1,轻触按键一次,主程序中断,执行子程序,随机亮灯一盏,记录按键状态,停留在子程序中
2,轻触按键一次,退出子程序,执行主程序拖尾
咨询大牛,怎么添加?在哪里填。目前还没找到相关教程
const unsigned char leds[] = { A5, A4, A3, A2, A1, A0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }
const unsigned int maxPwm = 100;
const unsigned int initPwm = 100;
const unsigned int deltaPwm = 1;
const unsigned int deltaPercent = 70;
const unsigned long delayMs = 70;
const unsigned char ledNum = sizeof(leds) / sizeof(leds[0]);
unsigned int ledPwm[ledNum];
void setup()
{
for (char i = 0; i < ledNum; ++i)
{
pinMode(leds[i], OUTPUT);
ledPwm[i] = 0;
}
}
extern volatile unsigned long timer0_millis;
void loop()
{
static unsigned char head = 0;
static unsigned long lastTick = timer0_millis;
unsigned int i, j;
for (i = 0; i < ledNum; ++i)
{
if (ledPwm[i] == 0)
continue;
digitalWrite(leds[i], HIGH);
}
ledPwm[head] = initPwm;
for (i = 0; i < maxPwm; ++i)
{
for (j = 0; j < ledNum; ++j)
{
if (i == ledPwm[j])
digitalWrite(leds[j], LOW);
}
delayMicroseconds(1);
}
if (timer0_millis - lastTick < delayMs)
return;
lastTick = timer0_millis;
for (i = 0; i < ledNum; ++i)
{
ledPwm[i] = ledPwm[i] * deltaPercent / 100;
if (ledPwm[i] <= deltaPwm)
ledPwm[i] = 0;
else
ledPwm[i] -= deltaPwm;
if (i == head)
ledPwm[i] = initPwm;
}
head = (head + 1) % ledNum;
}
1,轻触按键一次,主程序中断,执行子程序,随机亮灯一盏,记录按键状态,停留在子程序中
2,轻触按键一次,退出子程序,执行主程序拖尾
咨询大牛,怎么添加?在哪里填。目前还没找到相关教程
const unsigned char leds[] = { A5, A4, A3, A2, A1, A0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }
const unsigned int maxPwm = 100;
const unsigned int initPwm = 100;
const unsigned int deltaPwm = 1;
const unsigned int deltaPercent = 70;
const unsigned long delayMs = 70;
const unsigned char ledNum = sizeof(leds) / sizeof(leds[0]);
unsigned int ledPwm[ledNum];
void setup()
{
for (char i = 0; i < ledNum; ++i)
{
pinMode(leds[i], OUTPUT);
ledPwm[i] = 0;
}
}
extern volatile unsigned long timer0_millis;
void loop()
{
static unsigned char head = 0;
static unsigned long lastTick = timer0_millis;
unsigned int i, j;
for (i = 0; i < ledNum; ++i)
{
if (ledPwm[i] == 0)
continue;
digitalWrite(leds[i], HIGH);
}
ledPwm[head] = initPwm;
for (i = 0; i < maxPwm; ++i)
{
for (j = 0; j < ledNum; ++j)
{
if (i == ledPwm[j])
digitalWrite(leds[j], LOW);
}
delayMicroseconds(1);
}
if (timer0_millis - lastTick < delayMs)
return;
lastTick = timer0_millis;
for (i = 0; i < ledNum; ++i)
{
ledPwm[i] = ledPwm[i] * deltaPercent / 100;
if (ledPwm[i] <= deltaPwm)
ledPwm[i] = 0;
else
ledPwm[i] -= deltaPwm;
if (i == head)
ledPwm[i] = initPwm;
}
head = (head + 1) % ledNum;
}