void setup()
{
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
Serial.begin(115200);
// DDRB |= (1 << DDB0) | (1 << DDB1);
// PORTB |= (1 << PORTB0);
// PORTB |= (1 << PORTB1);
/* // Set Timer1 CTC
TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
TCCR1A = TCCR1A & ~(_BV(WGM11) | _BV(WGM10));
// No prescaler (p.134)
TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);
OCR1A = 0;
TIMSK1 |= _BV(OCIE1A);*/
}
#define nop() __asm volatile ("nop")
#define nop1() nop();
#include <nopnopnop.h>
#define onD() PORTB = (1 << PORTB0);
#define onC() PORTB = (1 << PORTB1);
#define onB() PORTB = (1 << PORTB0) | (1 << PORTB1);
#define offB() PORTB = 0;
#define off() nop10(); PORTB = 0;
#define off2() nop10(); PORTB = 0; nop10();
#define DH() PORTB |= (1 << PORTB0)
#define CH() PORTB |= (1 << PORTB1)
#define DL() PORTB &= ~(1 << PORTB0)
#define CL() PORTB &= ~(1 << PORTB1)
#include <util/delay.h>
#define D_ALL 0b01010001
#define C_ALL 0b00001101
#define D_PIXEL 0b01100011
#define D_GREEN 0b00010000
#define D_RED 0b00001000
#define D_BLUE 0b00000100
#define D_WHITE 0b00011100
#define D_BLACK 0b00000000
#define C_PIXEL 0b01000100
#define D_P69 0b01000010
#define C_P69 0b00100100
#define C_MYSTERY1 0b01000000
#define C_MYSTERY2 0b00011000
#define DELAY 50
// cccccc-ddddddd
#define CMD_RAINBOW 0b11111000110001 // shifts a pixel for pwm
#define CMD_DOPWM 0b10101000101000 // enables pwm mixing
#define CMD_DOSWIPE 0b10101000100100 // enables backwards shifting?
#define CMD_SHIFT 0b10001000110001 // shifts a pixel into the register
#define CMD_CLS1 0b01001000111000 //?? before foreground paint
#define CMD_SWIPE 0b01001000100001 //?? responsible for program 69
#define CMD_CLS2 0b00101000100000 //?? before background paint
#define CMD_BG 0b01001000110000 // paint background, broken
#define CMD_FG 0b00001000101000 // paint foreground
#define CMD_EMPTY 0b00001000100001 // shifts pixels, removed bg, but not all of it
#define CMD_SETPWM 0b10001000100000 // pwm speed for fading
// fade in : CMD_SETPWM + CMD_BG
// fade out: CMD_SETPWM + CMD_BG | BG_OFF
#define PWM_1 0b00100000000000
#define PWM_2 0b00010000000000
#define PWM_3 0b00000000001000
#define PWM_4 0b00000000000100
#define PWM_5 0b00000000000010
#define SHIFT_CGREEN 0b01000000000000
#define SHIFT_CRED 0b00100000000000
#define SHIFT_CBLUE 0b00010000000000
// bitmap
// cccccc-ddddddd
//#define RAINBOW+COL 0b111110 011***1 // shifts a pixel for pwm
//#define SWIPE+M1+M2 0b111110 010***1
//#define SWIPE+MYST1 0b110010 010***1
//#define CMD_SETPWM 0b10**100010***0 // pwm speed for fading
//#define CMD_SHIFT 0b1***10 011***1 // shifts a pixel into the register
//#define SWIPE+MYST2 0b011110 010***1
//#define CMD_CLS1 0b01**10 0111*00 //?? before foreground paint, set background as well
//#define CMD_BG 0b01**10 0110*00 // paint background
//#define CMD_SWIPE 0b010010 010***1 //?? responsible for program 69
//#define CMD_CLS2 0b001010 0100000 //?? before background paint
//#define CMD_FG 0b00**10 0101*00 // paint foreground
//#define CMD_EMPTY 0b000010 0100001 // shifts pixels, removed bg, but not all of it
// parameters
#define BG_BLUE 0b00000000000100
#define BG_GREEN 0b00010000000000
#define BG_PERS 0b00100000000000
#define BG_PERS2 0b00000000000010
#define BG_RED 0b00000000001000
#define BG_WHITE 0b00110000000100
#define BG_OFF 0b00100000000000
#define FG_RED 0b00000000000100
#define FG_BLUE 0b00010000000000
#define FG_GREEN 0b00100000000000
#define FG_WHITE 0b00110000000100
#define FG_OFF 0b00100000000000
#define SHIFT_RED 0b00000000000100
#define SHIFT_BLUE 0b00000000000010
#define SHIFT_GREEN 0b00000000001000
#define SHIFT_WHITE 0b00000000001110
#define SWIPE_MYST1 0b10000000000000
#define SWIPE_MYST2 0b00110000000000
#define SWIPE_RED SHIFT_RED
#define SWIPE_BLUE SHIFT_BLUE
#define SWIPE_GREEN SHIFT_GREEN
#define SWIPE_WHITE SHIFT_WHITE
#define R CMD_FG | FG_RED
#define B CMD_FG | FG_BLUE
#define G CMD_FG | FG_GREEN
#define W CMD_FG | FG_WHITE
uint8_t wait;
int pos = 0, pos2 = 10, pos3 = 16;
int d = 1;
int max = 160;
int first = 0;
#define ap(x) abs(159 - x)
void pp(int p1, int p2, int p3)
{
for (int i = 0; i < 160; i++)
{
int c = 0;
if (i == p1)
c |= SHIFT_CRED;
if (i == p2)
c |= SHIFT_CGREEN;
if (i == p3)
c |= SHIFT_CBLUE;
writeOne(CMD_SHIFT | c);
}
_delay_ms(10);
}
char buffer[160];
void loop()
{
while (Serial.read() != 0xFF);
for (int i = 0; i < 160; i++)
buffer[i] = Serial.read();
noInterrupts();
for (int i = 0; i < 160; i++)
writeOne(CMD_SHIFT | buffer[i]);
interrupts();
/*
while (Serial.available())
{
int c = CMD_SHIFT | (Serial.read() << 10);
writeOne(c);
}7
*/
return;
writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE );
writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN);
writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
writeOne(CMD_SHIFT | SHIFT_CGREEN | SHIFT_GREEN );
writeOne(CMD_SHIFT | SHIFT_GREEN );
writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
writeOne(CMD_SHIFT | SHIFT_CRED | SHIFT_RED );
writeOne(CMD_SHIFT | SHIFT_BLUE );
writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_CBLUE | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_RED );
_delay_ms(5000);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
writeOne(CMD_SHIFT | SHIFT_BLUE);
_delay_ms(5000);
/*
writeOne(CMD_SHIFT | SHIFT_CBLUE);
_delay_ms(500); */
}
// ? ? ? ? ? GG RR BB ?
// DTI + 16 , 16 | 10 , 14 | 26 | 16 , 16 | 18 , 16 | 18 , 18 | 14 , 20 | 12 , 22 | 14 +
// CKI | 16 , 16 , 10 | 14 , 26 , 16 | 16 , 18 | 16 , 18 | 18 , 14 | 20 , 12 | 22 , 14 |
// ? ? ?
// ? ? ? ? ? GG RR BB ?
// DTI + 34 | 10 , 14 | 26 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 +
// CKI | 34 , 10 | 14 , 26 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 | 17 , 17 |
// ? ? ?
#define _bit2(r, b, nops) if (C & (1 << b)) \
r##H(); \
\
else \
r##L(); \
\
nop##nops(); \
#define _bit(r, b, nops) if (r & (1 << b)) \
r##H(); \
\
else \
r##L(); \
\
nop##nops(); \
void writeOne(uint16_t C)
{
CL();
nop46();
_bit2(D, 6, 8);
_bit2(C, 13, 18);
_bit2(D, 5, 38);
_bit2(D, 4, 15);
_bit2(C, 12, 21);
_bit2(D, 3, 21);
_bit2(C, 11, 21);
_bit2(D, 2, 21);
_bit2(C, 10, 21);
_bit2(D, 1, 21);
_bit2(C, 9, 21);
_bit2(D, 0, 21);
_bit2(C, 8, 21);
DH();
nop32();
CH();
_delay_us(DELAY);
}
inline void writeByte(uint8_t D, uint8_t C)
{
_bit(C, 7, 46);
_bit(D, 7, 8);
_bit(C, 6, 18);
_bit(D, 6, 38);
_bit(D, 5, 15);
_bit(C, 5, 21);
_bit(D, 4, 21);
_bit(C, 4, 21);
_bit(D, 3, 21);
_bit(C, 3, 21);
_bit(D, 2, 21);
_bit(C, 2, 21);
_bit(D, 1, 21);
_bit(C, 1, 21);
DH();
nop32();
CH();
}
inline void writeByteCD(uint8_t C, uint8_t D)
{
writeByte(D, C);
_delay_us(DELAY);
}
// volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 68, 20, 34, 16, 18, 0xFF }; // * 100.0ns<
// volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W1 };
// volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 16, 16, 16, 37, 35, 16, 18, 0xFF }; // * 100.0 ns<
// volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, BH, DL, CL, CH, CL, DH, CH, W1 };
// volatile uint8_t times[] = { 32, 22, 26, 66, 36, 14, 34, 18, 16, 0xFF, 32, 24, 24, 36, 34, 18, 70, 18, 16, 0xFF }; // * 100.0 ns<
// volatile uint8_t cmds [] = { CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W0, CL, DL, DH, DL, DH, DL, CH, CL, DH, CH, W1 };