esp8266-ws2801d/src/ws2801.cpp

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;
}
}