多個 LED 的顯示

陳信嘉

內容參考

第 1 章:Arduino 快速入門

第 2 章:看懂電子電路

第 3 章:Arduino 的數位輸出 / 輸入

第 4 章:Arduino 的類比輸出 / 輸入

第 5 章:用序列埠 (Serial Port) 與 PC 通訊

第 6 章:三色 LED 的控制

第 7 章:LED 排燈

第 8 章:光線感知 - 做一個自動照明系統

第 9 章:溫度感知 - 使用熱敏電阻監測水溫

第 10 章:潮濕感知 - 使一個花草澆水警示系統

第 11 章:使用七段顯示器 - 做一個按鈕計數器

Ch 06: 三色LED的控制

Lab 6. RGB 三色 LED

單色 LED 與三色 LED

共陰、共陽

Arduino 的類比腳位

三種顏色各別的範圍

程式:隨機亂數

接法不同、程式也相反

(本範例使用共陰)

random(小值, 大值)

範例程式 lab6

const int bluePin = 9; // 設定 bluePin 的 PWM 驅動腳位
const int greenPin = 10; // 設定 greenPin 的 PWM 驅動腳位
const int redPin = 11; // 設定 redPin 的 PWM 驅動腳位
void setup() {
}
void loop() {
  int blueValue =0; // blueValue 為藍燈 PWM 驅動值,初值為 0
  int redValue = 0; // redValue 為紅燈 PWM 驅動值,初值為 0
  int greenValue = 0; // greenValue 為綠燈 PWM 驅動值,初值為 0
  for(redValue=1; redValue<=255; redValue+=1){ //紅色呼吸燈迴圈
    analogWrite(redPin, redValue);
    delay(10);
  }
  for(redValue=255; redValue>=0; redValue-=1){
    analogWrite(redPin, redValue);
    delay(10);
  }
  for(greenValue=1; greenValue<=150; greenValue+=1){ //綠色呼吸燈迴圈
    analogWrite(greenPin, greenValue);
    delay(10);
  }
  for(greenValue=150; greenValue>=0; greenValue-=1){
    analogWrite(greenPin, greenValue);
    delay(10);
  }
  for(blueValue=1; blueValue<=255; blueValue+=1) { //藍色呼吸燈迴圈
    analogWrite(bluePin, blueValue);
    delay(10);
  }
  for(blueValue=255; blueValue>=0; blueValue-=1) {
    analogWrite(bluePin, blueValue);
    delay(10);
  }
  for (int i=1; i<=100;i+=1) { // 用亂數亮燈100次的迴圈
    redValue=random(1,30);
    greenValue=random(1,20);
    blueValue=random(1,50);
    analogWrite(redPin,redValue);
    analogWrite(greenPin,greenValue);
    analogWrite(bluePin,blueValue);
    delay(500);
  }
  analogWrite(redPin,0);
  analogWrite(greenPin,0);
  analogWrite(bluePin,0);
}

更多練習

  • 隨機亂數讓顯示的速度有變化
  • 漸層效果的顏色變化

範例程式 lab6-change (漸層效果的顏色變化)

const int pinR = 9; // 設定 bluePin 的 PWM 驅動腳位
const int pinG = 10; // 設定 greenPin 的 PWM 驅動腳位
const int pinB = 11; // 設定 redPin 的 PWM 驅動腳位

int maxR = 50;
int maxG = 20;
int maxB = 30;

int stepR = 10;
int stepG = 10;
int stepB = 10;

int count = 100; // 迴圈次數

int valueR, valueG, valueB;

int valueR1 = 0;
int valueG1 = 0;
int valueB1 = 0;

int valueR2 = 0;
int valueG2 = 0;
int valueB2 = 0;


void setup()
{
  valueR1 = random(1,maxR);
  valueG1 = random(1,maxG);
  valueB1 = random(1,maxB);
}


void loop()
{
  int ms = random(20, 200);  // delay value
  
  valueR2 = random(1,maxR);
  valueG2 = random(1,maxG);
  valueB2 = random(1,maxB);

  stepR = (valueR2-valueR1) / count;
  stepG = (valueG2-valueG1) / count;
  stepB = (valueB2-valueB1) / count;

  valueR = valueR1;
  valueG = valueG1;
  valueB = valueB1;
  
  for(int i=0; i<count; i++)
  {
    valueR += stepR;
    valueG += stepG;
    valueB += stepB;
    
    analogWrite(pinR,valueR);
    analogWrite(pinG,valueG);
    analogWrite(pinB,valueB);
    delay(30);
  }

  valueR1 = valueR2;
  valueG1 = valueG2;
  valueB1 = valueB2;
    
  
}

