# 1.LED與開關控制(ArduinoDemo1)
###### tags: `ArduinoDemo`
**分類:LED與開關控制**
**總覽:**
41-1控制四個LED 執行霹靂燈閃爍移位變化。
49-2控制兩個LED 輪流由最暗變化至最亮,再由最亮變化至最暗。
54-2控制四個LED 亮度變化並依序來回左右移。每一個LED 亮度由暗逐漸變亮,再由亮逐漸變暗。
59-2控制四個LED 模擬拖尾霹靂燈變化。
69-2使用一個指撥開關控制一個LED,當開關接通(ON)時,LED 快速閃爍,反之當開關斷開(OFF)時,LED 慢速閃爍。
74-1使用一個指撥開關控制四個LED 移位方向。當開關斷開(OFF)時,LED 單燈閃爍右移;當開關接通(ON)時,LED 單燈閃爍左移。
80-2使用一個按鍵開關控制兩個LED。按一下按鍵開關時,LED 重覆快閃3 次再將LED 關閉1 秒,再按一下按鍵開關時,LED 暗。
81-1利用一個按鍵開關控制四個LED 移位方向。每按一下按鍵開關,LED 的移動方向 改變。若LED 原來移動方向為右移 ,按一下 按鍵開關時,改變為左移;若 LED 原來移動方向為左移,按一下按鍵開關時,改變為右移。
---
41-1控制四個LED 執行霹靂燈閃爍移位變化。
---
```Arduino=
const int led[]={10,11,12,13};
int i;
int j=0;
int direct=0;
void setup()
{
for(i=0;i<4;i++)
pinMode(led[i],OUTPUT);
}
void loop()
{
for(i=0;i<4;i++)
{
digitalWrite(led[i],LOW);
}
digitalWrite(led[j],HIGH);
delay(200);
digitalWrite(led[j],LOW);
delay(200);
digitalWrite(led[j],HIGH);
delay(200);
if(direct==0)
{
if(j==3)
direct=1;
else
j=j+1;
}
else
{
if(j==0)
direct=0;
else
j=j-1;
}
}
```
---
49-2控制兩個LED 輪流由最暗變化至最亮,再由最亮變化至最暗。
---
```Arduino=
int led1 = 10;
int led2 = 11;
void setup()
{
}
void loop()
{
byte bt;
//led1
for(bt=0;bt<255;bt+=5){
analogWrite(led1,bt);
delay(50);
}
for(bt=255;bt>0;bt-=5){
analogWrite(led1,bt);
delay(50);
}
analogWrite(led1,0);
//led2
for(bt=0;bt<255;bt+=5){
analogWrite(led2,bt);
delay(50);
}
for(bt=255;bt>0;bt-=5){
analogWrite(led2,bt);
delay(50);
}
analogWrite(led2,0);
}
```
---
54-2控制四個LED 亮度變化並依序來回左右移。每一個LED 亮度由暗逐漸變亮,再由亮逐漸變暗。
---
```Arduino=
int leds[] = {3,9,10,11};
void setup()
{
}
void loop()
{
int bt;
//led1
for(int led=0;led<4;led++){ //循環四顆led
for(bt=0;bt<255;bt+=5){ //漸亮
analogWrite(leds[led],bt);
delay(20);
}
for(bt=255;bt>0;bt-=5){ //漸暗
analogWrite(leds[led],bt);
delay(20);
}
analogWrite(leds[led],0); //關閉led
}
//for(byte led=0;led<4;led++){ //循環四顆led
for(int led=3;led>=0;led--){
for(bt=0;bt<255;bt+=5){ //漸亮
analogWrite(leds[led],bt);
delay(20);
}
for(bt=255;bt>0;bt-=5){ //漸暗
analogWrite(leds[led],bt);
delay(20);
}
analogWrite(leds[led],0); //關閉led
}
}
```
---
59-2控制四個LED 模擬拖尾霹靂燈變化。
---
```Arduino=
const int led[] ={3,9,10,11};
int varNums;
int ledNums;
const int brightness[7][4]=
{{250, 0, 0, 0},
{100,250, 0, 0},
{ 50,100,250, 0},
{ 5, 50,100,250},
{ 0, 5, 50,100},
{ 0, 0, 5, 50},
{ 0, 0, 0, 5} };
void setup()
{
}
void loop()
{
for(varNums=0;varNums<7;varNums++)
{
for(ledNums=0;ledNums<4;ledNums++)
analogWrite(led[ledNums],brightness[varNums][ledNums]);
delay(100);
}
for(varNums=0;varNums<7;varNums++)
{
for(ledNums=0;ledNums<4;ledNums++)
analogWrite(led[ledNums],brightness[varNums][3-ledNums]);
delay(100);
}
}
```
---
69-2使用一個指撥開關控制一個LED,當開關接通(ON)時,LED 快速閃爍,反之當開關斷開(OFF)時,LED 慢速閃爍。
---
```Arduino=
const int sw=2;
const int led=13;
int val;
void setup() {
pinMode(sw,INPUT);
pinMode(led,OUTPUT);
}
void loop() {
val=digitalRead(sw);
if(val==HIGH)
{
digitalWrite(led,HIGH); //點亮LED。
delay(500); //延遲0.5 秒。
digitalWrite(led,LOW); //關閉LED。
delay(500); //延遲0.5 秒。
}
else if(val==LOW)
{
digitalWrite(led,HIGH); //點亮LED。
delay(1000); //延遲1 秒。
digitalWrite(led,LOW); //關閉LED。
delay(1000); //延遲1 秒。
}
}
```
---
74-1使用一個指撥開關控制四個LED 移位方向。當開關斷開(OFF)時,LED 單燈閃爍右移;當開關接通(ON)時,LED 單燈閃爍左移。
---
```Arduino=
const int sw=2;
const int led[]={10,11,12,13};
int i;
int j=0;
int val;
void setup()
{
pinMode(sw,INPUT_PULLUP);
for(i=0;i<4;i++)
{
pinMode(led[i],OUTPUT);
}
}
void loop()
{
val=digitalRead(sw);
for(i=0;i<4;i++)
{
digitalWrite(led[i],LOW);
}
if(val==HIGH)
{
digitalWrite(led,HIGH); //點亮LED。
delay(200); //延遲0.2 秒。
digitalWrite(led,LOW); //關閉LED。
delay(200); //延遲0.2 秒。
digitalWrite(led,HIGH); //點亮LED。
delay(200); //延遲0.2 秒。
if(j==0)
j=3;
else
j=j-1;
}
else if(val==LOW)
{
digitalWrite(led,HIGH); //點亮LED。
delay(200); //延遲0.2 秒。
digitalWrite(led,LOW); //關閉LED。
delay(200); //延遲0.2 秒。
digitalWrite(led,HIGH); //點亮LED。
delay(200); //延遲0.2 秒。
if(j==3)
j=0;
else
j=j+1;
}
}
```
---
80-2使用一個按鍵開關控制兩個LED。按一下按鍵開關時,LED 重覆快閃3 次再將LED 關閉1 秒,再按一下按鍵開關時,LED 暗。
---
```Arduino=
const int sw=2;
const int led=13;
const int debounceDelay=20;
int ledStatus=LOW;
int val;
void setup()
{
pinMode(sw,INPUT);
digitalWrite(sw,HIGH);
pinMode(led,OUTPUT);
}
void loop()
{
val=digitalRead(sw);
if(val==LOW)
{
delay(debounceDelay);
while(digitalRead(sw)==LOW)
;
ledStatus=!ledStatus;
//digitalWrite(led,ledStatus);
}
if (ledStatus){
digitalWrite(led,HIGH);
delay(200);
digitalWrite(led,LOW);
delay(200);
digitalWrite(led,HIGH);
delay(200);
digitalWrite(led,LOW);
delay(200);
digitalWrite(led,HIGH);
delay(200);
digitalWrite(led,LOW);
delay(1000);
}
else{
digitalWrite(led,LOW);
}
}
```
---
81-1利用一個按鍵開關控制四個LED 移位方向。每按一下按鍵開關,LED 的移動方向 改變。若LED 原來移動方向為右移 ,按一下 按鍵開關時,改變為左移;若 LED 原來移動方向為左移,按一下按鍵開關時,改變為右移。
---
```Arduino=
const int sw=2;
int led[] = {10,11,12,13};
const int debounceDelay=20;
int ledStatus=LOW;
int i;
int j=0;
int val;
void setup()
{
pinMode(sw,INPUT);
digitalWrite(sw,HIGH);
for(i=0;i<4;i++)
{
pinMode(led[i], OUTPUT);
}
}
void loop()
{
val=digitalRead(sw);
if(val==LOW)
{
delay(debounceDelay);
while(digitalRead(sw)==LOW)
;
ledStatus=!ledStatus;
//digitalWrite(led,ledStatus);
}
if (ledStatus){
for(i=0;i<4;i++){
digitalWrite(led[i],LOW);
}
digitalWrite(led[j], HIGH);
delay(1000);
j++;
if(j==4)
j=0;
}
else{
for(i=0;i<4;i++) {
digitalWrite(led[i],LOW);
}
digitalWrite(led[j], HIGH);
delay(1000);
j--;
if(j==-1)
j=3;
}
}
```