// PGA
// dùng mảng để khai báo các chân led
const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
/* tính toán số phần tử có trong mảng việc tính toán này sẽ giúp ích
cho việc nêu ta muốn thêm một chân led vào mạch thì ko cần phải sửa
lại code, sizeof(ledPins) hàm này nó sẽ trả về số byte để lưu toàn bộ mảng ledPin,
sizeof(ledPins[0]) hàm này nó sẽ trả về số byte của phần tử 0 trong mảng
việc lấy hai đó chia nhau, toàn bộ mảng chia cho giá trị của một phần tử trong mảng
cho nhau chúng ta sẽ được số phần tử có trong mảng
*/
// áp dụng Tính số phần tử trong mảng ledPins và gán nó cho biến numLeds
const int numLeds = sizeof(ledPins) / sizeof(ledPins[0]);
// khai báo các hàm
// hàm void là một loại hàm không trả về giá trị. nó chỉ thực hiện code
void allOn(); //Hàm bật tất cả các LED
void allOff(); //Hàm tắt tất cả các LED
void blinkAll(); //Hàm nhấp nháy LED
void runningLight(); //Hàm tạo hiêu ứng LED sáng đuổi
void tangdan ();
void randomBlink(); //Hàm nhấp nháy một LED bất kì
void sparkle(); //Hàm tạo hiệu ứng chớp tắt cho LED
void fadeInOut(); //Hàm tạo hiệu ứng bật tất cả LED xong mờ dần
void alternatingBlink(); //Hàm tạo hiệu ứng LED sáng nháy xen kẽ
void setup() {
// đặt các chân của các LedPins làm chân đầu ra
int i=0;
while (i<numLeds ) {pinMode(ledPins[i], OUTPUT ); ++i;}
}
void loop() {
// gọi các hàm ra để thực hiện hàm
blinkAll();
delay (500);
tangdan ();
runningLight();
sparkle() ;
fadeInOut();
alternatingBlink();
alternatingBlink();
alternatingBlink();
alternatingBlink();
allOff;
delay (3000);
}
void allOn() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH); } //Bật tất cả các LED
}
void allOff() {
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW); }
}
void blinkAll (){
allOn();
delay (1000);
allOff ();
delay (1000);
}
void tangdan() {
int i=0;
while (i<numLeds) {
digitalWrite(ledPins[i], HIGH);
delay (200);
++i;}
i=numLeds-1;
while (i>=0) {digitalWrite (ledPins[i],LOW); delay (200); --i;}
i=numLeds-1;
while (i>=0) {digitalWrite (ledPins[i],HIGH); delay (200); --i;}
i=numLeds-1;
while (i>=0) {digitalWrite (ledPins[i],LOW); delay (200); --i;}
}
void runningLight() {
int i = 0;
while (i<numLeds)
{digitalWrite(ledPins[i], HIGH);
delay (200); digitalWrite(ledPins[i], LOW);
++i;}
i = numLeds-1;
while (i>=0)
{digitalWrite(ledPins[i], HIGH);
delay (200); digitalWrite(ledPins[i], LOW);
--i;}
allOff ();
}
void randomBlink() {
int i=0;
// random 5 lần
while (i < 5 ) { int randomLed = random (numLeds);
digitalWrite(randomLed, HIGH);
delay (500);
++i;
}
}
void sparkle() {
int randomLed1 = random(numLeds);
digitalWrite(ledPins[randomLed1], HIGH);
int randomLed2 = random(numLeds);
digitalWrite(ledPins[randomLed2], HIGH);
int randomLed3 = random(numLeds);
digitalWrite(ledPins[randomLed3], HIGH);
delay (1000);
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], HIGH);
delay(100);
}
int i = 0;
while (i<numLeds) {
digitalWrite(ledPins [i], LOW );
delay (100);
i++;
}
}
void fadeInOut(){
for (int brightness = 0; brightness <= 255; brightness++) {
for (int i = 0; i < numLeds; i++) {
analogWrite(ledPins[i], brightness);
}
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness--) {
for (int i = 0; i < numLeds; i++) {
analogWrite(ledPins[i], brightness);
}
delay(10);
}
allOff ();
delay (1000);
}
void alternatingBlink() {
for (int i = 0; i < numLeds; i += 2) {
digitalWrite(ledPins[i], HIGH);
}
delay(100);
for (int i = 0; i < numLeds; i += 2) {
digitalWrite(ledPins[i], LOW);
}
delay(100);
for (int i = 1; i < numLeds; i += 2) {
digitalWrite(ledPins[i], HIGH);
}
delay(100);
for (int i = 1; i < numLeds; i += 2) {
digitalWrite(ledPins[i], LOW);
}
delay(100);
}