#define DATA 4
#define LATCH 7
#define CLOCK 8
byte framebuffer[8];
void setup() {
DDRB |= B00111111;
DDRD |= B11111100;
}
void loop() {
ApagaTudo();
Rasterizar();
delay(1000);
framebuffer[7] = 3;
framebuffer[6] = 3;
framebuffer[5] = 3;
Rasterizar();
delay(1000);
framebuffer[4] = 4;
framebuffer[3] = 4;
Rasterizar();
delay(1000);
framebuffer[2] = 1;
framebuffer[1] = 1;
framebuffer[0] = 1;
Rasterizar();
delay(3000);
}
void Rasterizar(){
byte cor;
digitalWrite(LATCH, LOW);
for (int i = 7; i >= 0; i--) {
cor = framebuffer[i];
switch(cor){
case 0:
EnviaApagado();
break;
case 1:
EnviaVermelho();
break;
case 2:
EnviaVerde();
break;
case 3:
EnviaAzul();
break;
case 4:
EnviaAmarelo();
break;
}
}
digitalWrite(LATCH, HIGH);
digitalWrite(LATCH, LOW);
}
void ApagaTudo(){
for (int i = 7; i >= 0; i--) {
framebuffer[i] = 0;
}
}
void EnviaApagado(){
digitalWrite(CLOCK, LOW);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
}
void EnviaVermelho(){
digitalWrite(CLOCK, LOW);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
}
void EnviaVerde(){
digitalWrite(CLOCK, LOW);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
}
void EnviaAzul(){
digitalWrite(CLOCK, LOW);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
}
void EnviaAmarelo(){
digitalWrite(CLOCK, LOW);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, HIGH);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
digitalWrite(DATA, LOW);
digitalWrite(CLOCK, LOW);
digitalWrite(CLOCK, HIGH);
}