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);
}
}
加油啊 朋友 加油,你也可以把它升级成这个形式的流水灯了。
http://v.youku.com/v_show/id_XNzEyNTE1OTcy.html 好东西 。。。。 正好用到,太好了 我也提供一些我的两种方法。
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);
}
如果我用只用6个analog做渐变流水灯该怎么用for呢?
页:
[1]