【记录】QT Creator开发上位机控制Arduino UNO开发板上的RGB灯

  • Post author:
  • Post category:其他




前言

2022年的电赛结束后,留在学校有些许无聊,故自费买了一块Arduino UNO 开发板入门。

由于之前一直用的是STM32,有了开发基础,所以对于笔者而言Arduino的入门并不是很难。

跟着视频与例程学习了几天,学习了如何使用Arduino控制RGB灯。

但仅仅点个灯,未免有些单调,于是在某个安静的夜晚,想法就这么诞生了。



一、Arduino UNO开发板简介

Arduino UNO是基于ATmega328P的Arduino开发板。它有14个数字输入/输出引脚(其中6个可用于PWM输出)、6个模拟输入引脚,一个16 MHz的晶体振荡器,一个USB接口,一个DC接口,一个ICSP接口,一个复位按钮。

Arduino UNO开发板

在接触到Arduino之后,就感觉到它比STM32要友好许多,省去许多纷繁的配置,不需要了解眼花缭乱的寄存器,只需要像搭积木一样,用别人造好的轮子来构造自己的逻辑代码。

在淘宝购买一块Arduino UNO的板子,跟着客服的资料,基本几天就可入门。

对于Arduino的入门学习,个人推荐B站太极创客的教程:

Arduino入门教程



二、Arduino控制RGB灯



1.原理

Arduino开发板通过其自带的数字引脚,输出PWM信号来改变LED灯的亮度阶数,再使三盏灯的亮度叠加在一起,亮度阶数的不同组合即产生不同颜色的光。我们通过串口发送不同的RGB数值,Arduino接收到RGB三组数值后进行处理,最后执行指令。

教程指路:

基于Arduino UNO开发板的RGB灯光控制方法



2.程序源码

 
/*
 * Serial-RGB-LED
 * 通过串口输入信息调整LED的颜色
 * 指令示例: r128g100b20
 * 以上指令将LED的RGB数值调整为(128,100,20)
 *         
 */
#define rLedPin  5  //引脚R
#define gLedPin  6  //引脚G
#define bLedPin  3  //引脚B

int ledR  = 0; //R Led 亮度
int ledG  = 0; //G Led 亮度
int ledB  = 0; //B Led 亮度
 
void setup() {
  pinMode(rLedPin, OUTPUT);
  pinMode(gLedPin, OUTPUT);
  pinMode(bLedPin, OUTPUT);
  Serial.begin(115200);
}
 
void loop() {
  
  if (Serial.available()>0) { 
    char serialCmdChar = Serial.read();  
    serialCmd(serialCmdChar);       
  }
  delay(20);      
}
 
void serialCmd(char serialCmdChar) {  
  switch (serialCmdChar){
    case 'r':
      ledR = Serial.parseInt();
      break;
 
    case 'g':
      ledG = Serial.parseInt();
      break;
 
    case 'b':
      ledB = Serial.parseInt();
      break;    
 
 
  analogWrite(rLedPin, ledR);
  //delay(10);
  analogWrite(gLedPin, ledG);
  //delay(10);
  analogWrite(bLedPin, ledB); 
  delay(20);   
}



三、QT Creator编写上位机



1.开发准备

既然Arduino是通过串口来实现RGB灯功能的,那么我们开发的上位机本质上是一个串口发送端。

程序流程图:

上位机流程图

这里我们使用QT Creator来开发,好处多多:

一是入门简单,仅需要一定的C++基础,开发周期短;

二是功能强大,包含丰富的开发库,并且支持跨平台。

详细可看我之前的文章:


【上位机】通过QTCreator编写WIFI上位机与网络调试助手通信绘制曲线



【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信



2.数据处理源码

/*发送RGB值*/
void ArduinoRGB::on_Set_Button_clicked()
{
    QString sendstr = 'r'+ui->R_Editor->toPlainText() +
                       'g'+ui->G_Editor->toPlainText()+
                        'b'+ui->G_Editor->toPlainText(); //拼接三个文本框数据
    QByteArray sendarr = sendstr.toLocal8Bit(); //转换数据类型
    serialport->write(sendarr);
}

/*清空输入框*/
void ArduinoRGB::on_Clear_Button_clicked()
{
    ui->R_Editor->clear();
    ui->G_Editor->clear();
    ui->B_Editor->clear();
}



3.开发成果

这是一个功能较为简单的上位机,只需在RGB输入框中输入合适的数值,便可控制连接在Arduino上的RGB灯产生不同颜色的光。

RGB上位机



4.实物效果

实物效果



四、总结

这是本人在放假期间无聊时所做的一个小项目,后续还打算学习开发安卓应用实现手机端控制以及基于ESP8266的WIFI物联网控制,还有十来天就开学了,也不知道进度能到哪,好好努力吧!



版权声明:本文为m0_51156447原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。