国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于stm32作品設(shè)計:懶人藍牙彩燈、手機APP無線控制ws2812,MCU無線升級程序

CarlBenjamin / 4586人閱讀

摘要:文章目錄一作品背景二功能要求三實現(xiàn)基礎(chǔ)功能一首先是要選材二原理圖設(shè)計二第一版本設(shè)計三焊接板四編寫單片機程序五下載程序驗證四外殼設(shè)計一圖紙設(shè)計二磨砂亞克力板五重新設(shè)計六安卓設(shè)計一界面設(shè)計二程序設(shè)計三功能設(shè)計作品嗶哩嗶哩視

作品嗶哩嗶哩視頻:【待上映】
資料鏈接:【待更新】

一、作品背景

在智能的2021年代,年輕的小伙伴都患上了懶惰的癥狀,我也一樣。
有一個難以入眠的夜晚,我打開了王者榮耀,我習(xí)慣了玩手機都要開著燈打,這樣可以減少對眼睛的損傷,終于,贏了好幾把,時間已經(jīng)到了凌晨2點半,我也開始有了睡意,當(dāng)我放下手機,準(zhǔn)備閉眼入睡時,發(fā)現(xiàn)燈光格外耀眼,心煩意亂,實在不想按下那下床走好幾步才能觸碰到的開關(guān),但是房間的設(shè)計就是這樣,無法改變。無奈的我還是掙扎地下床按下了開關(guān),這才安心入睡。
作為學(xué)電子專業(yè)的我并不妥協(xié),我一定要設(shè)計一個不下床就可以關(guān)掉的燈。

二、功能要求

有了想法,就要大膽給自己一個功能要求,為了不下床關(guān)燈,沖!!!
藍牙彩燈的功能初步打算:
1、可以用手機控制燈的亮滅
2、可以用手機控制燈的亮度
3、可以用手機控制燈的任意顏色

三、實現(xiàn)基礎(chǔ)功能

有了功能要求,那能不能實現(xiàn)就要靠自己的技術(shù)了。

(一)、首先是要選材

1、LED選擇:WS2812
既然是想做任意顏色的燈,那么毫無疑問選擇最普遍的WS2812,24位全彩RGB彩燈,可以發(fā)出2^24=16777215種顏色。

2、單片機選擇:STM32G0
在當(dāng)今MCU那么稀貴的情況下,當(dāng)然是要為自己的腰包考慮,WS2812的驅(qū)動時鐘大概需要800KHZ,速度要求很高,首先選擇stm32,看了一下價格,選擇了和藹可親的stm32g030c8t6,6元還包郵

3、通信模塊選擇:藍牙模塊JDY-31
要手機控制燈,首先想到用藍牙模塊,價格考慮,選擇全網(wǎng)最便宜的藍牙模塊JDY-31,比起HC-05,它更加小巧,就是連接速度不是很快

有了這3個主要材料,我們就可以開始設(shè)計一下原理圖

(二)、原理圖設(shè)計

1、單片機需要3.3V供電,首先設(shè)計一個電源部分,先用usb進行供電5V給ws2812,再用降壓芯片降壓到3.3V供給MCU,

2、設(shè)計一個單片機最小系統(tǒng),以及預(yù)留一個下載接口,方便使用ST-LINK進行下載程序

3、然后要連接一個藍牙和一個按鍵作為控制,再預(yù)留一個LED作為指示燈

4、RGB燈的電路設(shè)計,這里兩組LED,用兩個IO口控制,防止LED過多導(dǎo)致信號失真

這樣一張原理圖就設(shè)計好啦

(二)、第一版本PCB設(shè)計

1、根據(jù)原理圖給定相應(yīng)的封裝導(dǎo)入PCB,再進行布局與布線,設(shè)計好一塊給淘寶客服能夠打印出來的PCB圖紙
2D:

3D:

然后交給淘寶,這里推薦嘉立創(chuàng),便宜,質(zhì)量也高。
這是打印出來的第一板PCB:

(三)、焊接PCB板

1、打印出PCB之后,當(dāng)然是要把元器件焊接到PCB板上,第一塊板焊接的時候先不用一次性全部焊接上去,先焊接電源部分,看看電源芯片是否能夠正常工作,比如我畫的這塊板子USB母座封裝與原理圖不對應(yīng),導(dǎo)致正負(fù)極直接反向,就很容易導(dǎo)致元器件損壞,檢測完電壓正常之后,再焊接其他元器件

