☛ 功能說明

從 Arduino 板接收電腦訊息控制 LED 亮與暗。 鍵值 0~3 可以控制四個 LED 狀態,LED 的狀態會顯示于 Serial Monitor 視窗中。 將 Arduino 與電腦連接,然後將程式上傳至 Arduino 板後,接著開啟 Serial Monitor 視窗,並且在傳送欄位中分別輸入數位 0~3,按下『傳送』鈕將字元傳送至 Arduino 板中,來切換 LED 的亮、暗狀態。 如下圖為電腦鍵盤輸入 0 時,Serial Monitor 視窗的顯示情形,L0 狀態由暗變亮,其中邏輯 1 代表 LED 亮,邏輯 0 代表 LED 暗。

☛ 麵包板接線圖及電路圖

☛ 程式碼

int i;                                               //阵列资料索引值
int num;                                             //键值
int led[]={10,11,12,13};                             //数位接脚 10~13 连接四个 LED
int status[]={0,0,0,0};                              //LED 状态

void setup()
{
     Serial.begin(9600);                             //初始化串列埠,设定鲍率 9600bps
     Serial.println("Press 0~3 toggle LED status");
     for(i=0;i<4;i++)                                //设定数位接脚 10~13 为输出模式
         pinMode(led[i],OUTPUT);
     for(i=0;i<4;i++)
         digitalWrite(led[i],LOW);                   //设定 LED 初始状态为暗
}

void loop()
{
     if(Serial.available()>0)                        //按任意键?
     {
        num=Serial.read();                           //读取按键值
        num=num-'0';                                 //按键值转换成数值
        if(num>=0 && num<=3)                         //按下 0~3 键
        {
           status[num]=!status[num];                 //改变 LED 状态
           digitalWrite(led[num],status[num]);
           Serial.print("Led status : ");
           for(i=0;i<4;i++)                          //显示 LED 状态
           {
               if(status[i]==1)
                  Serial.print("1");
               else
                  Serial.print("0");
           }
           Serial.println();
        }
     }
}

☛ 練習一、設計 Arduino 程式,從電腦接收訊息控制 LED 閃爍與暗。 按鍵 0、1、2、、3 分別控制四個 LED 狀態在閃爍與暗之間變化。

程式码㈠:

int i;
int num;
int led[]={10,11,12,13};
int status[]={0,0,0,0};

void setup()
{
     Serial.begin(9600);
     Serial.println("Press 0~3 toggle LED status");
     for(i=0;i<4;i++)
         pinMode(led[i],OUTPUT);
     for(i=0;i<4;i++)
         digitalWrite(led[i],LOW);
}

void loop()
{
     if(Serial.available()>0)
     {
        num=Serial.read();
        num=num-'0';
        if(num>=0 && num<=3)
        {
           status[num]=!status[num];
           Serial.print("Led status : ");
           for(i=0;i<4;i++)
           {
               if(status[i]==1)
                  Serial.print("1");
               else
                  Serial.print("0");
           }
           Serial.println();
        }
     }
     for(i=0;i<4;i++)                         //扫描 LED 状态, 根据状态点亮 LED
     {
         digitalWrite(led[i],status[i]);
     }
     delay(200);                              //延迟 200ms
     for(i=0;i<4;i++)                         //将 LED 全部变暗
     {
            digitalWrite(led[i],LOW);
     }
     delay(200);
}

程式碼㈡:

int i;
int num;
int led[]={10,11,12,13};
int status[]={0,0,0,0};

void setup()
{
     Serial.begin(9600);
     Serial.println("Press 0~3 toggle LED status");
     for(i=0;i<4;i++)
         pinMode(led[i],OUTPUT);
     for(i=0;i<4;i++)
         digitalWrite(led[i],LOW);
}

void loop()
{
     if(Serial.available()>0)
     {
        num=Serial.read();
        num=num-'0';
        if(num>=0 && num<=3)
        {
           status[num]=!status[num];
           Serial.print("Led status : ");
           for(i=0;i<4;i++)
           {
               if(status[i]==1)
                  Serial.print("1");
               else
                  Serial.print("0");
           }
           Serial.println();
        }
     }
     for(i=0;i<4;i++)
     {
         if(status[i]==1)
            flushing(i);
         else
            digitalWrite(led[i],status[i]);
     }
}

void flushing(int id)
{
     digitalWrite(led[id],HIGH);
     delay(200);
     digitalWrite(led[id],LOW);
     delay(200);
}

【備註】程式㈠所呈現的閃爍效果是 LED 的閃爍為同步閃爍,而程式㈡所呈現的 LED 閃爍為依序閃爍,如果每個 LED 狀態為 1,所呈現的閃爍效果會如流水燈效果一樣。

☛ 練習二、設計 Arduino 程式,從電腦接收訊息控制 LED 閃爍與暗。 按鍵 a、b、c、d 分別控制四個 LED 狀態在閃爍與暗之間變化。

int i;
int num;
int led[]={10,11,12,13};
int status[]={0,0,0,0};

void setup()
{
     Serial.begin(9600);
     Serial.println("Press 0~3 toggle LED status");
     for(i=0;i<4;i++)
         pinMode(led[i],OUTPUT);
     for(i=0;i<4;i++)
         digitalWrite(led[i],LOW);
}

void loop()
{
     if(Serial.available()>0)
     {
        num=Serial.read();
        num=num-'a';
        if(num>=0 && num<=3)
        {
           status[num]=!status[num];
           digitalWrite(led[num],status[num]);
           Serial.print("Led status : ");
           for(i=0;i<4;i++)
           {
               if(status[i]==1)
                  Serial.print("1");
               else
                  Serial.print("0");
           }
           Serial.println();
        }
     }
     for(i=0;i<4;i++)                         //扫描 LED 状态, 根据状态点亮 LED
     {
         digitalWrite(led[i],status[i]);
     }
     delay(200);                              //延迟 200ms
     for(i=0;i<4;i++)                         //将 LED 全部变暗
     {
            digitalWrite(led[i],LOW);
     }
     delay(200);
}