Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ws2812B.hpp@0:160ed7a225a4, 2016-09-24 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Sat Sep 24 05:52:29 2016 +0000
- Revision:
- 0:160ed7a225a4
- Child:
- 1:2d0f84d78ca2
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:160ed7a225a4 | 1 | //---------------------------------------------------- |
MikamiUitOpen | 0:160ed7a225a4 | 2 | // SPI を使って WS2812B を点灯するためのクラス(ヘッダ) |
MikamiUitOpen | 0:160ed7a225a4 | 3 | // サポートしているボード |
MikamiUitOpen | 0:160ed7a225a4 | 4 | // Nucleo-F401RE, Nucleo-F446RE |
MikamiUitOpen | 0:160ed7a225a4 | 5 | // 2016/09/24, Copyright (c) 2016 MIKAMI, Naoki |
MikamiUitOpen | 0:160ed7a225a4 | 6 | //---------------------------------------------------- |
MikamiUitOpen | 0:160ed7a225a4 | 7 | |
MikamiUitOpen | 0:160ed7a225a4 | 8 | #include "mbed.h" |
MikamiUitOpen | 0:160ed7a225a4 | 9 | |
MikamiUitOpen | 0:160ed7a225a4 | 10 | #if !defined(STM32F401xE) && !defined(STM32F446xx) |
MikamiUitOpen | 0:160ed7a225a4 | 11 | #error Select STM32F401 or STM32F446. |
MikamiUitOpen | 0:160ed7a225a4 | 12 | #endif |
MikamiUitOpen | 0:160ed7a225a4 | 13 | |
MikamiUitOpen | 0:160ed7a225a4 | 14 | #ifndef STM32F4xx_WS2812B_HPP |
MikamiUitOpen | 0:160ed7a225a4 | 15 | #define STM32F4xx_WS2812B_HPP |
MikamiUitOpen | 0:160ed7a225a4 | 16 | |
MikamiUitOpen | 0:160ed7a225a4 | 17 | namespace Mikami |
MikamiUitOpen | 0:160ed7a225a4 | 18 | { |
MikamiUitOpen | 0:160ed7a225a4 | 19 | class WS2812B |
MikamiUitOpen | 0:160ed7a225a4 | 20 | { |
MikamiUitOpen | 0:160ed7a225a4 | 21 | public: |
MikamiUitOpen | 0:160ed7a225a4 | 22 | // コンストラクタ |
MikamiUitOpen | 0:160ed7a225a4 | 23 | // inv = true: インバータを介して WS2812B に接続する場合 |
MikamiUitOpen | 0:160ed7a225a4 | 24 | // = false: 直接 WS2812B に接続する場合 |
MikamiUitOpen | 0:160ed7a225a4 | 25 | WS2812B(PinName pin, bool inv = false); |
MikamiUitOpen | 0:160ed7a225a4 | 26 | |
MikamiUitOpen | 0:160ed7a225a4 | 27 | void Write(uint32_t x); // 一つの LED へ書き込む |
MikamiUitOpen | 0:160ed7a225a4 | 28 | void Reset(); // 一連の書き込みの最後に実行する |
MikamiUitOpen | 0:160ed7a225a4 | 29 | void Clear(int k); // k 個の LED を消灯 |
MikamiUitOpen | 0:160ed7a225a4 | 30 | |
MikamiUitOpen | 0:160ed7a225a4 | 31 | private: |
MikamiUitOpen | 0:160ed7a225a4 | 32 | SPI_TypeDef *mySpi_; |
MikamiUitOpen | 0:160ed7a225a4 | 33 | |
MikamiUitOpen | 0:160ed7a225a4 | 34 | struct spi123{PinName pin; SPI_TypeDef *spi; }; |
MikamiUitOpen | 0:160ed7a225a4 | 35 | #ifdef STM32F401xE |
MikamiUitOpen | 0:160ed7a225a4 | 36 | static const spi123 f401[]; |
MikamiUitOpen | 0:160ed7a225a4 | 37 | #else |
MikamiUitOpen | 0:160ed7a225a4 | 38 | static const spi123 f446[]; |
MikamiUitOpen | 0:160ed7a225a4 | 39 | #endif // STM32F401xE |
MikamiUitOpen | 0:160ed7a225a4 | 40 | |
MikamiUitOpen | 0:160ed7a225a4 | 41 | void (WS2812B::*fp)(uint8_t); |
MikamiUitOpen | 0:160ed7a225a4 | 42 | void SendByte(uint8_t x) { (this->*fp)(x); } |
MikamiUitOpen | 0:160ed7a225a4 | 43 | void Send3Bytes(uint8_t x0, uint8_t x1, uint8_t x2); |
MikamiUitOpen | 0:160ed7a225a4 | 44 | void T0HL() { Send3Bytes(0xFE, 0x00, 0x00); } // 0 を送る |
MikamiUitOpen | 0:160ed7a225a4 | 45 | void T1HL() { Send3Bytes(0xFF, 0xFF, 0x00); } // 1 を送る |
MikamiUitOpen | 0:160ed7a225a4 | 46 | void Dummy() { SendByte(0x00); } |
MikamiUitOpen | 0:160ed7a225a4 | 47 | void SendByteNrm(uint8_t x); // データをそのまま送る |
MikamiUitOpen | 0:160ed7a225a4 | 48 | void SendByteInv(uint8_t x); // データを反転して送る |
MikamiUitOpen | 0:160ed7a225a4 | 49 | }; |
MikamiUitOpen | 0:160ed7a225a4 | 50 | } |
MikamiUitOpen | 0:160ed7a225a4 | 51 | #endif // STM32F4xx_WS2812B_HPP |