(四)編寫單片機程序

單片機程序包含了很多知識
1、輕量級多任務(wù)系統(tǒng)
2、藍牙數(shù)據(jù)自定義控制協(xié)議、藍牙無線升級單片機
3、多種控制方式按鍵+藍牙
4、多功能按鍵,單擊、雙擊、長按
5、ws2812串聯(lián)控制
6、呼吸燈算法
7、顏色漸變算法

/***************************************** 函數(shù)名稱: DIS_TASK()* 輸入?yún)?shù): 無* 輸出參數(shù): 無* 功    能: 顯示任務(wù)******************************************/void DIS_TASK(void){	static u8 r=0,g=0,b=0,a=0,dir=0;	static int i,cnt=0;	static int color_rgb;    SCHTaskBegin(); //開始固定格式一定要的    while (1)    {		if(SysState.Dis_flag == 1)//可以更新顯示		{					/***********************靜態(tài)*******************************/					if(SysState.Dismode == DisMode_Static)//靜態(tài)					{						SysState.Dis_flag = 0;						RGB_Refresh(SysState.StaticRgb,LED_NUM);//顯示						RGB2_Refresh(SysState.StaticRgb,LED_NUM);//顯示					}										/***********************呼吸*******************************/					else if(SysState.Dismode == DisMode_Breathe)//呼吸					{						SysState.Dedlay_Time=20;						if(dir==0)						{							a += (1+a*10/0xff);							if(a > 0xf0)dir = 1;						}else if(dir)						{							a -= (1+a*10/0xff);							if(a <= 4)dir = 0;						}												r = ((SysState.StaticRgb>>16)%0x100)*a/0xff;						g = ((SysState.StaticRgb>>8)%0x100)*a/0xff;						b = ((SysState.StaticRgb>>0)%0x100)*a/0xff;						color_rgb = (r<<16) + (g<<8) + b;						printf("%d %d %d %d/r/n",r,g,b,a);						RGB_Refresh(color_rgb,LED_NUM);//顯示						RGB2_Refresh(color_rgb,LED_NUM);//顯示						SCHCurTaskDly(SysState.Dedlay_Time);					}										/***********************閃爍*******************************/					else if(SysState.Dismode ==DisMode_Twinkle)//閃爍					{						SysState.Dedlay_Time=200;//*SysState.Dedlay_Ratio/0x0f;;						RGB_Refresh(SysState.StaticRgb,LED_NUM);						RGB2_Refresh(SysState.StaticRgb,LED_NUM);						SCHCurTaskDly(SysState.Dedlay_Time);						RGB_Refresh(0,LED_NUM);						RGB2_Refresh(0,LED_NUM);						SCHCurTaskDly(SysState.Dedlay_Time);					}										/***********************漸變*******************************/					else if(SysState.Dismode ==DisMode_GraChange)//漸變					{						extern u8 GraChange_flag;						SysState.Dedlay_Time=100;//*SysState.Dedlay_Ratio/0x0f;						RgbAlg(&SysState.StaticRgb,&GraChange_flag);//漸變算法						RGB_Refresh(SysState.StaticRgb,LED_NUM);//顯示						RGB2_Refresh(SysState.StaticRgb,LED_NUM);//顯示						SCHCurTaskDly(SysState.Dedlay_Time);					}										/***********************蹦迪*******************************/					else if(SysState.Dismode == DisMode_DiscoDance)//蹦迪					{						SysState.Dedlay_Time=20;//*SysState.Dedlay_Ratio/0x0f;						RGB_Refresh(Static_DisColor[cnt],LED_NUM);						RGB2_Refresh(Static_DisColor[cnt],LED_NUM);						SCHCurTaskDly(SysState.Dedlay_Time);						RGB_Refresh(0,LED_NUM);						RGB2_Refresh(0,LED_NUM);						SCHCurTaskDly(SysState.Dedlay_Time*50);					}										/***********************流水*******************************/					else if(SysState.Dismode == DisMode_RunWater)//流水					{						static int i=0,flag=0;						SysState.Dedlay_Time=100;						i++;						if(i == LED_NUM)						{							i=0;flag=!flag;						}						if(flag){		//設(shè)置顏色									RGB_Refresh(SysState.StaticRgb,i+1);							RGB2_Refresh(SysState.StaticRgb,i+1);							SysState.Dedlay_Time=50;//*SysState.Dedlay_Ratio/0x0f;							SCHCurTaskDly(SysState.Dedlay_Time);						}						else{		//滅							RGB_Refresh(0,i+1);							RGB2_Refresh(0,i+1);							SysState.Dedlay_Time=50;//*SysState.Dedlay_Ratio/0x0f;							SCHCurTaskDly(SysState.Dedlay_Time);						}											}										/***********************用戶*******************************/					else if(SysState.Dismode ==DisMode_User1)  //用戶					{						SysState.Dedlay_Time=1000;						RGB_Refresh(SysState.StaticRgb,1);						RGB2_Refresh(0,1);						SCHCurTaskDly(SysState.Dedlay_Time);						RGB2_Refresh(SysState.StaticRgb,1);						RGB_Refresh(0,1);						SCHCurTaskDly(SysState.Dedlay_Time);					}		}		SCHCurTaskDly(10);    }    SCHTaskEnd();  //結(jié)束固定格式一定要的}

(五)下載程序驗證

下載程序后測試ws2812是否正常工作

四、外殼設(shè)計

(一)CAD圖紙設(shè)計

感覺沒有一個外殼會很難看,添加一個外殼,讓世界變得美麗

(二)磨砂亞克力板

淘寶搜磨砂亞克力板定制,發(fā)送CAD圖紙給師傅,就可以給你做了
這是做好的亞克力板,是按照PCB板尺寸量身定做的

五、重新設(shè)計PCB

重新布局設(shè)計出來第3版本成品板:PCBV1.3

這是打樣后焊接好的樣子:

六、QT安卓APP設(shè)計

(一)界面設(shè)計

(二)QT程序設(shè)計

展示部分代碼:

MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    this->Start_Init();    this->File_Init();    this->BuleTooth_Init();    this->Label_Init();    this->PushButton_Init();    this->ColorSlider_Init();    this->setFocus();}MainWindow::~MainWindow(){    bin_save(FileInfo);    delete ui;}//起始代碼void MainWindow::Start_Init(){    //設(shè)置背景圖片    this->setStyleSheet("QMainWindow{border-image: url(:/pic/btmenuv2.jpg);}");    //獲取屏幕大小    QScreen *screen = QApplication::screens().at(0);    src_w = screen->size().width();    src_h = screen->size().height();    if(src_w <= 0  || src_h <= 0)    {        src_h = 2267;src_w = 1080;        this->setGeometry(0,0,src_w,src_h);//1080   2267        qDebug() << "src get err ======== "<< src_w <<src_h << endl;    }    else    {        this->setGeometry(0,0,src_w,src_h);//1080   2267        qDebug() << "src get ok ======== "  << src_w <<src_h << endl;    }}//藍牙初始化void MainWindow::BuleTooth_Init(void){    //藍牙連接初始化代碼    timer_conflag = new QTimer;    ptimer = new QTimer;    //QBluetoothDeviceDiscoveryAgent 這個是指掃描周圍藍牙設(shè)備!    discoveryAgent = new QBluetoothDeviceDiscoveryAgent();    //QBluetoothLocalDevice 是指配置獲取設(shè)備的藍牙狀態(tài)信息等!    localDevice = new QBluetoothLocalDevice();    //QBluetoothSocket指進行鏈接藍牙設(shè)備,讀寫信息!    socket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);    //多窗口初始化    btcwindow = new BTMainWindow(this);    btcwindow->hide();    aboutwindow = new AboutMainWindow(this);    aboutwindow->hide();    connect(socket,           SIGNAL(readyRead()),           this,           SLOT(readBluetoothDataEvent())           );    connect(socket,           SIGNAL(connected()),           this,           SLOT(bluetoothConnectedEvent())           );    connect(socket,           SIGNAL(disconnected()),           this,           SLOT(bluetoothDisconnectedEvent())           );    localDevice->powerOn();//打開藍牙    discoveryAgent->start();//開始掃描}//顏色條初始化void MainWindow::ColorSlider_Init(void){    QColor color;    color.setRgb(0x00,0x00,0x00);    colorslider_R = new ColorSlider(this);    colorslider_G = new ColorSlider(this);    colorslider_B = new ColorSlider(this);    colorslider_A = new ColorSlider(this);    colorslider_R->init(ColorSlider::RGB,ColorSlider::RED,color,0x00,0xFF);qDebug() << color << endl;    colorslider_G->init(ColorSlider::RGB,ColorSlider::GREEN,color,0x00,0xff);qDebug() << color << endl;    colorslider_B->init(ColorSlider::RGB,ColorSlider::BLUE,color,0x00,0xff);qDebug() << color << endl;    colorslider_A->init(ColorSlider::RGB,ColorSlider::ALPHA,color,0x00,0xff);qDebug() << color << endl;    colorslider_R->setGeometry(100,200,880,60);    colorslider_G->setGeometry(100,400,880,60);    colorslider_B->setGeometry(100,600,880,60);    colorslider_A->setGeometry(100,800,880,60);}//按鈕初始化void MainWindow::PushButton_Init(void){    //刷新定時器    static QColor last_Color;    time1= new QTimer(this);    time1->start(1000);    connect(time1,&QTimer::timeout,[=](){       time1->start(100);       if(Connect_Flag == 1)//連接指示       {           Connect_Flag = 0;           btcwindow->hide();           this->show();           QMessageBox::information(this,tr("提示"),tr("藍牙連接成功!"));           QByteArray arrayData;    //發(fā)送空指令           QString s = QString("NONE/r/n");           qDebug() << s << endl;           arrayData = s.toUtf8();           socket->write(arrayData);           s.clear();           arrayData.clear();       }       if(last_Color != Color_sum)//發(fā)送指令       {           update();//更新           unsigned int color_d =   ((Color_sum.alpha()/16)<<24)+(Color_sum.red()<<16) + (Color_sum.green()<<8)                         + (Color_sum.blue()<<0) ;           QByteArray arrayData;           QString s = QString("COLOR:%1/r/n").arg(color_d);           qDebug() << s << endl;                    
               
                                           
                       
                 

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/121235.html

