Arduino周边模块:LED部件
1. LED的使用
LED的原理:
LED是会发光的二极管,它具有单向导电性。两端加上正向电压,即能将电能转化为光能。
正向电压就是正极加高电压,负极加低电压
对于LED的正负极判断:
- 一般长引脚的是正极,短引脚的是负极。
- 观察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