美文网首页
C#上位机通过Arduino控制RGB三色灯

C#上位机通过Arduino控制RGB三色灯

作者: OliverChu | 来源:发表于2019-12-18 20:10 被阅读0次

    Arduino是一个很好的嵌入式开发平台,它有着很好的易用性。对于我们这种电子业余爱好者,有着很强的吸引力。这两天做了一个小Demo分享给大家。

    通过控制R,G,B分量来设置RGB色灯的颜色,电位器为调整光的强度。

    演示效果视频地址

    上位机程序C# WinForm


    RGB-Light
    //输出颜色分量到LED
    void setColor(int red, int green, int blue) { 
      analogWrite(redPin, 255 - red);
      analogWrite(greenPin, 255 - green);
      analogWrite(bluePin, 255 - blue);
      analogWrite(beeOutPin, (red + green + blue) / 3);  //蜂鸣器的发声由三个颜色分量的平均值决定
    }
     
    //随机显示颜色函数
    void randColor(int num) {
      while (num--) {
        setColor(random(0, 255), random(0, 255), random(0, 255));  
        delay(500);
        setColor(0, 0, 0);
        delay(200);
      }
    }
     
    void lightFlicker()
    {
      int r = 0, g = 0, b = 0;
      while (1) {
        for (; r <= 255; r++) {
          setColor(r, g, b);
          delay(4);
        }
        for (; g <= 255; g++) {
          setColor(r, g, b);
          delay(4);
        }
        for (; b <= 255; b++) {
          setColor(r, g, b);
          delay(4);
        }
        for (; r >= 0; r--) {
          setColor(r, g, b);
          delay(4);
        }
        for (; g >= 0; g--) {
          setColor(r, g, b);
          delay(4);
        }
        for (; b >= 0; b--) {
          setColor(r, g, b);
          delay(4);
        }
        delay(496);
        setColor(0, 0, 0);
        delay(300);
        setColor(0xff, 0, 0);
        delay(500);
        setColor(0, 0, 0);
        delay(300);
        setColor(0, 0xff, 0);
        delay(500);
        setColor(0, 0, 0);
        delay(300);
        setColor(0, 0, 0xff);
        delay(500);
        setColor(0, 0, 0);
        delay(300);
        randColor(10);
      }
    }
    

    Arduino程序


    硬件图
    // Arduino Nano V3.0 Board 
    int redPin = 3;//红色分量 PWM
    int greenPin = 5; //绿色分量 PWM 
    int bluePin = 6; //蓝色分量 PWM 
    int readPin = A3; //读电位器 
    int putToRgbPin = 10; //输出到RGB色灯的亮度 PWM
    int onOffPin = A1; //读压电陶瓷片
    int beeOutPin = 11; //蜂鸣器输出 PWM
    int value = 0; //亮度值
    byte serialData[5]; //从串口读取的数据
     
    void setup() {
      // 此处定义一系列的引脚
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
      pinMode(bluePin, OUTPUT);
      pinMode(readPin, INPUT);
      pinMode(onOffPin, INPUT);
      pinMode( beeOutPin , OUTPUT);
      pinMode(putToRgbPin, OUTPUT);
     //开始串口通信
      Serial.begin(115200);
      Serial.println("Baud Rate: 115200");
     //初始RGB色灯不发光
      setColor(0x00, 0x00, 0x00);
     //定义了一个随机数种子
      randomSeed(1397);
    }
     
    void loop() {
      //读取电位器的模拟值并且转换成PWM输入值
      value = map(analogRead(readPin), 0, 1023, 0, 255);
      //输入到色灯中
      analogWrite(putToRgbPin, value);
      //读取压电陶瓷模拟值并且转换成蜂鸣器的输入值
      analogWrite(beeOutPin, map(analogRead(onOffPin), 0, 1023, 0, 255) * 20);
      //开始读取串口数据
      if (Serial.available() > 0) {
       //读取一个字节数组
        Serial.readBytes(serialData, 5)
        //判断首尾类型实现功能种类判断
        if (serialData[0] == 0x01 && serialData[4] == 0x02) 
        {
          setColor(serialData[1], serialData[2], serialData[3]); //上位机传入的颜色分量
        }
        if (serialData[0] == 0x01 && serialData[4] == 0x03)
        {
          lightFlicker(); //开始自定义闪烁 
        }
        Serial.flush();
      }
    }
    

    相关文章

      网友评论

          本文标题:C#上位机通过Arduino控制RGB三色灯

          本文链接:https://www.haomeiwen.com/subject/oktpnctx.html