Hi,
recently I made a 24x8 Led Matrix and now I came up with an idea to add a HC-05 bluetooth module to it so I could change text on matrix from my android phone.
Now, when I send a word from bluetooth terminal on my phone it goes on matrix pefect but, when I send another word , my matrix shows both words and when i send third word it shows all three words, and so on...
Can anybody help me how to modify the code so that the matrix shows just a word I send, not the previous one too !?
(Sorry for my bad English)
Here`s the code:
#include <SoftwareSerial.h>
int latchPin = 10;
int clockPin = 13;
int dataPin = 11;
int clock = 9;
int Reset = 8;
int latchPinPORTB = latchPin - 8;
int clockPinPORTB = clockPin - 8;
int dataPinPORTB = dataPin - 8;
int i = 0;
long scrolling_word[8];
int array_turn=0;
String Message;
int Sspeed=13;
int wc; //Character Count
byte your_text[100][8];
char junk;
void setup()
{
Serial.begin(9600);
pinMode(dataPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(latchPin,OUTPUT);
pinMode(clock,OUTPUT);
pinMode(Reset,OUTPUT);
digitalWrite(Reset,HIGH);
digitalWrite(Reset,LOW);
setupSPI();
}
//------------------------------------------------------------------------------------------------------------------------------------------
void display_word(int loops,byte word_print[][8],int num_patterns,int delay_langth){// this function displays your symbols
i = 0;// resets the counter fot the 4017
for(int g=0;g<8;g++)//resets the the long int where your word goes
scrolling_word[g] = 0;
for(int x=0;x<num_patterns;x++){//main loop, goes over your symbols
for(int r=0;r<8;r++)//puts the buildes the first symbol
scrolling_word[r] |= word_print[x][r];
for (int z=0;z<8;z++){//the sctolling action
for(int p=0;p<8;p++)
scrolling_word[p] = scrolling_word[p] << 1;
// end of the scrolling funcion
for(int t=0;t<delay_langth;t++){// delay function, it just loops over the same display
for(int y=0;y<8;y++){// scaning the display
if(i == 8){// counting up to 6 with the 4017
digitalWrite(Reset,HIGH);
digitalWrite(Reset,LOW);
i = 0;
}
latchOff();
spi_transfer(make_word(0x01000000,y));// sending the data
spi_transfer(make_word(0x00010000,y));
spi_transfer(make_word(0x00000100,y));
latchOn();
delayMicroseconds(800);//waiting a bit
latchOff();
spi_transfer(0);// clearing the data
spi_transfer(0);
spi_transfer(0);
latchOn();
digitalWrite(clock,HIGH);//counting up with the 4017
digitalWrite(clock,LOW);
i++;
}
}
}
}
finish_scroll(delay_langth);
}
//------------------------------------------------------------------------------------------------------------------------------------------
void finish_scroll(int delay_scroll){// this function is the same as the funcion above, it just finishing scrolling
for (int n=0;n<24;n++){
for(int h=0;h<8;h++)
scrolling_word[h] = scrolling_word[h] << 1;
for(int w=0;w<delay_scroll;w++){
for(int k=0;k<8;k++){
if(i == 8){
digitalWrite(Reset,HIGH);
digitalWrite(Reset,LOW);
i = 0;
}
latchOff();
spi_transfer(make_word(0x01000000,k));
spi_transfer(make_word(0x00010000,k));
spi_transfer(make_word(0x00000100,k));
latchOn();
delayMicroseconds(800);
latchOff();
spi_transfer(0);
spi_transfer(0);
spi_transfer(0);
latchOn();
digitalWrite(clock,HIGH);
digitalWrite(clock,LOW);
i++;
}
}
}
}
//------------------------------------------------------------------------------------------------------------------------------------------
byte make_word (long posistion,byte turn){
byte dummy_word = 0;
for(int q=0;q<8;q++){
if(scrolling_word[turn] & (posistion<<q))
dummy_word |= 0x01<<q;
}
return dummy_word;
}
//------------------------------------------------------------------------------------------------------------------------------------------
void loop() {
if(Serial.available()>0)
{
while(Serial.available()>0)
{
char inChar = (char)Serial.read(); //read the input
Message += inChar; //make a string of the characters coming on serial
}
Serial.println(Message);
while (Serial.available() > 0)
{ junk = Serial.read() ; } // clear the serial buffer
}
display_word(1,your_text,wc,Sspeed);// calls for the display_pattern function and says that int loop = 15(if you do more loop the pattern whould scrole slower).
updateWord (Message);
}
//------------------------------------------------------------------------------------------------------------------------------------------
void latchOn(){
bitSet(PORTB,latchPinPORTB);
}
void latchOff(){
bitClear(PORTB,latchPinPORTB);
}
void setupSPI(){
byte clr;
SPCR |= ( (1<<SPE) | (1<<MSTR) ); // enable SPI as master
//SPCR |= ( (1<<SPR1) | (1<<SPR0) ); // 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
delay(10);
}
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
}
void updateWord(String tMessage)
{
int ii;
char tempChar;
wc=tMessage.length();
for (ii=0; ii<tMessage.length();ii++)
{
tempChar=tMessage.charAt(ii);
//
switch(tempChar)
{
case 'A':
your_text[ii][0]=B01110000;
your_text[ii][1]=B10001000;
your_text[ii][2]=B10001000;
your_text[ii][3]=B11111000;
your_text[ii][4]=B10001000;
your_text[ii][5]=B10001000;
your_text[ii][6]=B10001000;
your_text[ii][7]=B10001000;
break;
case 'B':
your_text[ii][0]=B11110000;
your_text[ii][1]=B10001000;
your_text[ii][2]=B10001000;
your_text[ii][3]=B11110000;
your_text[ii][4]=B10001000;
your_text[ii][5]=B10001000;
your_text[ii][6]=B10001000;
your_text[ii][7]=B11110000;
break; ................................
...................................
}
}
}