• 作者:老汪软件技巧
  • 发表时间:2024-09-08 04:01
  • 浏览量:

七彩LED(共LED版)

这个模块有四个引脚

/*
 * led 接线
 * ---------------------
 * s3   |  led
 * -----|------------
 * GND  |  GND
 * 10   |  R
 * 11   |  G
 * 12   |  B
 */
 
// 七彩灯
int r_pin = 10;
int g_pin = 11;
int b_pin = 12;
int led_val = 0;    
void setup() {
  Serial.begin(115200);
  
  // 七彩 led 灯
  pinMode(r_pin, OUTPUT);
  pinMode(g_pin, OUTPUT);
  pinMode(b_pin, OUTPUT);
}
loop(){ 
   // 慢慢变红色
  for (led_val = 255; led_val > 0; led_val--)  // 循环,减少val值从255到0
  {
    analogWrite(r_pin, 255 - led_val);        // 改变红色LED的亮度(逐渐减小)
    analogWrite(g_pin, 0);  // 改变绿色LED的亮度(逐渐增加)
    analogWrite(b_pin,0); // 改变蓝色LED的亮度(逐渐增加)
    delay(3);                          // 延迟30毫秒
  }
  // 慢慢变绿色
  for (led_val = 255; led_val > 0; led_val--)
  {
    analogWrite(r_pin, 0);
    analogWrite(g_pin, 255 - led_val);
    analogWrite(b_pin,0);
    delay(3);
  }
  // 慢慢变蓝色
  for (led_val = 255; led_val > 0; led_val--)
  {
    analogWrite(r_pin, 0);
    analogWrite(g_pin, 0);
    analogWrite(b_pin, 255 - led_val);
    delay(3);
  }
}
 

ws2812

WS2812是一种由数字灯珠组成的智能控制LED光源,其中控制电路和RGB芯片集成在5050元件包中,元件包的内部包括智能数字端口数据锁存器和信号重塑放大驱动电路。

WS2812是采用单总线通讯,每个灯珠由24bit的数据控制灯珠的颜色,即每个灯接受24位的数据为每个灯的颜色像素(RGB,32位数据,高8位为红色,中8位为绿色,低8位为蓝色)。信号线通过IN输入,每经过一个灯珠之后,信号线上前24bit数据会被该灯珠锁存,剩下的数据信号通过OUT输出,由下一个灯珠接受数据,在锁存数据,最后再把数据完整的传输出去。

安装依赖

编码

/*
 * led 接线
 * ---------------------
 * s3   |  led
 * -----|------------
 * GND  |  GND
 * 10   |  DIN 
 */
 
#include 
// 灯的数量, 灯带的连接引脚, 使用RGB模式控制ws2812类型灯带,灯带的频率为800KH
Adafruit_NeoPixel pixels(1, 10, NEO_GRB + NEO_KHZ800);
void setup() {
  // ws2812
  pixels.begin();
}
void loop() {
   pixels.clear(); // 将所有像素颜色设置为“off” 
  // 慢慢变红色
  for (led_val = 0; led_val <= 255; led_val+=5)  // 循环,减少val值从255到0
  { 
    pixels.setPixelColor(0, pixels.Color(led_val, 0, 0));
    pixels.show();  
    delay(3);                    
  }
  // 慢慢变绿色
  for (led_val = 0; led_val <= 0; led_val+=5) { 
    pixels.setPixelColor(0, pixels.Color(0, led_val, 0));
    pixels.show();  
    delay(3);
  }
  // 慢慢变蓝色
  for (led_val = 0; led_val <= 255; led_val+=5) { 
    pixels.show();  
    delay(3);
  }
}