Ch 07: LED排燈

Lab 7-1. 使 LED 排燈左右來回點亮

Lab 7-2. 改變速度

整齊排列各元件

程式:陣列、函式

補充

自訂函式開發

範例程式 lab7-1

const int firstLedPin = 4; //設定開頭 LED 腳位編號, 並設為整數常數
const int lastLedPin = 13; //設定最後 LED 腳位編號, 並設為整數常數
void setup() {
  for(int led = firstLedPin; led <= lastLedPin; led= led +1){
    pinMode(led, OUTPUT); //將每個數位輸出入腳位 (4~13) 設為 OUTPUT 模式
  }
}
void loop() {
  for(int led = firstLedPin; led <= lastLedPin; led= led +1) {
    digitalWrite(led, HIGH); //將高電位輸出到 led 腳位
    delay(100);
    digitalWrite(led, LOW); //將低電位輸出到 led 腳位
  }
  for(int led = lastLedPin; led >= firstLedPin; led= led -1) {
    digitalWrite(led, HIGH); //把高電位輸出到 led 腳位
    delay(100);
    digitalWrite(led, LOW); //將低電位輸出到 led 腳位
  }
}

範例程式 lab7-2

const int firstLedPin = 4;
const int lastLedPin = 13;
void setup() {
  for(int led = firstLedPin; led <= lastLedPin; led= led +1){
    pinMode(led, OUTPUT);
  }
}
void loop() {
  for(int speed=0;speed<=5;speed=speed+1) { //這裡不一樣
    for(int led = firstLedPin; led <= lastLedPin; led= led +1) {
      digitalWrite(led, HIGH);
      delay(speed*20); //這裡不一樣
      digitalWrite(led, LOW);
    }
    for(int led = lastLedPin; led >= firstLedPin; led= led -1) {
      digitalWrite(led, HIGH);
      delay(speed*20); //這裡不一樣
      digitalWrite(led, LOW);
    }
  } //這裡不一樣
}

更多練習

  • 設計各種變化
  • 至少三種不同的變化
    • ​不定期變換

範例程式 exercise/led_bar_basic (簡單架構)


// output led
int p0 = 4;
int p1 = 5;
int p2 = 6;
int p3 = 7;
int p4 = 8;
int p5 = 9;
int p6 = 10;
int p7 = 11;
int p8 = 12;
int p9 = 13;

int u = 500;

void setup()
{
  pinMode(p0, OUTPUT);
  pinMode(p1, OUTPUT);
  pinMode(p2, OUTPUT);
  pinMode(p3, OUTPUT);
  pinMode(p4, OUTPUT);
  pinMode(p5, OUTPUT);
  pinMode(p6, OUTPUT);
  pinMode(p7, OUTPUT);
  pinMode(p8, OUTPUT);
  pinMode(p9, OUTPUT);
}


void loop()                     
{
    u=100;
    led(1,0,0,0,0,0,0,0,0,0);  delay(u);
    led(0,1,0,0,0,0,0,0,0,0);  delay(u);
    led(0,0,1,0,0,0,0,0,0,0);  delay(u);
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,0,0,1,0,0,0,0,0);  delay(u);
    led(0,0,0,0,0,1,0,0,0,0);  delay(u);
    led(0,0,0,0,0,0,1,0,0,0);  delay(u);
    led(0,0,0,0,0,0,0,1,0,0);  delay(u);
    led(0,0,0,0,0,0,0,0,1,0);  delay(u);
    led(0,0,0,0,0,0,0,0,0,1);  delay(u);
    led(0,0,0,0,0,0,0,0,1,0);  delay(u);
    led(0,0,0,0,0,0,0,1,0,0);  delay(u);
    led(0,0,0,0,0,0,1,0,0,0);  delay(u);
    led(0,0,0,0,0,1,0,0,0,0);  delay(u);
    led(0,0,0,0,1,0,0,0,0,0);  delay(u);
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,1,0,0,0,0,0,0,0);  delay(u);
    led(0,1,0,0,0,0,0,0,0,0);  delay(u);
}


void led(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
    digitalWrite(p0, a0);
    digitalWrite(p1, a1);
    digitalWrite(p2, a2);
    digitalWrite(p3, a3);
    digitalWrite(p4, a4);
    digitalWrite(p5, a5);
    digitalWrite(p6, a6);
    digitalWrite(p7, a7);
    digitalWrite(p8, a8);
    digitalWrite(p9, a9);
}

