Arduino-电位器调速的跑马灯(4)

问题:从第一个灯开始逐个点亮,然后最后那盏灯亮着,再从头开始点亮到倒数第二盏灯亮着,再从头开始点亮倒数第三盏灯,知道全部点亮。

一般大家在看滚动屏幕的时候会有这种效果出现,所以我就用这个来代替这做了类似的东西。连接图还是沿用Arduino-电位器调速的跑马灯里面用的电路。代码如下:

byte ledPin[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };    // 为LED引脚成成数组
int ledDelay; // 变灯之间的延时
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
int potPin = 2;    // 选择给电位器的输入引脚
int j = 10; //控制亮灯的位置

void setup() {
	for (int x = 0; x<10; x++) { // 设置所有引脚模式为输出模式 pinMode(ledPin[x], OUTPUT); } changeTime = millis(); } void loop() { ledDelay = analogRead(potPin); // 从电位器中读值 // 如果自最后一次变灯起已经过去了ledDelay毫秒的时间,则变灯 if ((millis() - changeTime) > ledDelay) {
		changeLED();
		changeTime = millis();
	}
}

void changeLED() {
	for (int x = 0; x<j; x++) {   // 关闭所有LED
		digitalWrite(ledPin[x], LOW);
	}
	digitalWrite(ledPin[currentLED], HIGH); // 点亮当前LED
	currentLED += direction; // 当前LED号增加direction表示的数值,相当于前进一个LED灯
	//这里更改点亮最后一个灯以后直接从头开始					 
	if (currentLED == j) { currentLED = 0; j--; }
        //当点亮最后一个灯的时候,就重新开始点。
	if (j == 1) { j = 10; }
}

0 Comments
Leave a Reply