tag 标签: 呼吸灯

相关帖子
相关博文
  • 热度 6
    2022-3-17 10:58
    3436 次阅读|
    2 个评论
    用ESP32在Arduino IDE环境下控制多路LED调光
    本项目将在Arduino IDE环境下,利用ESP32产生的PWM信号控制多个LED。项目所需物料如下: ESP32 DOIT DEVKIT V1板 3x 5mm LED 3x 330欧姆电阻器 面包板 跳线若干 ESP32带一个包含16通道LED PWM控制器,可配置以产生不同特性的PWM信号。项目开始之前需要先安装Arduino IDE,连接妥当后就可以把ESP32 DOIT DEVKIT V1板用作LED PWM控制器了。 使用Arduino IDE进行LED调光的步骤如下: 1. 从0 to 15选择PWM通道。 2. 设置PWM频率,LED频率选择5000Hz较好。 3. 选择信号的占空比:,其分表率范围1-16bits。本项目使用8bit,这样可控制的LED亮度等级值为0-255。 4. 指定信号出现的GPIO or GPIOs:其函数为ledcAttachPin(GPIO, channel)。该函数具有两个变量,第一个GPIO用来输出信号,第二个表示产生信号的通道。 5. 使用PWM控制LED亮度,函数为ledcWrite(channel, dutycycle)。其中,第一个变量产生PWM信号,第一个变量是占空比。 一个LED调光控制 点亮一个LED并调光时,应将LED连接于GPIO 16引脚。 ESP32 DEVKIT V1模块有30个GPIOs,只要能用作输出,就可用作PWM引脚以连接LED。 请打开并拷入如下代码: const int ledPin = 16; const int freq = 5000; const int ledChannel = 0; const int resolution = 8; void setup(){ ledcSetup(ledChannel, freq, resolution); ledcAttachPin(ledPin, ledChannel);} void loop(){ for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ ledcWrite(ledChannel, dutyCycle); delay(15); } = 0; dutyCycle--){ ledcWrite(ledChannel, dutyCycle); delay(15); }} 这些代码的含义是,设定的PWM信号频率为5000Hz,选择通道 0 来产生信号,信号的分辨率为8bits。 当然,也可以设置为其他参数,获得不同的PWM信号,例如: const int freq = 5000; const int ledChannel = 0; const int resolution = 8; 接下来,选择信号的GPIO引脚,函数为ledcAttachPin(ledPin, ledChannel); 增加LED亮度的占空比为0-255, for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ ledcWrite(ledChannel, dutyCycle); delay(15); } 然后,从255-0自减,就降低了LED的亮度。 = 0; dutyCycle--){ ledcWrite(ledChannel, dutyCycle); delay(15); } 调节LED亮度,须使用 ledcWrite() 函数。该函数有两个参数:产生信号的通道、duty cycle。注意,这里的 ledcWrite() 函数中产生信号的变量是通道,而不是GPIO。 把代码上传到 ESP32,确定板子和COM端口选择正确,再对照下单路,就可以测试调光效果了。 多个LED调光控制 也可以从相同通道的不同GPIO取得同样的信号,这需要将这些GPIOs连接到 setup() 的相同通道。以下我们对上述操作稍作改动,来通过相同通道的相同PWN信号对3个LED进行调光控制。 我们的目标是通过30 GPIOs的ESP32 DEVKIT V1模块来控制三个LED。 首先,将下列代码拷贝到Arduino IDE中。 // the number of the LED pin const int ledPin = 16; const int ledPin2 = 17; const int ledPin3 = 5; // setting PWM properties const int freq = 5000; const int ledChannel = 0; const int resolution = 8; void setup(){ // configure LED PWM functionalitites ledcSetup(ledChannel, freq, resolution); // attach the channel to the GPIO to be controlled ledcAttachPin(ledPin, ledChannel); ledcAttachPin(ledPin2, ledChannel); ledcAttachPin(ledPin3, ledChannel); } void loop(){ // increase the LED brightness for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){ // changing the LED brightness with PWM ledcWrite(ledChannel, dutyCycle); delay(15); } // decrease the LED brightness = 0; dutyCycle--){ // changing the LED brightness with PWM ledcWrite(ledChannel, dutyCycle); delay(15); } } 这些代码在前面基础上有一些改动:为两个新的LED增加了多个变量,具体参考 GPIO 17 和 GPIO 5。 const int ledPin2 = 17; // 17 corresponds to GPIO17 const int ledPin3 = 5; // 5 corresponds to GPIO5 然后,在 setup() 中,添加如下两行代码,将这两个 GPIOs 指派给通道0。这表示,在两个GPIO的通道0上产生了相同个信号。 ledcAttachPin(ledPin2, ledChannel); ledcAttachPin(ledPin3, ledChannel); 把修改后的代码上传到 ESP32,确定板子和COM端口选择正确后,就可以测试者三个LED调光效果了。 由于所有GPIOs 输出了相同PWM信号,所有三个LED亮度的增加与减少是同时进行的,这样就产生了一个非常美妙的同步效果。 本项目演示了如何在Arduino IDE环境下,使用ESP32的LED PWM控制器进行调光控制。通过设置正确的信号属性,这种方法可用来控制其他PWM输出,如马达、LED 呼吸灯等。
  • 热度 25
    2013-4-26 10:35
    4004 次阅读|
    2 个评论
    呼吸灯是手机上的一个小东西,一个灯由明变暗再由暗变明,象是一个人在呼吸一样。可以用硬件实现这个呼吸灯,但体积会比较大。这里用软件做了一个: #define BREATHLEVEL 6*256 void BreathLED(void){   static uint16_t cnt=0,illu=0,rep=0,stt=1;   rep++;   cnt++;   if(cnt illu) LED2OFF();   else LED2ON();   if(rep == BREATHLEVEL){     rep = 0;     cnt = 0;     if(stt){       illu++;       if(illu = BREATHLEVEL){         stt = 0;       }      }       else{              illu--;       if(illu 1){         stt = 1;       }         }     } }   把这个函数中的点灯灭灯的宏指向板子上的硬件LED。在定时中断里调用这个函数就能实现呼吸灯。
  • 热度 21
    2011-10-30 20:51
    2087 次阅读|
    0 个评论
     这是一个简单而有趣的开源项目,硬件制作极简单,又有一定的趣味性,既适合初学者入门学习使用,也适合于做教学项目。 打开:七彩灯视频(http://edures.lyvec.net/Item/73.aspx)可以看到3组视频。     先看第1段视频,猜一猜怎么做的?然后看第2段视频和第3段视频,里里外外看个够!只有1个8脚集成电路,3个按钮和1个LED灯。片中的USB纯粹用于供电。 所使用的芯片是STC15系列,这是与80C51在指令级兼容的高速单片机芯片,仅有8个引脚。 原理图如下:   本打算将程序全贴上,但系统不让发,说是超过4000字了?其实肯定没有4000字,,,,没办法,给个链接啦。 http://edures.lyvec.net/Item/74.aspx  
相关资源