範例程式 exercise/led_bar_demo (多種風格架構)


// output led
int p0 = 4;
int p1 = 5;
int p2 = 6;
int p3 = 7;
int p4 = 8;
int p5 = 9;
int p6 = 10;
int p7 = 11;
int p8 = 12;
int p9 = 13;

int u = 500;

void setup()
{
  pinMode(p0, OUTPUT);
  pinMode(p1, OUTPUT);
  pinMode(p2, OUTPUT);
  pinMode(p3, OUTPUT);
  pinMode(p4, OUTPUT);
  pinMode(p5, OUTPUT);
  pinMode(p6, OUTPUT);
  pinMode(p7, OUTPUT);
  pinMode(p8, OUTPUT);
  pinMode(p9, OUTPUT);
}


void loop()                     
{
  for(int i=0; i<20; i++) { type_a1(); }
  for(int i=0; i<5 ; i++) { type_a2(); }
  for(int i=0; i<5 ; i++) { type_a3(); }
  
}


void led(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
    digitalWrite(p0, a0);
    digitalWrite(p1, a1);
    digitalWrite(p2, a2);
    digitalWrite(p3, a3);
    digitalWrite(p4, a4);
    digitalWrite(p5, a5);
    digitalWrite(p6, a6);
    digitalWrite(p7, a7);
    digitalWrite(p8, a8);
    digitalWrite(p9, a9);
}


void type_a1()
{
   led(rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2);
   delay(random(20,500));
}


void type_a2()
{
    u=1000;
    led(1,1,1,1,1,1,1,1,1,1);  delay(u);
    led(0,0,0,0,0,0,0,0,0,0);  delay(u);
}


void type_a3()
{
    u = 500;
    led(1,0,1,0,1,0,1,0,1,0);  delay(u);
    led(0,1,0,1,0,1,0,1,0,1);  delay(u);
}

範例程式 exercise/led_bar_style (更多的花樣)


// output led
int p0 = 4;
int p1 = 5;
int p2 = 6;
int p3 = 7;
int p4 = 8;
int p5 = 9;
int p6 = 10;
int p7 = 11;
int p8 = 12;
int p9 = 13;

int u = 500;

void setup()
{
  pinMode(p0, OUTPUT);
  pinMode(p1, OUTPUT);
  pinMode(p2, OUTPUT);
  pinMode(p3, OUTPUT);
  pinMode(p4, OUTPUT);
  pinMode(p5, OUTPUT);
  pinMode(p6, OUTPUT);
  pinMode(p7, OUTPUT);
  pinMode(p8, OUTPUT);
  pinMode(p9, OUTPUT);
}


void loop()                     
{
  for(int i=0; i<10; i++) { type_a1(); }
  for(int i=0; i<5 ; i++) { type_a2(); }
  for(int i=0; i<5 ; i++) { type_a3(); }
  for(int i=0; i<5 ; i++) { type_a4(); }
  for(int i=0; i<5 ; i++) { type_a5(); }

  for(int i=0; i<5 ; i++) { type_b1(); }  
  for(int i=0; i<5 ; i++) { type_b2(); }  
  
  for(int i=0; i<10; i++) { type_c1(); }
  for(int i=0; i<2 ; i++) { type_c2(); }
  
}


