日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mbed OS :DMX512 灯光控制协议

發布時間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mbed OS :DMX512 灯光控制协议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? MX512協議最先是由USITT(美國劇院技術協會)發展成為從控制臺用標準數字接口控制調光器的方式。這個接口基于RS485 硬件接口,傳輸速率為250Kbps。在舞臺燈光,景觀燈控制領域得到廣泛應用。

DMX512 的幀結構

DMX512幀以break 信號開始。大于22bit,或者88 us。跟隨其后的是512 個字節的通道,可以控制512 個通道,或者170個RGB 燈具。

?開始碼(start code)

? ?一般來講,簡單的設備開始碼位0x00,代表后面的數據是燈光數據。DMX512 也可以傳輸RDM(遠程設備管理協議) 這時起始碼為0xCC。

CodeMeaningNotes
0000 0000Lighting DataDefault format
0101 0101Network TestAll slots carry the same value
0001 0111Text PacketSimple text message
1100 1100Remote Device ManagementRDM Control/Response message
1100 1111System Information PacketIdentifies a DMX Universe
1111 1111Dimmer Curve Select

?DMX512 物理接口

DMX512 使用RS485 接口,物理插頭是5 針卡農頭。

Male Female
Pin 1 (screen)----------------------------- Pin 1 (screen)
Pin 2 (Data -)----------------------------- Pin 2 (Data -)
Pin 3 (Data +)----------------------------- Pin 3 (Data +)

Mbed OS DMX512? 協議的實現

在Mbed OS 下DMX512 的實現只要使用一個serial 口就可以了。下面我們介紹DMX512 類的實現:

?例1- 發送模式

向DMX512 燈具發送燈光數據,假設燈具是RGB LED 射燈。

DMX512A.h

#define DMX_SIZE 512 #define DMX_START_CODE 0 class DMX512A { public:DMX512A(PinName p_tx, PinName p_rx, PinName p_xmit);void put(int addr, int data);void put(unsigned char *buf, int addr = 0, int len = DMX_SIZE);void start();protected:RawSerial _dmx;DigitalOut _xmit; unsigned char data_tx[DMX_SIZE];unsigned char data_rx[DMX_SIZE];};

DMX512A.cpp

?

#include "mbed.h" #include "DMX512A.h" DMX512A::DMX512A (PinName p_tx, PinName p_rx, PinName p_xmit): _dmx(p_tx, p_rx),_xmit(p_xmit){ _xmit=1;_dmx.baud(250000);_dmx.format(8, Serial::None, 2);} void DMX512A::put (int addr, int data) {if (addr < 0 || addr >= DMX_SIZE) return;data_tx[addr] = data; } void DMX512A::put (unsigned char *buf, int addr, int len) {if (addr < 0 || addr >= DMX_SIZE) return;if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;memcpy(&data_tx[addr], buf, len); } void DMX512A::start () {//send break_dmx.send_break();wait_us(88); // send start code_dmx.putc(DMX_START_CODE);// send 512 channelfor (int i=0;i<512;i++)_dmx.putc(data_tx[i]);}

?這一代碼中,關鍵的是發送88uS 的break 信號。

主程序 寫了一段LED 的流水控制,底色是綠色,紅燈在流動。

#include "mbed.h" #include "DMX512A.h" DigitalOut myled(PC_6); DMX512A dmx512(PD_5,PD_6,PD_4); int main() {int addr;addr=0;//set background color greenfor (int i=0;i<170;i++){dmx512.put(addr++,0x00);//red channeldmx512.put(addr++,0xff);//green channeldmx512.put(addr++,0x00);//blue channel}dmx512.start();addr=0;while(1) {wait(1.0); // 1 secmyled = !myled; // LED Flashdmx512.put(addr++,0xff);//red channeldmx512.put(addr++,0x00);//green channeldmx512.put(addr++,0x00);//blue channeldmx512.start();if (addr==510) addr=0;wait(1.0); // 1 sec} }

?

?

總結

以上是生活随笔為你收集整理的Mbed OS :DMX512 灯光控制协议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。