Arduino操纵发光二极管(LED)

发光二极管英语Light-Emitting Diode缩写LED[1] 是一种能发光的半导体电子元件,透过三价与五价元素所组成的复合光源。此种电子元件早在1962年出现,早期只能够发出低光度的红光,被hp买下专利后当作指示灯利用。及后发展出其他单色光的版本,时至今日,能够发出的光已经遍及可见光、红外线紫外线,光度亦提高到相当高的程度。用途由初时的指示灯及显示板等;随着白光发光二极管的出现,近年逐渐发展至被普遍用作照明用途。

发光二极管只能够往一个方向导通(通电),叫作正向偏置(正向偏置),当电流流过时,电子与空穴在其内重合而发出单色光,这叫电致发光效 应,而光线的波长、颜色跟其所采用的半导体物料种类与故意掺入的元素杂质有关。具有效率高、寿命长、不易破损、反应速度快、可靠性高等传统光源不及的优 点。白光LED的发光效率近年有所进步;每千流明成本,也因为大量的资金投入使价格下降,但成本仍远高于其他的传统照明。虽然如此,近年仍然越来越多被用 在照明用途上。

——————本条解释源自维基百科

发光二极管应该是最常见最简单的输出器件了,因为它通常只有两种状态。亮和灭,市面上常见的发光二极管就有贴片式和直插式两类。下面简要介绍一下。
贴片式的在你的Arduino板子上就有几个,方形的透明小玩意,它们能告诉你一些简单的信息,譬如电路板上丝印层写着TX的LED如果亮起,则表明板子的主控器正在使用串口向外发送数据,同样RX的LED亮起表示串口正在接收数据。

上图所示的常见的直插引脚式发光二极管(LED),上图发光二极管有Ф3mm和Ф5mm两种,指的是发光二极管的直径。由上述照片可以看出,它们的引脚都有长短之分,长的引脚是正极,短的引脚是负极。只有当电流从长引脚流入,从短引脚流出时,LED才会发光。这种接线引脚有正负极之分的原件通常称为极性原件。
除了要注意LED的连接方向之外,一定不要忘记需要串联电阻,因为如果直接将发光二极管的正负极和电源或者端口的正负极相连,会导致发光二极管通过的电流过大而烧毁。发光二极管方向接反只是无法正常发亮工作,不会造成发光二极管的损坏。让我们根据欧姆定律来点小计算。
根据我们查阅相关手册(查阅的方法11.2节会叙述),我们知道一般的LED只需通过5mA的电流即可发光,一般不应超过20mA。当发光二极管发光时,其两端的电压约为1.7V,Arduino端口提供的是5V的电压,则串联电阻两端的压降为5V-1.3V=3.3V,串联一个330Ω的电阻后,3.3V/330Ω=0.01A=10mA。看来330Ω的电阻能够符合要求。

根据上面的电路原理图和面包板接线图,我们连好流水灯所需的电路,开始往Arduino中装载程序,其源代码如下所示。

int Led1 = 4; 
int Led2 = 5; 
int Led3 = 6; 
int Led4 = 7; 
int Led5 = 8; 
int Led6 = 9;
int Led7 = 10;
int Led8 = 11;
 
//led灯花样显示样式1子程序 
void style_1(void) 
{ 
  unsigned char j; 
  for(j=4;j<=11;j++)//每隔200ms依次点亮4~11引脚相连的led灯    {      digitalWrite(j,HIGH);//点亮j引脚相连的led灯      delay(200);//延时200ms    }    for(j=11;j>=4;j--)//每隔200ms依次熄灭11~4引脚相连的led灯 
  { 
    digitalWrite(j,LOW);//熄灭j引脚相连的led灯 
    delay(200);//延时200ms 
  } 
} 
//灯闪烁子程序 
void flash(void) 
{ 
  unsigned char j,k; 
  for(k=0;k<=1;k++)//闪烁两次 
    {
    for(j=4;j<=11;j++)//点亮4~11引脚相连的led灯 
    digitalWrite(j,HIGH);//点亮不j引脚相连的led灯 
    delay(200);//延时200ms 
    for(j=4;j<=11;j++)//熄灭4~11引脚相连的led灯      digitalWrite(j,LOW);//熄灭不j引脚相连的led灯      delay(200);//延时200ms    }  }  //led灯花样显示样式2子程序  void style_2(void)  {    unsigned char j,k;    k=1;//设置k的数值为1    for(j=7;j>=4;j--) 
  { 
    digitalWrite(j,HIGH);//点亮灯 
    digitalWrite(j+k,HIGH);//点亮灯 
    delay(400);//延时400ms 
    k +=2;//k值加2 
  } 
  k=7;//设置k值为5 
  for(j=4;j<=7;j++) 
  { 
    digitalWrite(j,LOW);//熄灭灯 
    digitalWrite(j+k,LOW);//熄灭灯 
    delay(400);//延时400ms 
    k -=2;//k值减2 
  } 
} 
//led灯花样显示样式3子程序 
void style_3(void) 
{ 
  unsigned char j,k;//led灯花样显示样式3子程序 
  k=7;//设置k值为5 
  for(j=4;j<=7;j++)    {      digitalWrite(j,HIGH);//点亮灯      digitalWrite(j+k,HIGH);//点亮灯      delay(400);//延时400ms      digitalWrite(j,LOW);//熄灭灯      digitalWrite(j+k,LOW);//熄灭灯      k -=2;//k值减2   }    k=3;//设置k值为3    for(j=6;j>=4;j--) 
  {
    digitalWrite(j,HIGH);//点亮灯 
    digitalWrite(j+k,HIGH);//点亮灯 
    delay(400);//延时400ms 
    digitalWrite(j,LOW);//熄灭灯 
    digitalWrite(j+k,LOW);//熄灭灯 
    k +=2;//k值加2 
  } 
} 
void setup() 
{ 
  unsigned char i; 
  for(i=4;i<=11;i++)//依次设置4~11个数字引脚模式 
  pinMode(i,OUTPUT);//设置第i个引脚为输出模式 
} 
void loop() 
{ 
  style_1();//样式1 
  flash();//闪烁 
  style_2();//样式2 
  flash();//闪烁 
  style_3();//样式3 
  flash();//闪烁 
}

 

打赏

Arduino操纵发光二极管(LED)》有1个想法

发表评论