void led(int a0, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
{
    digitalWrite(p0, a0);
    digitalWrite(p1, a1);
    digitalWrite(p2, a2);
    digitalWrite(p3, a3);
    digitalWrite(p4, a4);
    digitalWrite(p5, a5);
    digitalWrite(p6, a6);
    digitalWrite(p7, a7);
    digitalWrite(p8, a8);
    digitalWrite(p9, a9);
}


void type_a1()
{
   u = 200;
   led(rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2, rand()%2);
   delay(u);
}


void type_a2()
{
    u=1000;
    led(1,1,1,1,1,1,1,1,1,1);  delay(u);
    led(0,0,0,0,0,0,0,0,0,0);  delay(u);
}


void type_a3()
{
    u = 500;
    led(1,0,1,0,1,0,1,0,1,0);  delay(u);
    led(0,1,0,1,0,1,0,1,0,1);  delay(u);
}


void type_a4()
{
    u = 200;
    led(0,1,1,1,1,1,1,1,1,1);  delay(u);
    led(1,0,1,1,1,1,1,1,1,1);  delay(u);
    led(1,1,0,1,1,1,1,1,1,1);  delay(u);
    led(1,1,1,0,1,1,1,1,1,1);  delay(u);
    led(1,1,1,1,0,1,1,1,1,1);  delay(u);
    led(1,1,1,1,1,0,1,1,1,1);  delay(u);
    led(1,1,1,1,1,1,0,1,1,1);  delay(u);
    led(1,1,1,1,1,1,1,0,1,1);  delay(u);
    led(1,1,1,1,1,1,1,1,0,1);  delay(u);
    led(1,1,1,1,1,1,1,1,1,0);  delay(u);
}


void type_a5()
{
    u=100;
    led(1,0,0,0,0,0,0,0,0,0);  delay(u);
    led(0,1,0,0,0,0,0,0,0,0);  delay(u);
    led(0,0,1,0,0,0,0,0,0,0);  delay(u);
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,0,0,1,0,0,0,0,0);  delay(u);
    led(0,0,0,0,0,1,0,0,0,0);  delay(u);
    led(0,0,0,0,0,0,1,0,0,0);  delay(u);
    led(0,0,0,0,0,0,0,1,0,0);  delay(u);
    led(0,0,0,0,0,0,0,0,1,0);  delay(u);
    led(0,0,0,0,0,0,0,0,0,1);  delay(u);
}


void type_b1()
{
    u=100;
    led(1,1,1,1,1,1,1,1,1,1);  delay(u);
    led(1,1,1,1,0,0,1,1,1,1);  delay(u);
    led(1,1,1,0,0,0,0,1,1,1);  delay(u);
    led(1,1,0,0,0,0,0,0,1,1);  delay(u);
    led(1,0,0,0,1,1,0,0,0,1);  delay(u);
    led(0,0,0,1,1,1,1,0,0,0);  delay(u);
    led(0,0,1,1,1,1,1,1,0,0);  delay(u);
    led(0,1,1,1,1,1,1,1,1,0);  delay(u);
}


void type_b2()
{
    u=100;
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,1,1,1,0,0,0,0,0);  delay(u);
    led(0,1,1,1,1,1,0,0,0,0);  delay(u);
    led(1,1,1,1,1,1,1,0,0,0);  delay(u);
    led(1,1,1,1,1,1,1,1,0,0);  delay(u);
    led(1,1,1,1,1,1,1,1,1,0);  delay(u);
    led(1,1,1,1,1,1,1,1,1,1);  delay(u);
}



void type_c1()
{
    led(0,0,0,0,0,0,0,0,0,0);  delay(800);
    led(1,1,1,1,1,1,1,1,1,1);  delay(400);
    led(0,0,0,0,0,0,0,0,0,0);  delay(100);
    led(1,1,1,1,1,1,1,1,1,1);  delay(200);
    led(0,0,0,0,0,0,0,0,0,0);  delay(100);
    led(1,1,1,1,1,1,1,1,1,1);  delay(200);
    led(0,0,0,0,0,0,0,0,0,0);  delay(100);
    led(1,1,1,1,1,1,1,1,1,1);  delay(200);
    led(0,0,0,0,0,0,0,0,0,0);  delay(100);
}


void type_c2()
{
  for(u=500; u>10; u-=50)
  {
    led(1,0,0,0,0,0,0,0,0,0);  delay(u);
    led(0,1,0,0,0,0,0,0,0,0);  delay(u);
    led(0,0,1,0,0,0,0,0,0,0);  delay(u);
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,0,0,1,0,0,0,0,0);  delay(u);
    led(0,0,0,0,0,1,0,0,0,0);  delay(u);
    led(0,0,0,0,0,0,1,0,0,0);  delay(u);
    led(0,0,0,0,0,0,0,1,0,0);  delay(u);
    led(0,0,0,0,0,0,0,0,1,0);  delay(u);
    led(0,0,0,0,0,0,0,0,0,1);  delay(u);
  }
  for(u=50; u>10; u-=3)
  {
    led(1,0,0,0,0,0,0,0,0,0);  delay(u);
    led(0,1,0,0,0,0,0,0,0,0);  delay(u);
    led(0,0,1,0,0,0,0,0,0,0);  delay(u);
    led(0,0,0,1,0,0,0,0,0,0);  delay(u);
    led(0,0,0,0,1,0,0,0,0,0);  delay(u);
    led(0,0,0,0,0,1,0,0,0,0);  delay(u);
    led(0,0,0,0,0,0,1,0,0,0);  delay(u);
    led(0,0,0,0,0,0,0,1,0,0);  delay(u);
    led(0,0,0,0,0,0,0,0,1,0);  delay(u);
    led(0,0,0,0,0,0,0,0,0,1);  delay(u);
  }
}