相關(guān)文章

  • 基于單片機的智能家居控制系統(tǒng)

    摘要:中控部分采用了單片機,其主要作用是獲取輸入部分?jǐn)?shù)據(jù),經(jīng)過內(nèi)部處理,控制輸出部分。 設(shè)計簡介: 本設(shè)計是基于單片機的智能家居控制系統(tǒng),主要實現(xiàn)以下功能: 可通過DS18B20實時測量環(huán)境溫度溫度具有上下限,自動模式下溫度超出限值,GMS發(fā)送短信溫度上下限通過手機藍牙設(shè)置系統(tǒng)可通過手機藍牙、紅外...

    zacklee 評論0 收藏0
  • HC-05/06藍牙模塊的原理及使用方法

    摘要:二模塊原理藍牙模塊的通信示意圖如下兩個設(shè)備主控芯片或單片機分別連接各自的藍牙模塊,即將主控芯片與藍牙模塊的串口控制引腳交叉連接。如圖注藍牙模塊自帶轉(zhuǎn)電路。注博主演示的藍牙模塊雖然不是,但是功能和一樣。 ...

    young.li 評論0 收藏0
  • STM32CubeMX學(xué)習(xí)教程之硬件I2C讀取光照度

    摘要:使用庫讀寫環(huán)境光照度傳感器本文將教大家如何快速使用庫讀取光照度數(shù)據(jù)。五實驗樣機測試展示通過之前配置好的面板,通過涂鴉智能進行配網(wǎng)實時采集光照度傳感器的數(shù)據(jù)。 使用STM32 HAL庫讀寫環(huán)境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數(shù)據(jù)。 實現(xiàn)功能:通...

    tinylcy 評論0 收藏0
  • ESP32-S2上使用SPI接口芯片DM9051NP轉(zhuǎn)以太網(wǎng)的無線物聯(lián)網(wǎng)網(wǎng)關(guān)開發(fā)指導(dǎo)

    摘要:前言芯片接口占用管腳數(shù)量比以太網(wǎng)的少,版線布局可更精簡。網(wǎng)卡芯片介紹接口網(wǎng)卡芯片是為方物聯(lián)網(wǎng)行業(yè)進以太網(wǎng)通信而開發(fā)出的解決方案。此應(yīng)用可用于監(jiān)控家庭物聯(lián)網(wǎng)網(wǎng)關(guān)搭建等。 前言 ????DM9051NP芯片?SPI接口占用管腳數(shù)量比以太網(wǎng)PHY的RMII/MII少,PCBA版線布局可更精簡。...

    wangjuntytl 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<