light_maymays/microcontroller/test.ino
2021-08-29 11:44:33 +02:00

80 lines
1.5 KiB
C++

unsigned long tic_loop = 0;
const unsigned int FRAME_TIME = 20; // 20 ms -> 50 FPS
const size_t UNIVERSE_SIZE = 512;
byte channels_buffer[UNIVERSE_SIZE] = {0};
size_t bytes_read = 0;
void setup()
{
Serial.begin(115200); // USB
while (!Serial)
{
// spin until serial is up
}
Serial.println();
Serial.println("Init.");
Serial1.begin(250000, SERIAL_8N2); // DMX
}
void loop()
{
bool packet_ready = update_buffer();
if (packet_ready)
{
send_packet();
}
}
void send_packet()
{
send_dmx_header();
Serial1.write(channels_buffer, UNIVERSE_SIZE);
}
bool update_buffer()
{
size_t n = Serial.available();
if (!n)
return false;
int bytes_received = Serial.read(channels_buffer + bytes_read, std::min(n, UNIVERSE_SIZE - bytes_read));
bytes_read += bytes_received;
// Serial.printf("rx n=%d rec=%d total=%d\n", n, bytes_received, bytes_read);
if (bytes_read == UNIVERSE_SIZE)
{
bytes_read = 0;
// Serial.println();
// Serial.println("Updated.");
return true;
}
else
{
return false;
}
}
void send_dmx_header()
{
Serial1.flush();
Serial1.begin(90000, SERIAL_8N2);
/*
while (Serial1.available())
Serial1.read();
*/
// send the break as a "slow" byte
Serial1.write(0);
// switch back to the original baud rate
Serial1.flush();
Serial1.begin(250000, SERIAL_8N2);
/*
while (Serial1.available())
Serial1.read();
*/
Serial1.write(0); // Start-Byte
}