Ch 11: 使用七段顯示器

Lab 11. 七段顯示器做一個按鈕計數器

七段 LED

共陰、共陽

各腳位對照圖

程式:二維陣列

接法不同、程式也相反

(本範例使用共陰)

範例程式 lab11

int segmentPattern[10][7] = //宣告變數 segmentPattern 為二維陣列
  { {1,1,1,1,1,1,0},//使七段顯示器顯示數字 0
    {0,1,1,0,0,0,0},//顯示數字 1
    {1,1,0,1,1,0,1},//顯示數字 2
    {1,1,1,1,0,0,1},//顯示數字 3
    {0,1,1,0,0,1,1},//顯示數字 4
    {1,0,1,1,0,1,1},//顯示數字 5
    {1,0,1,1,1,1,1},//顯示數字 6
    {1,1,1,0,0,0,0},//顯示數字 7
    {1,1,1,1,1,1,1},//顯示數字 8
    {1,1,1,1,0,1,1},//顯示數字 9
  };
const int button = 2; //把 button 腳位設為 2
int count=0;
void setup() {
  for(int pin = 5; pin <= 11; pin = pin +1) {
    pinMode(pin, OUTPUT); //將 5-11 數位腳位模式設為 OUTPUT
  }
  pinMode(button, INPUT); //將 button 的腳位模式設為 INPUT
}
void sevenSegmentWrite(int digit) { //digit 顯示為 LED 字型的函式
  for(int ledSeg = 0; ledSeg < 7; ledSeg = ledSeg +1) {
    digitalWrite(ledSeg+5, segmentPattern[digit][ledSeg]);
  }
}
void loop() {
  int buttonStatus = 0; //buttonStatus 為按鈕狀態變數, 並將其值設為 0
  buttonStatus = digitalRead(button);
  delay(100);   //程式維持在上一行的狀態 0.1 秒
  sevenSegmentWrite(count); //將 count 值顯示到七段顯示器
  if (buttonStatus == HIGH) //若 buttonStatus 為 HIGH,
    count = count +1; //count 值加 1
  if(count > 9) //如果 count 的值大於 9
    count = 0;  //count 值將會回到 -1
  delay(100);   //程式維持在上一行的狀態 0.1 秒鐘
}

更多練習

  • 顯示英文『HELLO』
    • 連續兩個 L 的處理?!
  • 設計各種可能的變化

範例程式 exercise/seven_basic

/* 
  練習:七段顯示器逐一顯示 HELLO
*/

int helloPattern[5][7] = 
  { {0,1,1,0,1,1,1}, // H
    {1,0,0,1,1,1,1}, // E
    {0,0,0,1,1,1,0}, // L
    {0,0,0,1,1,1,0}, // L
    {1,1,1,1,1,1,0}, // O
  };

int count=0;

  
void setup()
{
  for(int pin = 5; pin <= 11; pin++)
  {
    pinMode(pin, OUTPUT);
  }
}


void sevenSegmentWrite(int digit)
{
  for(int ledSeg = 0; ledSeg < 7; ledSeg++)
  {
    digitalWrite(ledSeg+5, helloPattern[digit][ledSeg]);
  }
}


void allDark()
{
  // 七段顯示全滅
  for(int ledSeg = 0; ledSeg < 7; ledSeg++)
  {
    digitalWrite(ledSeg+5, 0);
  }
}

void loop()
{
  /*
  count = count + 1;
  if(count>4)
  {
    count = 0;
  }
  */
  
  count = (count + 1) % 5;
  
  allDark();
  delay(100);
  
  sevenSegmentWrite(count);
  delay(900);
    
}

範例程式 exercise/seven_style

/* 
  練習:七段顯示器顯示各種樣式
  共陰
  七段顯示器的接腳:5, 6, 7, 8, 9, 10, 11 (必須連續)
  (小數點的p腳沒有使用到)
*/

const int button = 2; //把 button 腳位設為 2
int pinA=5;  // 七段顯示器的起始腳位
int style_total = 8;  // 此程式內共有幾種類型 (輪替)

int style=0;
int count=0;


void setup()
{
  for(int pin=0; pin<7; pin++)
  {
    pinMode(pinA+pin, OUTPUT);
  }
  pinMode(button, INPUT); 
}


