Skip to content

Instantly share code, notes, and snippets.

@connornishijima
Created March 2, 2020 02:20
Show Gist options
  • Save connornishijima/f66df675935f817a2c71597512661beb to your computer and use it in GitHub Desktop.
Save connornishijima/f66df675935f817a2c71597512661beb to your computer and use it in GitHub Desktop.
ROBOT12 BW on Arduino Uno w/ tone() function and timers! ---- (320x120 image is 1-bit BW stored in PROGMEM bytes)
volatile bool broadcast_done = false;
volatile uint8_t bit_index = 0;
volatile uint16_t byte_index = 0;
volatile uint8_t sync_count = 0;
uint8_t pixel_bit = 0;
uint8_t pixel_byte = 0;
bool bit_changed = false;
const uint8_t image[4800] PROGMEM = {
0, 15, 143, 255, 255, 255, 255, 255, 255, 255, 0, 31, 254, 0, 63, 252, 7, 128, 0, 0, 0, 0, 0, 15, 143, 255, 255, 255, 255, 255, 255, 255, 0, 31, 254, 0, 63, 252, 7, 128, 0, 30, 7, 128, 15, 255, 0, 31, 255, 255, 128, 15, 255, 0, 31, 254, 14, 0, 0, 0, 0, 0, 0, 31, 7, 128, 15, 255, 0, 31, 255, 255, 128, 15, 255, 0, 15, 254, 15, 0, 0, 124, 3, 192, 7, 255, 128, 15, 255, 255, 192, 3, 255, 128, 7, 255, 60, 0, 0, 0, 0, 0, 0, 60, 3, 192, 7, 255, 128, 15, 255, 255, 224, 3, 255, 128, 7, 255, 28, 0, 0, 248, 1, 224, 3, 255, 192, 7, 255, 255, 240, 1, 255, 192, 3, 255, 248, 0, 0, 0, 0, 0, 0, 248, 1, 224, 1, 255, 192, 3, 255, 255, 240, 1, 255, 224, 3, 255, 248, 0, 255, 240, 1, 240, 1, 255, 224, 3, 255, 255, 248, 0, 255, 240, 1, 255, 240, 0, 255, 255, 255, 255, 255, 240, 0, 240, 0, 255, 224, 1, 255, 255, 248, 0, 255, 240, 1, 255, 240, 0, 255, 224, 3, 248, 0, 127, 240, 0, 255, 255, 252, 0, 127, 248, 0, 255, 224, 3, 255, 255, 255, 255, 255, 224, 3, 252, 0, 127, 248, 0, 255, 255, 252, 0, 127, 248, 0, 255, 224, 3, 255, 192, 7, 252, 0, 63, 248, 0, 127, 255, 254, 0, 63, 252, 0, 127, 192, 7, 255, 255, 255, 255, 255, 192, 7, 254, 0, 63, 252, 0, 127, 255, 254, 0, 63, 252, 0, 127, 192, 7, 255, 128, 15, 255, 0, 31, 254, 0, 63, 255, 255, 0, 31, 254, 0, 63, 0, 15, 255, 255, 255, 255, 255, 128, 15, 255, 0, 31, 254, 0, 63, 255, 255, 0, 15, 254, 0, 31, 128, 15, 254, 0, 31, 255, 128, 15, 255, 0, 0, 0, 15, 128, 7, 255, 0, 30, 0, 31, 255, 255, 255, 255, 255, 0, 31, 255, 128, 15, 255, 0, 0, 0, 15, 128, 7, 255, 0, 30, 0, 31, 252, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 192, 3, 255, 128, 60, 0, 127, 248, 0, 0, 0, 126, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 224, 3, 255, 192, 28, 0, 63, 248, 0, 127, 241, 224, 3, 255, 192, 0, 0, 3, 240, 1, 255, 224, 120, 0, 255, 240, 0, 0, 0, 248, 0, 127, 241, 224, 1, 255, 192, 0, 0, 1, 240, 1, 255, 224, 120, 0, 127, 240, 1, 255, 224, 240, 0, 255, 224, 0, 0, 0, 248, 0, 255, 240, 240, 1, 255, 224, 0, 0, 1, 240, 0, 255, 224, 112, 0, 255, 240, 0, 0, 0, 248, 0, 255, 240, 240, 1, 255, 224, 3, 255, 192, 56, 0, 127, 240, 0, 0, 0, 124, 0, 127, 249, 224, 3, 255, 192, 0, 0, 3, 224, 3, 255, 192, 60, 0, 127, 248, 0, 0, 0, 124, 0, 127, 249, 224, 3, 255, 192, 7, 255, 128, 30, 0, 63, 255, 255, 255, 255, 254, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 192, 7, 255, 128, 30, 0, 63, 255, 255, 255, 255, 254, 0, 63, 255, 192, 7, 255, 128, 15, 255, 0, 31, 0, 31, 255, 255, 255, 255, 255, 0, 31, 255, 0, 15, 254, 0, 31, 255, 255, 128, 15, 255, 0, 31, 0, 31, 255, 255, 255, 255, 255, 0, 15, 255, 128, 15, 255, 0, 31, 254, 0, 63, 128, 15, 255, 255, 255, 255, 255, 128, 7, 254, 0, 31, 252, 0, 63, 255, 255, 0, 31, 254, 0, 63, 128, 15, 255, 255, 255, 255, 255, 128, 7, 254, 0, 31, 252, 0, 63, 248, 0, 127, 192, 7, 255, 255, 255, 255, 255, 192, 3, 252, 0, 127, 248, 0, 255, 255, 254, 0, 63, 248, 0, 127, 192, 7, 255, 255, 255, 255, 255, 224, 3, 252, 0, 63, 248, 0, 255, 240, 1, 255, 224, 3, 255, 255, 255, 255, 255, 224, 1, 248, 0, 255, 240, 1, 255, 255, 248, 0, 127, 240, 0, 255, 224, 1, 255, 255, 255, 255, 255, 240, 1, 248, 0, 255, 240, 1, 255, 224, 3, 255, 240, 0, 0, 0, 0, 0, 0, 248, 0, 240, 1, 255, 224, 3, 255, 255, 240, 1, 255, 224, 3, 255, 248, 0, 0, 0, 0, 0, 0, 248, 0, 240, 1, 255, 224, 3, 255, 192, 7, 255, 184, 0, 0, 0, 0, 0, 0, 124, 1, 224, 3, 255, 192, 7, 255, 255, 224, 3, 255, 192, 7, 255, 188, 0, 0, 0, 0, 0, 0, 124, 1, 224, 3, 255, 192, 7, 255, 128, 15, 255, 30, 0, 0, 0, 0, 0, 0, 62, 3, 128, 7, 255, 0, 15, 255, 255, 192, 7, 255, 128, 15, 255, 30, 0, 0, 0, 0, 0, 0, 62, 3, 192, 7, 255, 128, 15, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 0, 31, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 63, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 128, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 248, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 240, 1, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 224, 3, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 192, 7, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 0, 15, 248, 0, 0, 63, 248, 0, 0, 127, 254, 0, 15, 254, 15, 255, 252, 0, 0, 15, 255, 255, 0, 0, 15, 255, 255, 240, 63, 248, 0, 3, 255, 192, 0, 31, 252, 0, 0, 0, 0, 31, 248, 0, 0, 127, 252, 0, 0, 127, 255, 0, 15, 254, 15, 255, 255, 224, 0, 15, 255, 255, 248, 0, 15, 255, 255, 240, 63, 248, 0, 3, 255, 224, 0, 31, 252, 0, 0, 0, 0, 127, 248, 0, 0, 255, 254, 0, 0, 127, 255, 128, 15, 254, 15, 255, 255, 252, 0, 15, 255, 255, 255, 0, 15, 255, 255, 240, 31, 252, 0, 7, 255, 224, 0, 63, 248, 0, 0, 0, 0, 255, 240, 0, 0, 255, 255, 0, 0, 127, 255, 192, 15, 254, 15, 255, 255, 255, 0, 15, 255, 255, 255, 192, 15, 255, 255, 240, 15, 254, 0, 15, 255, 240, 0, 127, 240, 0, 0, 0, 1, 255, 224, 0, 1, 255, 255, 0, 0, 127, 255, 224, 15, 254, 15, 255, 255, 255, 192, 15, 255, 255, 255, 224, 15, 255, 255, 240, 7, 255, 0, 31, 255, 248, 0, 127, 240, 0, 0, 0, 255, 255, 192, 0, 3, 255, 255, 128, 0, 127, 255, 240, 15, 254, 15, 252, 63, 255, 224, 15, 255, 255, 255, 240, 15, 255, 255, 240, 7, 255, 0, 31, 255, 248, 0, 255, 224, 1, 255, 255, 255, 255, 128, 0, 7, 255, 255, 192, 0, 127, 255, 248, 15, 254, 15, 252, 0, 255, 240, 15, 252, 0, 127, 248, 15, 252, 0, 0, 3, 255, 128, 63, 255, 252, 1, 255, 192, 1, 255, 255, 255, 254, 0, 0, 7, 255, 255, 224, 0, 127, 255, 252, 15, 254, 15, 252, 0, 127, 248, 15, 252, 0, 31, 248, 15, 252, 0, 0, 1, 255, 192, 127, 255, 254, 3, 255, 128, 1, 255, 255, 255, 252, 0, 0, 15, 254, 255, 224, 0, 127, 255, 254, 15, 254, 15, 252, 0, 31, 248, 15, 252, 0, 31, 248, 15, 255, 255, 224, 1, 255, 192, 127, 247, 255, 3, 255, 128, 1, 255, 255, 255, 248, 0, 0, 31, 252, 127, 240, 0, 127, 239, 255, 15, 254, 15, 252, 0, 31, 248, 15, 252, 0, 31, 248, 15, 255, 255, 224, 0, 255, 224, 255, 231, 255, 7, 255, 0, 0, 255, 255, 0, 0, 0, 0, 31, 252, 63, 248, 0, 127, 231, 255, 143, 254, 15, 252, 0, 31, 248, 15, 252, 0, 63, 248, 15, 255, 255, 224, 0, 127, 241, 255, 195, 255, 143, 254, 0, 0, 120, 0, 0, 0, 0, 0, 63, 248, 63, 248, 0, 127, 227, 255, 207, 254, 15, 252, 0, 31, 248, 15, 252, 0, 255, 248, 15, 255, 255, 224, 0, 63, 251, 255, 129, 255, 207, 254, 0, 0, 28, 0, 0, 0, 0, 0, 127, 240, 31, 252, 0, 127, 225, 255, 239, 254, 15, 252, 0, 63, 248, 15, 255, 255, 255, 240, 15, 255, 255, 224, 0, 63, 251, 255, 129, 255, 223, 252, 0, 0, 14, 0, 0, 0, 8, 0, 255, 255, 255, 254, 0, 127, 224, 255, 255, 254, 15, 252, 0, 255, 240, 15, 255, 255, 255, 192, 15, 252, 0, 0, 0, 31, 255, 255, 0, 255, 255, 248, 0, 0, 7, 128, 0, 0, 56, 0, 255, 255, 255, 255, 0, 127, 224, 127, 255, 254, 15, 252, 7, 255, 240, 15, 255, 255, 255, 128, 15, 252, 0, 0, 0, 15, 255, 254, 0, 127, 255, 240, 0, 0, 3, 192, 255, 255, 248, 1, 255, 255, 255, 255, 0, 127, 224, 63, 255, 254, 15, 255, 255, 255, 192, 15, 255, 255, 255, 0, 15, 255, 255, 240, 0, 15, 255, 254, 0, 63, 255, 240, 0, 0, 1, 255, 255, 255, 248, 3, 255, 255, 255, 255, 128, 127, 224, 31, 255, 254, 15, 255, 255, 255, 128, 15, 255, 255, 255, 128, 15, 255, 255, 240, 0, 7, 255, 252, 0, 63, 255, 224, 0, 0, 3, 255, 0, 15, 136, 7, 255, 255, 255, 255, 192, 127, 224, 15, 255, 254, 15, 255, 255, 254, 0, 15, 252, 3, 255, 192, 15, 255, 255, 240, 0, 3, 255, 248, 0, 31, 255, 192, 0, 0, 7, 128, 0, 31, 0, 7, 255, 0, 1, 255, 192, 127, 224, 7, 255, 254, 15, 255, 255, 240, 0, 15, 252, 1, 255, 224, 15, 255, 255, 240, 0, 1, 255, 240, 0, 15, 255, 128, 0, 0, 15, 0, 0, 60, 0, 15, 254, 0, 0, 255, 224, 127, 224, 3, 255, 254, 15, 255, 255, 0, 0, 15, 252, 0, 255, 248, 15, 255, 255, 240, 0, 1, 255, 240, 0, 15, 255, 128, 0, 1, 30, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 248, 0, 255, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 240, 0, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 224, 3, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 192, 7, 255, 128, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 128, 15, 255, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 31, 252, 0, 56, 0, 7, 255, 255, 0, 0, 7, 255, 248, 0, 7, 255, 248, 0, 0, 0, 63, 255, 255, 0, 0, 31, 255, 224, 0, 7, 255, 255, 192, 0, 63, 255, 248, 0, 0, 0, 63, 248, 0, 120, 0, 63, 255, 255, 240, 0, 7, 255, 248, 0, 7, 255, 248, 0, 0, 3, 255, 255, 255, 240, 0, 31, 255, 224, 0, 15, 255, 255, 0, 1, 255, 255, 255, 128, 0, 0, 127, 240, 1, 248, 1, 255, 255, 255, 254, 0, 7, 255, 248, 0, 7, 255, 248, 0, 0, 31, 255, 255, 255, 254, 0, 31, 255, 224, 0, 63, 255, 252, 0, 15, 255, 255, 255, 240, 0, 1, 255, 224, 3, 248, 3, 255, 255, 255, 255, 128, 7, 255, 248, 0, 7, 255, 248, 0, 0, 255, 255, 255, 255, 255, 128, 31, 255, 224, 0, 255, 255, 248, 0, 31, 255, 255, 255, 252, 0, 3, 255, 192, 7, 248, 15, 255, 255, 255, 255, 0, 7, 255, 248, 0, 7, 255, 248, 0, 3, 255, 255, 255, 255, 254, 0, 31, 255, 224, 1, 255, 255, 224, 0, 127, 255, 255, 255, 248, 0, 7, 255, 128, 15, 248, 31, 255, 255, 255, 248, 0, 7, 255, 248, 0, 7, 255, 248, 0, 15, 255, 255, 255, 255, 248, 0, 31, 255, 224, 7, 255, 255, 192, 0, 255, 255, 255, 255, 192, 0, 15, 255, 0, 31, 248, 31, 255, 255, 255, 224, 0, 7, 255, 248, 0, 7, 255, 248, 0, 31, 255, 255, 255, 255, 224, 0, 31, 255, 224, 31, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 31, 254, 0, 63, 248, 63, 255, 249, 255, 128, 0, 7, 255, 248, 0, 7, 255, 248, 0, 63, 255, 255, 243, 255, 128, 0, 31, 255, 224, 63, 255, 252, 0, 1, 255, 255, 207, 252, 0, 0, 63, 248, 0, 127, 240, 63, 255, 192, 14, 0, 0, 7, 255, 248, 0, 7, 255, 248, 0, 127, 255, 248, 0, 14, 0, 0, 31, 255, 224, 255, 255, 248, 0, 1, 255, 254, 0, 112, 0, 0, 127, 240, 1, 255, 224, 63, 255, 192, 0, 0, 0, 7, 255, 248, 0, 7, 255, 248, 0, 255, 255, 224, 0, 0, 0, 0, 31, 255, 227, 255, 255, 224, 0, 1, 255, 254, 0, 0, 0, 1, 255, 224, 3, 255, 192, 63, 255, 240, 0, 0, 0, 7, 255, 248, 0, 7, 255, 248, 1, 255, 255, 128, 0, 0, 0, 0, 31, 255, 231, 255, 255, 128, 0, 1, 255, 255, 128, 0, 0, 1, 255, 192, 7, 255, 128, 63, 255, 255, 192, 0, 0, 7, 255, 248, 0, 7, 255, 248, 1, 255, 255, 0, 0, 0, 0, 0, 31, 255, 255, 255, 255, 0, 0, 1, 255, 255, 254, 0, 0, 1, 255, 128, 15, 255, 0, 31, 255, 255, 255, 128, 0, 7, 255, 248, 0, 7, 255, 248, 3, 255, 254, 0, 0, 0, 0, 0, 31, 255, 255, 255, 252, 0, 0, 0, 255, 255, 255, 252, 0, 1, 255, 0, 31, 252, 0, 15, 255, 255, 255, 240, 0, 7, 255, 248, 0, 7, 255, 248, 3, 255, 252, 0, 0, 0, 0, 0, 31, 255, 255, 255, 240, 0, 0, 0, 127, 255, 255, 255, 128, 1, 255, 255, 63, 248, 0, 7, 255, 255, 255, 254, 0, 7, 255, 248, 0, 7, 255, 248, 3, 255, 252, 0, 0, 0, 0, 0, 31, 255, 255, 255, 252, 0, 0, 0, 63, 255, 255, 255, 240, 1, 255, 255, 255, 240, 0, 1, 255, 255, 255, 255, 0, 7, 255, 248, 0, 7, 255, 248, 3, 255, 252, 0, 0, 0, 0, 0, 31, 255, 255, 255, 254, 0, 0, 0, 15, 255, 255, 255, 248, 0, 0, 0, 255, 224, 0, 0, 127, 255, 255, 255, 192, 7, 255, 248, 0, 7, 255, 248, 3, 255, 252, 0, 0, 0, 0, 0, 31, 255, 255, 255, 255, 128, 0, 0, 3, 255, 255, 255, 254, 0, 0, 0, 255, 192, 0, 0, 15, 255, 255, 255, 192, 7, 255, 248, 0, 7, 255, 248, 3, 255, 254, 0, 0, 0, 0, 0, 31, 255, 255, 255, 255, 192, 0, 0, 0, 127, 255, 255, 254, 0, 0, 0, 255, 128, 8, 0, 0, 63, 255, 255, 224, 7, 255, 248, 0, 7, 255, 248, 1, 255, 255, 0, 0, 0, 0, 0, 31, 255, 255, 255, 255, 240, 0, 0, 0, 1, 255, 255, 255, 0, 0, 0, 255, 0, 24, 0, 0, 0, 127, 255, 224, 7, 255, 248, 0, 7, 255, 248, 1, 255, 255, 128, 0, 0, 0, 0, 31, 255, 255, 255, 255, 248, 0, 0, 0, 0, 3, 255, 255, 0, 0, 0, 252, 0, 56, 0, 0, 0, 15, 255, 240, 7, 255, 252, 0, 15, 255, 248, 0, 255, 255, 224, 0, 0, 0, 0, 31, 255, 255, 159, 255, 254, 0, 0, 0, 0, 0, 127, 255, 129, 255, 255, 248, 0, 120, 0, 3, 128, 31, 255, 240, 3, 255, 255, 0, 63, 255, 240, 0, 127, 255, 248, 0, 14, 0, 0, 31, 255, 254, 15, 255, 255, 0, 0, 0, 28, 0, 255, 255, 129, 255, 255, 240, 1, 248, 0, 15, 252, 255, 255, 224, 3, 255, 255, 255, 255, 255, 240, 0, 63, 255, 255, 255, 255, 128, 0, 31, 255, 252, 3, 255, 255, 192, 0, 0, 127, 231, 255, 255, 1, 255, 255, 224, 3, 248, 0, 63, 255, 255, 255, 224, 1, 255, 255, 255, 255, 255, 224, 0, 31, 255, 255, 255, 255, 224, 0, 31, 255, 240, 1, 255, 255, 224, 0, 1, 255, 255, 255, 255, 1, 255, 255, 192, 7, 248, 0, 255, 255, 255, 255, 192, 0, 255, 255, 255, 255, 255, 192, 0, 15, 255, 255, 255, 255, 248, 0, 31, 255, 224, 0, 127, 255, 248, 0, 7, 255, 255, 255, 254, 1, 255, 255, 0, 15, 248, 7, 255, 255, 255, 255, 128, 0, 63, 255, 255, 255, 255, 0, 0, 3, 255, 255, 255, 255, 254, 0, 31, 255, 224, 0, 63, 255, 252, 0, 63, 255, 255, 255, 252, 0, 0, 0, 0, 31, 248, 15, 255, 255, 255, 255, 0, 0, 31, 255, 255, 255, 254, 0, 0, 0, 255, 255, 255, 255, 255, 128, 31, 255, 224, 0, 15, 255, 255, 0, 127, 255, 255, 255, 248, 0, 0, 0, 0, 63, 248, 3, 255, 255, 255, 252, 0, 0, 7, 255, 255, 255, 248, 0, 0, 0, 31, 255, 255, 255, 254, 0, 31, 255, 224, 0, 7, 255, 255, 128, 31, 255, 255, 255, 224, 0, 0, 0, 0, 127, 240, 0, 127, 255, 255, 240, 0, 0, 0, 255, 255, 255, 192, 0, 0, 0, 3, 255, 255, 255, 240, 0, 31, 255, 224, 0, 1, 255, 255, 224, 3, 255, 255, 255, 128, 0, 0, 0, 1, 255, 224, 0, 7, 255, 255, 0, 0, 0, 0, 15, 255, 252, 0, 0, 0, 0, 0, 63, 255, 255, 0, 0, 31, 255, 224, 0, 0, 255, 255, 240, 0, 63, 255, 248, 0, 0, 0, 0, 255, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 255, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 192, 255, 255, 252, 0, 0, 0, 0, 0, 0, 0, 0, 127, 240, 0, 255, 224, 1, 255, 255, 255, 255, 255, 255, 255, 252, 0, 0, 0, 0, 0, 0, 0, 0, 127, 248, 0, 255, 240, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 0, 63, 252, 0, 127, 248, 3, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 0, 63, 252, 0, 127, 248, 3, 255, 0, 15, 159, 255, 255, 255, 255, 255, 255, 255, 0, 31, 254, 0, 63, 252, 7, 128, 0, 0, 0, 0, 0, 15, 143, 255, 255, 255, 255, 255, 255, 255, 0, 31, 254, 0, 63, 252, 7, 128, 0, 31, 7, 128, 15, 255, 0, 31, 255, 255, 128, 15, 255, 0, 31, 254, 15, 0, 0, 0, 0, 0, 0, 31, 7, 128, 15, 255, 0, 31, 255, 255, 128, 15, 255, 0, 31, 254, 15, 0, 0, 62, 3, 192, 7, 255, 128, 15, 255, 255, 192, 7, 255, 128, 15, 255, 30, 0, 0, 0, 0, 0, 0, 62, 3, 192, 7, 255, 128, 15, 255, 255, 192, 7, 255, 128, 7, 255, 30, 0, 0, 120, 1, 224, 3, 255, 192, 7, 255, 255, 224, 3, 255, 192, 7, 255, 248, 0, 0, 0, 0, 0, 0, 124, 1, 224, 3, 255, 192, 7, 255, 255, 224, 1, 255, 192, 3, 255, 248, 0, 1, 240, 1, 240, 1, 255, 224, 3, 255, 255, 240, 0, 255, 224, 1, 255, 240, 0, 64, 0, 0, 0, 1, 240, 0, 240, 1, 255, 224, 1, 255, 255, 248, 0, 255, 240, 1, 255, 240, 0, 255, 224, 1, 248, 0, 255, 240, 1, 255, 255, 252, 0, 127, 248, 0, 255, 224, 3, 255, 255, 255, 255, 255, 224, 1, 248, 0, 127, 240, 0, 255, 255, 252, 0, 127, 248, 0, 255, 224, 1, 255, 192, 7, 252, 0, 63, 248, 0, 127, 255, 254, 0, 63, 252, 0, 127, 192, 7, 255, 255, 255, 255, 255, 192, 3, 252, 0, 63, 248, 0, 127, 255, 254, 0, 63, 252, 0, 127, 192, 7, 255, 128, 15, 254, 0, 31, 252, 0, 63, 255, 255, 0, 31, 254, 0, 63, 128, 15, 255, 255, 255, 255, 255, 128, 15, 255, 0, 31, 254, 0, 63, 255, 255, 0, 31, 254, 0, 63, 128, 15, 255, 0, 31, 255, 128, 15, 255, 0, 0, 0, 15, 128, 15, 255, 0, 31, 0, 31, 255, 255, 255, 255, 255, 0, 31, 255, 128, 15, 255, 0, 0, 0, 15, 128, 15, 255, 0, 31, 0, 31, 254, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 192, 7, 255, 128, 28, 0, 63, 255, 255, 255, 255, 254, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 192, 3, 255, 128, 30, 0, 63, 120, 0, 127, 241, 224, 3, 255, 192, 0, 0, 3, 224, 1, 255, 192, 120, 0, 255, 240, 0, 0, 0, 124, 0, 127, 249, 224, 3, 255, 192, 0, 0, 3, 224, 1, 255, 192, 56, 0, 127, 240, 0, 255, 224, 240, 1, 255, 224, 0, 0, 1, 240, 0, 255, 224, 240, 1, 255, 224, 0, 0, 1, 248, 0, 255, 224, 240, 1, 255, 224, 0, 0, 1, 248, 0, 255, 240, 240, 0, 255, 224, 3, 255, 192, 120, 0, 255, 240, 0, 0, 0, 124, 0, 127, 249, 224, 3, 255, 192, 0, 0, 3, 224, 1, 255, 192, 120, 0, 127, 240, 0, 0, 0, 124, 0, 127, 249, 224, 3, 255, 192, 7, 255, 128, 60, 0, 63, 255, 255, 255, 255, 254, 0, 63, 255, 192, 7, 255, 128, 0, 0, 7, 192, 7, 255, 128, 30, 0, 63, 255, 255, 255, 255, 254, 0, 63, 255, 192, 7, 255, 128, 15, 255, 0, 31, 0, 31, 255, 255, 255, 255, 255, 0, 31, 255, 128, 15, 255, 0, 31, 255, 223, 128, 15, 255, 0, 31, 0, 31, 255, 255, 255, 255, 255, 0, 31, 255, 128, 15, 255, 0, 31, 254, 0, 63, 128, 15, 255, 255, 255, 255, 255, 128, 15, 254, 0, 31, 252, 0, 63, 255, 255, 0, 31, 254, 0, 63, 128, 15, 255, 255, 255, 255, 255, 128, 15, 255, 0, 31, 254, 0, 63, 252, 0, 127, 192, 7, 255, 255, 255, 255, 255, 192, 7, 252, 0, 63, 248, 0, 127, 255, 254, 0, 63, 252, 0, 127, 192, 7, 255, 255, 255, 255, 255, 192, 3, 254, 0, 63, 252, 0, 127, 240, 0, 255, 224, 3, 255, 255, 255, 255, 255, 224, 1, 248, 0, 255, 240, 1, 255, 255, 252, 0, 127, 248, 0, 255, 224, 3, 255, 255, 255, 255, 255, 224, 1, 248, 0, 127, 240
};
void setup() {
sstv();
}
void loop() {
}
void sstv(){
// preamble
tone_wait(1900,100);
tone_wait(1500,100);
tone_wait(1900,100);
tone_wait(1500,100);
tone_wait(2300,100);
tone_wait(1500,100);
tone_wait(2300,100);
tone_wait(1500,100);
// leader
tone_wait(1900,300);
tone_wait(1200,10);
tone_wait(1900,300);
// VIS
tone_wait(1200,30); // start bit
tone_bit(0); // data bits
tone_bit(1);
tone_bit(1);
tone_bit(0);
tone_bit(0);
tone_bit(0);
tone_bit(0);
tone_bit(1); // parity bit
tone_wait(1200,30); // stop bit
// TIMER 1 for interrupt frequency 2400.2400240024003 Hz:
cli(); // stop interrupts
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
TCNT1 = 0; // initialize counter value to 0
// set compare match register for 2400.2400240024003 Hz increments
OCR1A = 16000000 / (1 * 3300) - 1; // (must be <65536)
// turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS12, CS11 and CS10 bits for 1 prescaler
TCCR1B |= (0 << CS12) | (0 << CS11) | (1 << CS10);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);
sei(); // allow interrupts
while(!broadcast_done){
if(sync_count != 0){
tone(9,1200); // sync
}
else if(bit_changed){
bit_changed = false;
if(pixel_bit == 1){
tone(9,2300);
}
else{
tone(9,1500);
}
}
}
noTone(9);
}
void tone_wait(uint16_t freq, uint16_t del){
tone(9,freq);
uint32_t t_start = millis();
while(millis() < t_start+del){
//wait
}
}
void tone_bit(bool b){
if(b == 1){
tone_wait(1100,30);
}
else{
tone_wait(1300,30);
}
}
void random_line(){
tone_wait(1200,5);
uint32_t last_event = micros();
for(uint8_t i = 0; i < 120; i++){
tone(9,1500+(i<<3));
while(micros() - last_event < 505){
}
last_event = micros();
}
}
ISR(TIMER1_COMPA_vect){
if(sync_count == 0){
if(byte_index < 4800){
pixel_bit = bitRead(pixel_byte, 7-bit_index);
bit_changed = true;
/*
if(byte_index % 40 == 0){
pixel_bit = 1;
}
else{
pixel_bit = 0;
}
*/
bit_index++;
if(bit_index >= 8){
bit_index = 0;
byte_index++;
pixel_byte = pgm_read_byte(image + byte_index);
if(byte_index % 40 == 0){
sync_count = 10;
}
}
}
else{
broadcast_done = true;
}
}
else{
tone(9,1200); // sync
sync_count--;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment