I am trying to figure out how to create scrolling text across my 34x16 bicolor led display but cant seem to figure it out.
Here is the code I use to display an image across the entire display. How can I adapt to this. Most code i find is for single color small displays but for some reason trying to adapt this to my program things just get messed up.
Just a solid idea would be appreciated.
#define _spi_latch 10 // Latch
#define _spi_clock 13 // Clock
#define _spi_data 11 // Data
#define _control 5 //Control for ground
int _delay = 0;
void setup() {
pinMode(_spi_clock, OUTPUT);
pinMode(_spi_latch, OUTPUT);
pinMode(_spi_data, OUTPUT);
pinMode(_control, OUTPUT);
digitalWrite(_spi_latch, HIGH);
digitalWrite(_spi_data, HIGH);
digitalWrite(_spi_clock, HIGH);
digitalWrite(_control, LOW);
setup_hardware_spi();
delay(10);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
digitalWrite(_spi_latch, HIGH);
delay(1000);
digitalWrite(_control, HIGH);
}
void loop() {
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000001);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000010);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000100);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00001000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00010000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00100000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B01000000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B10000000);
spi_transfer(B00000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00000001);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00000010);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00000100);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00010000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B00100000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B01000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
digitalWrite(_spi_latch, LOW);
//GROUND
spi_transfer(B00000000);
spi_transfer(B10000000);
//RED
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
spi_transfer(B00000000);
//BLUE
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
spi_transfer(B11111111);
digitalWrite(_spi_latch, HIGH);
delay(_delay);
}
void setup_hardware_spi(void) {
byte clr;
// spi prescaler:
// SPI2X SPR1 SPR0
// 0 0 0 fosc/4
// 0 0 1 fosc/16
// 0 1 0 fosc/64
// 0 1 1 fosc/128
// 1 0 0 fosc/2
// 1 0 1 fosc/8
// 1 1 0 fosc/32
// 1 1 1 fosc/64
SPCR |= ( (1<<SPE) | (1<<MSTR) ); // enable SPI as master
//SPCR |= ( (1<<SPR1) ); // set prescaler bits
SPCR &= ~ ( (1<<SPR1) | (1<<SPR0) ); // clear prescaler bits
clr=SPSR; // clear SPI status reg
clr=SPDR; // clear SPI data reg
SPSR |= (1<<SPI2X); // set prescaler bits
//SPSR &= ~(1<<SPI2X); // clear prescaler bits
}
byte spi_transfer(byte data) {
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
return SPDR; // return the received byte. (we don't need that here)
}
Also any idea how to organize a pattern file in order to be able to easily switch images?
Thanks