40 lines
682 B
C++
40 lines
682 B
C++
#include <SPI.h>
|
|
|
|
#include "ws2801.h"
|
|
|
|
uint8_t message[3 * MAX_NUM_MODULES];
|
|
|
|
uint32_t ws2801_num_modules;
|
|
|
|
void ws2801_init(void)
|
|
{
|
|
ws2801_num_modules = MAX_NUM_MODULES;
|
|
|
|
SPI.begin();
|
|
}
|
|
|
|
void ws2801_set_colour(uint32_t module, uint8_t red, uint8_t green, uint8_t blue)
|
|
{
|
|
message[3*module + 0] = red;
|
|
message[3*module + 1] = blue;
|
|
message[3*module + 2] = green;
|
|
}
|
|
|
|
void ws2801_send_update(void)
|
|
{
|
|
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
|
|
|
|
for(uint32_t i = 0; i < 3*ws2801_num_modules; i++) {
|
|
SPI.transfer(message[i]);
|
|
}
|
|
|
|
SPI.endTransaction();
|
|
}
|
|
|
|
void ws2801_set_num_modules(uint32_t n)
|
|
{
|
|
if(n <= MAX_NUM_MODULES) {
|
|
ws2801_num_modules = n;
|
|
}
|
|
}
|