void sevenSegmentWritePattern(int a, int b, int c, int d, int e, int f, int g, int ms)
{
  // 傳入位置a~g的值 (0/1),最後一個參數是 delay的值
   digitalWrite(pinA, a);
   digitalWrite(pinA+1, b);
   digitalWrite(pinA+2, c);
   digitalWrite(pinA+3, d);
   digitalWrite(pinA+4, e);
   digitalWrite(pinA+5, f);
   digitalWrite(pinA+6, g);
   delay(ms);
   
}


void loop()
{
  int buttonStatus = 0; //buttonStatus 為按鈕狀態變數, 並將其值設為 0
  buttonStatus = digitalRead(button);
  // delay(100);   //程式維持在上一行的狀態 0.1 秒
  
  if (buttonStatus == HIGH)
  {
    style = (style + 1) % 5;  // 共有五種樣式
  }

  // count 定時要更換
  count = count + 1;
  if(count>10)
  {
    count = 0;
    style = (style+1) % style_total;
  }

  switch(style)
  {
    case 0: 
      // 樣式:繞圈圈
      sevenSegmentWritePattern(1, 0, 0, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 1, 0, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 1, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 1, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 0, 1, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 0, 0, 1, 0, 100);
      break;


    case 1: 
      // 樣式:繞圈圈 (長度2格)
      sevenSegmentWritePattern(1, 1, 0, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 1, 1, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 1, 1, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 1, 1, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 0, 1, 1, 0, 100);
      sevenSegmentWritePattern(1, 0, 0, 0, 0, 1, 0, 100);
      break;


    case 2: 
      // 樣式:繞圈圈 (長度3格)
      sevenSegmentWritePattern(1, 1, 1, 0, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 1, 1, 1, 0, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 1, 1, 1, 0, 0, 100);
      sevenSegmentWritePattern(0, 0, 0, 1, 1, 1, 0, 100);
      sevenSegmentWritePattern(1, 0, 0, 0, 1, 1, 0, 100);
      sevenSegmentWritePattern(1, 1, 0, 0, 0, 1, 0, 100);
      break;


  case 3:
    // 樣式:8字型 (長度2格)
    /*
    sevenSegmentWritePattern(1, 0, 0, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 1, 0, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 0, 1, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 1, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 1, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 1, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 0, 1, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 1, 0, 100);
    */
    sevenSegmentWritePattern(1, 1, 0, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 1, 0, 0, 0, 0, 1, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 1, 0, 1, 100);
    sevenSegmentWritePattern(0, 0, 0, 1, 1, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 1, 1, 0, 0, 0, 100);
    sevenSegmentWritePattern(0, 0, 1, 0, 0, 0, 1, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 1, 1, 100);
    sevenSegmentWritePattern(1, 0, 0, 0, 0, 1, 0, 100);
    break;


  case 4:
    // 樣式:上下兩小圓閃礫
    sevenSegmentWritePattern(1, 1, 0, 0, 0, 1, 1, 500);
    sevenSegmentWritePattern(0, 0, 1, 1, 1, 0, 1, 500);
    break;


  case 5:
    // 樣式:縱橫輪替
    sevenSegmentWritePattern(1, 0, 0, 1, 0, 0, 1, 500);
    sevenSegmentWritePattern(0, 1, 1, 0, 1, 1, 0, 500);
    break;
    
    
  case 6:
    // 樣式:逐一填滿又逐一消失
    sevenSegmentWritePattern(1, 0, 0, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(1, 1, 0, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(1, 1, 1, 0, 0, 0, 0, 100);
    sevenSegmentWritePattern(1, 1, 1, 1, 0, 0, 0, 100);
    sevenSegmentWritePattern(1, 1, 1, 1, 1, 0, 0, 100);
    sevenSegmentWritePattern(1, 1, 1, 1, 1, 1, 0, 100);
    sevenSegmentWritePattern(0, 1, 1, 1, 1, 1, 0, 100);
    sevenSegmentWritePattern(0, 0, 1, 1, 1, 1, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 1, 1, 1, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 1, 1, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 1, 0, 100);
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 0, 0, 200); // 暫停
    break;


  case 7:
    // 樣式:全亮、全滅閃礫
    sevenSegmentWritePattern(0, 0, 0, 0, 0, 0, 0, 200);
    sevenSegmentWritePattern(1, 1, 1, 1, 1, 1, 1, 200);
    break;

  }
  
}

更多 LED?

74HC595

WS2812B

......

Arduino 多個 LED 的顯示

By 陳信嘉

Arduino 多個 LED 的顯示

  • 230