從 Arduino 學習程式的變化

陳信嘉

實習:LED 排燈的程式

內容章節

第 1 章:Arduino 快速入門

第 2 章:看懂電子電路

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

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

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

第 6 章:三色 LED 的控制

第 7 章:LED 排燈

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

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

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

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

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);
  }
}

......

Made with Slides.com