訓練dmd庫
>
通過訓練DMD庫完成了我們的LED點矩陣顯示器上的繪圖線,形狀和文本。要使用它,請完成以下步驟:草圖始於我們的包含和常數。我們包括SoftWareserial.H,允許我們訪問串行端口並定義DMD的寬度和高度(在我們的情況下為32×16)。 Buflength存儲了我們擁有的燈數,因為這是我們要發送Arduino的消息的最大大小。在我們的情況下,它乘以32乘以16,即512。
>接下來,我們將包括特定於自由式DMD的特定內容。這些都應從我們複製到Arduino Libraries文件夾中的文件中可用。
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
然後,我們有兩個常數displays_across和displays_down,用於定義我們加入了多少個LED顯示。我假設您與我處於同一情況,並且只有一個顯示,因此這兩個都等於一個。然後,我們將其傳遞到DMD庫中,使用DMD DMD()。
DMD樣本中包含下一個代碼。這是我們稱為DMD庫以設置間隔刷新顯示的功能。我們將間隔定義得更遠。<span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
然後,我們定義了最後兩個變量。這兩個與通過串行端口接收消息有關。首先,BUF [BUFLENGTH]存儲串行端口消息的緩衝區,其中LED應打開和關閉。其次,bufcount將用於存儲此緩衝區中的多少個字節以讀取。
<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
>
然後,我們使用我們之前包含的TimerOne庫初始化計時器。我們告訴它是四毫秒的倒計時。在Freetronics的示例中,他們建議不要將其設置為超過五毫秒以避免在我們的展示中閃爍。<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
然後,當我們的計時器到期時,我們將其設置為運行ScandMD()函數,從而刷新顯示器。
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
>
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
>
<span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
如果我們確實在緩衝區中有消息,則將其發送到Parsebuffer(),該parsebuffer()將解析並將其顯示在我們的屏幕上。
<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
在ParseBuffer()函數中,我們首先清除屏幕,以便我們用新圖紙點亮它。然後,我們創建一個i的整數,以跟踪我們正在閱讀的數組中的哪個位置。
> 然後,我們通過x通過x循環到屏幕_Width,然後通過y循環向下循環直至screen_height,然後通過x循環循環循環,然後從x循環循環,然後從左到右迭代。這將我們的一維數組讀取到DMD的二維顯示中。對於每個角色,我們檢查是否是“ 1”。如果是這樣,那麼我們在x和y處的顯示屏上畫出了該LED。這將用於黑色圖像的各個部分。如果不是“ 1”,那麼我們將繼續到下一個位置,依此類推。最終,繪製我們的整個圖像。<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
涵蓋了我們的Arduino的工作原理 - 如果我們現在在附加的LED上運行該代碼,那麼它根本沒有顯示。要在DOT矩陣顯示器上顯示任何顯示的內容,我們需要我們的節點代碼將其發送到串行端口的消息。
我們的節點代碼
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
我們的JavaScript首先需要兩個重要的NPM模塊。 SerialPort將使我們能夠通過串行端口向我們的Arduino和PNG-JS發送消息,這是我們的PNG圖像中讀取的內容。
>如果您不確定您的arduino連接到哪個端口(例如,我有'/dev/tty.usbmodem1431'),請將其連接到您的PC,打開Arduino IDE,請轉到工具>端口,然後查看哪個端口選擇。
<span>void setup() { </span> Serial<span>.begin(57600);</span>
>波特率可以是個人喜好,如果您不太擔心它使用的是哪種波特率,請隨時堅持我們在示例中已經獲得的。 然後,我們初始化一個稱為serialMessage的字符串變量,該變量將存儲我們將通過串行端口發送的完整字符串和零字符串。
<span><span>#include <SoftwareSerial.h></span> </span> <span><span>#define SCREEN_WIDTH <span>32</span></span> </span> <span><span>#define SCREEN_HEIGHT <span>16</span></span> </span> <span><span>#define BUFLENGTH <span>512</span></span></span>
>我們的Serialport對象具有“打開”的事件偵聽器,當定義串行端口打開並準備從我們的JavaScript訪問時,它會響應。在這種情況下,我們運行console.log,因此我們可以確定我們的串行端口消息都很好。
><span><span>#include <SPI.h></span> </span> <span><span>#include <DMD.h></span> </span> <span><span>#include <TimerOne.h></span></span>
>一旦我們知道我們的串行端口已準備就緒消息,我們將運行png.decode()函數以讀取我們的png映像文件。在我們的演示中,我們在與名為sitePointLogo-withsmile.png的節點文件的同一文件夾中有一個PNG映像,因此我們傳遞了該文件名。然後,我們擁有回調函數,該功能通過數據變量為我們提供了PNG文件的數據。
<span><span>#define DISPLAYS_ACROSS <span>1</span></span> </span> <span><span>#define DISPLAYS_DOWN <span>1</span></span> </span> DMD <span>dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);</span>
上面的陣列代表一個白色像素,其255,255,255,255和一個黑色像素為0,0,0,255。每個像素都一遍又一遍地繼續,直到我們代表整個圖像為止。
<span>void ScanDMD() { </span> dmd<span>.scanDisplayBySPI(); </span> <span>}</span>
>
為了能夠處理並非完全黑色或白色的灰度值,我們還進行了亮度檢查。下面的功能確定了像素的顏色的深色或光線:
<span>char buf[BUFLENGTH]; </span> <span>int bufCount;</span>
>
<span>void setup() { </span> Serial<span>.begin(57600);</span>
Timer1<span>.initialize(4000);</span>
>如果上傳草圖,請將顯示器連接到您的arduino,然後通過Node SeriaLdMd.js運行節點服務器代碼(請記住,請首先安裝所有內容),您應該看到它用PNG文件點亮,例如:
>您可以通過多種方法進行擴展。它是一個節點服務器,因此您可以將其連接到API並顯示通過它的圖像。您可以根據一天中的時間(您的家中的Internet連接設備,天氣或其他許多東西)顯示出不同的圖像!
>如果您將這個想法擴展到真正整潔的事物中,請在評論中知道或在Twitter上與我聯繫(@thatpatrickguy),我想看看!
>經常詢問的問題(常見問題解答)有關在點矩陣LED顯示上顯示帶有node.js我可以使用Node.js以外的其他編程語言來控制點矩陣LED顯示器是的,是的,您可以使用其他編程語言來控制點矩陣LED顯示。雖然本文由於易於使用和多功能性而著重於使用Node.js,但也可以使用其他語言,例如Python,C和Java。編程語言的選擇在很大程度上取決於您的舒適度和項目的特定要求。
>如何在點矩陣LED顯示器上顯示自定義圖像?
> dot矩陣LED顯示的壽命是多少? > DOT矩陣LED顯示屏的壽命可能會因所使用的LED質量以及使用顯示的條件而有所不同。但是,LED顯示器通常以其壽命而聞名,可以持續數万小時的使用。
>我可以在戶外使用dot矩陣LED顯示嗎?
>我如何優化點矩陣LED顯示器的亮度?
以上是用node.js顯示在點矩陣LED顯示器上顯示圖像的詳細內容。更多資訊請關注PHP中文網其他相關文章!