930417801 发表于 2014-5-25 17:08:26

Arduino控制六位流水灯,采用两种方式让发光二极管循环显示

本帖最后由 930417801 于 2014-5-25 17:57 编辑

http://v.youku.com/v_show/id_XNzE2OTIzMjk2.html//第一种方式,采用顺序模式,先让六个发光二极管依次点亮然后在依次熄灭
void setup() {               
// 初始化数字引脚,使其为输出状态。
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {
digitalWrite(8, HIGH);   // 使Led亮
delay(100);
digitalWrite(9, HIGH);   // 使Led亮
delay(100);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(11,HIGH);
delay(100);
digitalWrite(12,HIGH);
delay(100);
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13, LOW);   
delay(100);
digitalWrite(12, LOW);   
delay(100);
digitalWrite(11, LOW);   
delay(100);
digitalWrite(10, LOW);   
delay(100);
digitalWrite(9, LOW);   
delay(100);   
digitalWrite(8, LOW);   
delay(100);

}
第二种方式用for循环,先让六个发光二极管依次点亮然后在依次熄灭
void setup()
{
for (int i=0; i<=5; i++)    //通过循环的方式设置0-5号引脚为输出状态
{
    pinMode(i,OUTPUT);
}
}
void loop()
{
for (int x=0; x<=5; x++)   //通过循环的方式依次让每个引脚的led在0.5秒内发光
{
    digitalWrite(x,HIGH);
    delay(150);
}
for (int x=5; x>=0; x--)   //通过循环的方式依次让每个引脚的led在0.5秒熄灭
{
    digitalWrite(x,LOW);
    delay(150);
}
}

lkdoall 发表于 2014-5-25 20:09:52

加油啊 朋友

unonewbie 发表于 2014-5-25 21:43:39

加油,你也可以把它升级成这个形式的流水灯了。

http://v.youku.com/v_show/id_XNzEyNTE1OTcy.html

抽烟不掉烟灰 发表于 2014-11-3 20:18:18

好东西    。。。。

1090805647 发表于 2014-11-22 21:46:36

正好用到,太好了

szpapas 发表于 2015-1-26 12:29:30

我也提供一些我的两种方法。

1. 用PORTB 来实现。
void loop()
{


int lamp=1;
for (int x=1; x<= 6; x++)   //通过循环的方式依次让每个引脚的led在0.5秒内发光
{
    PORTB = lamp;
    lamp = lamp << 1;
    delay(150);
}


lamp = lamp >> 1;
for (int x=1; x< 5; x++)   //通过循环的方式依次让每个引脚的led在0.5秒熄灭
{
    PORTB = lamp;
    lamp = lamp >> 1;
    delay(150);
}


}


2. 用Timer1的库来实现

#define Macro_SetPin( pin, state )( ( (state) == LOW ) ? Macro_SetPinLow( (pin) ) : Macro_SetPinHigh( (pin) ) )
#define Macro_SetPinLow( pin )   ( (pin) < 8 ) ? PORTD = PORTD & ~( 1 << (pin) ): PORTB = PORTB & ~( 1 << ( (pin) - 8 ) )
#define Macro_SetPinHigh( pin )( (pin) < 8 ) ? PORTD = PORTD |( 1 << (pin) ): PORTB = PORTB | ( 1 << ( (pin) - 8 ) )

#include <TimerOne.h>

int lamp=1;
int dir =0;

void timer_isr() {

if (lamp == 32) {
    dir = 1;
}

if (lamp == 1) {
    dir = 0;
}

if (dir == 0) {
    lamp = lamp << 1;
} else {
    lamp = lamp >> 1;
}

PORTB = lamp;
}

// 9-13
int pin=9;
int dir2;

void timer_isr2() {

if (pin == 13) {
    dir2 = 1;
}

if (pin == 9) {
    dir2 = 0;
}

if (dir2 == 0) {
    pin = pin + 1;
    Macro_SetPinHigh( pin );
    Macro_SetPinLow( pin-1 );
} else {
    pin = pin - 1;
    Macro_SetPinHigh( pin );
    Macro_SetPinLow( pin+1 );
}
}

void setup()
{
for (int i=9; i<=13; i++)    //通过循环的方式设置0-5号引脚为输出状态
{
    pinMode(i,OUTPUT);
}

Timer1.initialize(150000);
Timer1.attachInterrupt(timer_isr2);
}

我的孤独 发表于 2015-1-26 23:08:52

如果我用只用6个analog做渐变流水灯该怎么用for呢?
页: [1]
查看完整版本: Arduino控制六位流水灯,采用两种方式让发光二极管循环显示