Arduino周边模块:LED部件

Arduino周边模块:LED部件

1. LED的使用

LED的原理:

LED是会发光的二极管,它具有单向导电性。两端加上正向电压,即能将电能转化为光能。

正向电压就是正极加高电压,负极加低电压

对于LED的正负极判断:

  1. 一般长引脚的是正极,短引脚的是负极。
  2. 观察LED的头部,里面有一宽一窄两个金属块,一般窄的金属块连接的引脚是正极,宽的金属块连接的引脚是负极。

数字电平:

电压的另一种解读方式

高电平对应数字逻辑的1,低电平对应数字逻辑的0

Arduino的数字端口

(在数字端口不够用的情况下,模拟端口也能够充当数字端口使用)

Arduino的数字端口有两种模式:输入、输出

电路连接

我们将LED的负极连接到Arduino的八号端口,然后通过一个限流电阻,将LED的负极连接到Arduino的GND端口

面包板

面包板能够提供一个宽松的实验环境。元件直接插拔,无需焊接。很适合电子电路的组装、调试和训练。

面包板分为三个区域,上下两个区域是横向贯通的,中间的区域是纵向贯通的

Arduino控制程序的一般结构

1.void setup(){2.    //在此做一些准备工作3.}4.5.void loop(){6.    //在此实现应用程序的功能7.}

进入Arduino IDE,正式编写代码

1.void setup(){2.    pinMode(8,OUTPUT);3.}4.5.void loop(){6.    digitalWrite(8,HIGH);7.    delay(1000);8.    digitalWrite(8,LOW);9.    delay(1000);10.}

LED以每秒一次的频率闪烁着,delay()函数的单位是毫秒。

优化:

1.int led=8;2.void setup(){3.    pinMode(led,OUTPUT);4.}5.6.void loop(){7.    digitalWrite(led,HIGH);8.    delay(1000);9.    digitalWrite(led,LOW);10.    delay(1000);11.}

Arduino数字IO相关库函数

函数原型 函数说明
pinMode(pin,mode) 配置特定引脚的工作模式
digitalWrite(pin,value) 向特定引脚输出数字电平
delay(ms) 产生一段固定时长的延时

2. LED点阵的使用

我们在街上看到的LED广告屏就是使用多个LED点阵拼接起来的

LED点阵原理图

LED点阵显示图形

关键字:

  • 行扫描
  • 视觉暂留

而计算机显示字符的原理,其实就是计算机中存储的字形码,字形码的作用就是记录字符的点阵数据

那么如何在Arduino程序中存储字库?

使用数组

数组是同一类型数据的集合

硬件连接

程序的框架图

1.//2-dimensional array of row pin numbers:2.const int row[8]={3.17,16,2,3,4,5,6,7};4.5.//2-dimensional array of column pin numbers:6.const int col[8]={7.8,9,10,11,12,13,19,18};8.9.//2-dimensional array of pixels:10.const byte character_bank[2][8]={11.    {B00111100,12.     B01000010,13.     B01000010,14.     B01000010,15.     B01000010,16.     B01000010,17.     B01000010,18.     B00111100},19.20.    {B00010000,21.     B00110000,22.     B00010000,23.     B00010000,24.     B00010000,25.     B00010000,26.     B00010000,27.     B00111000}28.};29.30.int pixels[8][8];31.32.void setup(){33.    //initialize the I/O pins as output34.    for (int thisPin=0;thisPin<8;thisPin++){35.        //initialize the output pins:36.        pinMode(col[thisPin],OUTPUT);37.        pinMode(row[thisPin],OUTPUT);38.        //take the col pins(i.e. the cathodes) high to ensure that39.        //the LEDS are off:40.        digitalWrite(col[thisPin],HIGH);41.        }42.    //initialize the pixel matrix:43.    for (int x=0;x<8;x++){44.        for (int y=0;y<8;y++){45.        pixels[x][y]=HIGH;46.        }47.    }48.}49.50.void loop(){51.    //draw the screen:52.    displayNum(1);53.    refreshScreen();54.}55.56.void displayNum(int num)57.{58.    for (int rowindex=0;rowindex<8;rowindex++)59.    {60.        for (int colindex=0;colindex<8;colindex++){61.        pixels[rowindex][colindex]=((character_bank[num][rowindex]>>(7-colindex))&0x01)==07HIGH:LOW;62.        }63.    }64.}65.66.void refreshScreen(){67.    //iterate over the rows (anodes):68.    for (int thisRow=0;this Row<8;thisRow++){69.        //take the row pin (anode) high:70.        digitalWrite(row[thisRow],HIGH);71.        //iterate over the cols (cathodes):72.        for (int thisCol=0;thisCol<8;thisCol++){73.            //get the state of the current pixel;74.            int thisPixel=pixels[thisRow][thisCol];75.            //when the row is HIGH and the col is LOW,76.            //the LED where they meet turns on:77.            digitalWrite(col[thisCol],thisPixel);78.            //turn the pixel off:79.            if (thisPixel==LOW){80.                digitalWrite(col[thisCol],HIGH);81.            }82.        }83.        //take the row pin low to turn off the whole row:84.        digitalWrite(row[thisRow],LOW);85.    }86.}

3. 三色LED的使用

加到各个引脚上的电压大小决定了相应分量的亮度,进而决定了混合而成的光的颜色

那么用什么来输出模拟电压呢?

PWM :PWM是用占空比(duty cycle)不同的方波,来模拟“模拟输出”的一种方式

Arduino中端口标号前有’~’的均可以输出PWM波

Arduino控制程序中PWM波的输出

analogWrite(pin,value)

第一个参数pin代表引脚标号

第二个参数value代表占空比的值。取值范围:0~255

总共有三个LED,因此我们可以有255*255*255=16581375个颜色

硬件连接

程序

1.//端口配置2.int redPin=3;3.int greenPin=5;4.int bluePin=6;5.6.void setup()7.{8.    pinMode(redPin,OUTPUT);9.    pinMode(greenPin,OUTPUT);10.    pinMode(bluePin,OUTPUT);11.}12.13.void loop()14.{15.    int red,green,blue;16.    blue=0;17.    for(blue=0,red=255;blue<256;blue++)18.    {19.        setColor(red,green,blue);20.        delay(4);21.        red--;22.    }23.    delay(100);    //绿色向红色渐变24.25.    green=0;26.    for(red=0,green=255;red<256;red++)27.    {28.        setColor(red,green,blue);29.        delay(4);30.        green--;31.    }32.    delay(100);    //红色向篮色渐变33.34.    red=0;35.    for(green=0,blue=255;green<256;green++)36.    {37.        setColor(red,green,blue);38.        delay(4);39.        blue--;40.    }41.    delay(100);    //篮色向绿色渐变42.}43.44.void setColor(int red,int green,int blue)45.{46.    analogWrite(redPin,red);47.    analogWrite(greenPin,green);48.    analogWrite(bluePin,blue);49.}
时间: 2024-10-22 03:01:49

Arduino周边模块:LED部件的相关文章

Arduino周边模块:传感器部件(温敏、光敏、湿敏)

Arduino周边模块:传感器部件(温敏.光敏.湿敏) Arduino的模数转换 对于Arduino来说,它只认识数字量,模拟量对其来说就是一门"外语". 模拟量:时间与数值上均是连续的物理量. 数字量:时间与数值上均是离散的物理量. 而模数转换电路能够将模拟量转化为数字量. 模数转换原理: 时间上的离散--采样 每隔一定的时间,就对模拟量的大小进行采集.采样的频率越高,模数转换的效果也就越好.一般采样的频率要大于信号频率的两倍. 数值上的离散--量化与编码 例如:3位精度的模数转换器

Arduino周边模块:LCD与数码管

Arduino周边模块:LCD与数码管 数码管的介绍 数码管一般是用来显示数字和字符的 数码管原理 一位数码管 该图是一个8段数码管,该数码管中包含了8个LED发光二极管,因此称为8段数码管.该数码管共有10个引脚,有2个引脚是公共的负极或者正极,另外8个引脚分别按顺时针控制LED的亮片. 数码管的连接图,下面是两种连接方式 一种是将所有的正极连接到一起,另外的一种是将所有的负极连接到一起 我们可以在连接的时候进行测试,3脚接GND,4脚接高电平,如果有LED被点亮则为共阴,不亮则为共阳 四位数

Arduino 数码管LED驱动 数组法

Disk Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2368    Accepted Submission(s): 333 Problem Description 有很多从磁盘读取数据的需求,包括顺序读取.随机读取.为了提高效率,需要人为安排磁盘读取.然而,在现实中,这种做法很复杂.我们考虑一个相对简单的场景.磁

Arduino 翻译系列 - LED 灯闪烁

原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LED 灯闪烁. 硬件需求 Arduino 开发板 LED (非必要) 220欧电阻(非必要) 电路 这例程使用了大部分 Arduino / Genuino 开发板上都有的 LED 指示灯.这 LED 灯是连接到数字引脚的,而它在不同型号的开发板上的引脚号都不一样.为了方便大家,我们已经每种开发板的描述

Arduino 数码管LED驱动 读位法 16进制

区别与上两个驱动的方法,用bitRead()读取位数,代码简介一点. //设置阴极接口 int d1 = 1; int d2 = 2; int d3 = 3; int d4 = 4; int d5 = 5; int d6 = 6; int d7 = 7; //设置阳极接口 int a = 8; int b = 9; int c = 10; int d = 11; int e = 12; int f = 13; int g = A0; int h = A1; const unsigned char

Arduino蓝牙模块实现通信

蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机可通过该脚状态判断蓝牙是否已经连接 2.led指示蓝牙连接状态,闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口 3.输入电压3.6~6V,未配对时电流约30mA,配对后约10mA,输入电压禁止超过7V! 4.可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机也可直接连接 5.在未建立蓝牙连接时支持通过AT指令设置波特率.名称.配对密码,

arduino红外控制led(发射与接收)

网上有关红外接收的帖子不少,但是关于使用arduino自制红外发射器的帖子却很少,经过网上搜索和自己摸索,给大家发个有arduino自制红外发射器控制led亮灭的例子.关于本例我使用了两块arduino板,一块用于发射,一块用于接收. 一.红外发射(开发板一) 1 /* 2 * 发射红外线讯号 3 * 注意! 红外线发射器(IR LED)必须接到 pin 3, 不能接其它脚位,头文件已经定义,所以下面不用设置pin3口的状态 4 */ 5 #include <IRremote.h> // 引用

使用Arduino UART-WiFi模块做web服务器

一.硬件准备 1.选择硬件,主要有2种: 一种是官方推荐的Arduino WiFi Shield(比较贵,大概要300~400块 淘宝网 :但是资料齐全): 一种是UART-WiFi模块,不仅支持Arduino,而且支持所有串口的单片机都可以和其模块通信(大概100块左右,淘宝网,资料较少). 最后选择了UART-WIFI模块,也走了条坎坷的路,也许到了不少东东. 2.   UART-WIFI模块介绍 图片 接口   双排(2 x 4)插针式接口   支持波特率范围:1200~115200bps

Arduino 数码管LED屏驱动

今天測试数码管LED屏驱动,用某产品的一个共阴极的LED屏,依据电路图做数码管LED屏的检測. 代码写得有些冗长.有好几种驱动的方法,这里仅仅是当中一种最直接的方案.抽出时间要做个更有效率的调用和驱动的方案. //设置阴极接口 int d1 = 1; int d2 = 2; int d3 = 3; int d4 = 4; int d5 = 5; int d6 = 6; int d7 = 7; //设置阳极接口 int a = 8; int b = 9; int c = 10; int d = 1