【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 
  实验一百七十七:Wemos D1 R32 ESP32开发板 
  项目十五: 运行RGB LED的完整255色谱(PWM驱动LED的ledcWrite功能)   
  实验接脚:R-23,G-19,B-18 
 
  实验开源代码 
 
- /*
 -   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 -   实验一百七十七:Wemos D1 R32 ESP32开发板
 -   项目十五: 运行RGB LED的完整255色谱(PWM驱动LED的ledcWrite功能)
 -   实验接线: R-23,G-19,B-18
 - */
 - 
 - 
 - // 设置 rgb LED 名称
 - uint8_t ledR = 23;
 - uint8_t ledG = 19;
 - uint8_t ledB = 18;
 - 
 - uint8_t ledArray[3] = {1, 2, 3}; // 三个 LED 通道
 - 
 - const boolean invert = false; // 如果共阳极设置为假,如果共阴极设置为真
 - 
 - uint8_t color = 0;          // 0 到 255 之间的值表示色调
 - uint32_t R, G, B;           // 红绿蓝颜色分量
 - uint8_t brightness = 255;  // 255 是最大亮度,但可以更改。 共阳极可能需要 256 才能完全关闭。
 - 
 - void setup() {
 -   Serial.begin(115200);
 -   delay(10);
 - 
 -   ledcAttachPin(ledR, 1); // 将 RGB LED 引脚分配给通道
 -   ledcAttachPin(ledG, 2);
 -   ledcAttachPin(ledB, 3);
 - 
 -   // 初始化通道
 -   // 通道 0-15,分辨率 1-16 位,频率限制取决于分辨率
 -   // ledcSetup (uint8_t channel, uint32_t freq, uint8_t resolution_bits);
 -   ledcSetup(1, 12000, 8); // 12 kHz PWM,8 位分辨率
 -   ledcSetup(2, 12000, 8);
 -   ledcSetup(3, 12000, 8);
 - }
 - 
 - void loop() {
 -   Serial.println("Send all LEDs a 255 and wait 2 seconds.");
 -   // 如果您的 RGB LED 在这里关闭而不是打开,您应该检查 LED 是共阳极还是共阴极。
 -   //如果它没有完全关闭并且是共阳极尝试使用256。
 -   ledcWrite(1, 255);
 -   ledcWrite(2, 255);
 -   ledcWrite(3, 255);
 -   delay(2000);
 -   Serial.println("Send all LEDs a 0 and wait 2 seconds.");
 -   ledcWrite(1, 0);
 -   ledcWrite(2, 0);
 -   ledcWrite(3, 0);
 -   delay(2000);
 - 
 -   Serial.println("Starting color fade loop.");
 - 
 -   for (color = 0; color < 255; color++) { // 在色谱中回转
 - 
 -     hueToRGB(color, brightness);  // 调用函数将色调转换为 RGB
 - 
 -     // 将 RGB 值写入引脚
 -     ledcWrite(1, R); // 将红色分量写入通道 1 等。
 -     ledcWrite(2, G);
 -     ledcWrite(3, B);
 - 
 -     delay(100); // RGB 超过 256 种颜色的完整循环需要 26 秒
 -   }
 - }
 - 
 - // 将颜色转换为其红色、绿色和蓝色分量的函数。
 - void hueToRGB(uint8_t hue, uint8_t brightness) {
 -   uint16_t scaledHue = (hue * 6);
 -   uint8_t segment = scaledHue / 256; // 第 0 至 5 段
 -   // color wheel
 -   uint16_t segmentOffset =
 -     scaledHue - (segment * 256); // 段内的位置
 - 
 -   uint8_t complement = 0;
 -   uint16_t prev = (brightness * ( 255 -  segmentOffset)) / 256;
 -   uint16_t next = (brightness *  segmentOffset) / 256;
 - 
 -   if (invert){
 -     brightness = 255 - brightness;
 -     complement = 255;
 -     prev = 255 - prev;
 -     next = 255 - next;
 -   }
 - 
 -   switch (segment ) {
 -     case 0:      // 红色的
 -       R = brightness;
 -       G = next;
 -       B = complement;
 -       break;
 -     case 1:     // 黄色的
 -       R = prev;
 -       G = brightness;
 -       B = complement;
 -       break;
 -     case 2:     // 绿色
 -       R = complement;
 -       G = brightness;
 -       B = next;
 -       break;
 -     case 3:    // 青色
 -       R = complement;
 -       G = prev;
 -       B = brightness;
 -       break;
 -     case 4:    // 蓝色的
 -       R = next;
 -       G = complement;
 -       B = brightness;
 -       break;
 -     case 5:      // 品红
 -     default:
 -       R = brightness;
 -       G = complement;
 -       B = prev;
 -       break;
 -   }
 - }
 
  复制代码
  
 
 |