Led Sign Board Problem (libraries?)

Hi, im new to arduino, i have a Led sign board like the one i found on 2010 forum http://forum.arduino.cc/index.php?topic=18875.0

i followed the code the user used and stated to be working, but im stuck with 2 particular errors
one is declaring the font,
“FLASH_TABLE(unsigned char, font_8_7, 7,” <<
error: ‘font_8_7’ has not been declared
font_8_7:5: error: expected identifier before numeric constant
font_8_7:5: error: expected ‘,’ or ‘…’ before numeric constant
font_8_7:958: error: expected constructor, destructor, or type conversion at end of input

the other , i believe is related to libraries version
“Serial.println(boodschap.version());” <<
error: In function ‘void setup()’:
led_array:55: error: ‘class String’ has no member named ‘version’

can anyone help me?

one other i got
“actie.append(inChar);” <<
error : ‘class String’ has no member named ‘append’

I guess you mean the code from Reply #4 in the other Thread?

Have you also got the code from Reply #5 - I'm not quite sure where is goes but it does seem to define the thing that is causing your problem.

Can you post your full code here?

...R

#include <WString.h>
#include <Flash.h>
#include <LedBoard.h>
#include <font_8_7.h>
#define REFRESH  10
#define ROWS     7
#define COLUMNS  16

 



int updatespeed = 100;
void initialize(void);
void activaterow(int, int);

int ledRows[] =  {2,3,4,5,6,7,8};
int clockPin = 13;
int clearPin = 11;
int dataPin = 12;

unsigned long timer;
unsigned long timer2=0;
unsigned long timer3=0;
unsigned long timer4=0;

int changed;
int processed[ROWS];
boolean rowdata[ROWS][COLUMNS];


int g;
int h;

int maxLength = 32;
String boodschap = String(maxLength);
String actie = String(1);
//------------------------------------------------------------------------------------------------------------------------


void setup()   {            

  // initialize the digital pin as an output:
  for (int i= 0; i < ROWS; i++)
  {
    pinMode(ledRows[i], OUTPUT);
    digitalWrite(ledRows[i], LOW);
    processed[i] = 0;
  }  
  pinMode(clockPin, OUTPUT);
  pinMode(clearPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  randomSeed(analogRead(3));


  Serial.begin(115200);
  Serial.print("String Library version: ");
Serial.println(boodschap.version()); 

  initialize();
}

//------------------------------------------------------------------------------------------------------------------------


void loop()
{
  timer = micros();
  if ((timer - timer2)  > REFRESH)
  {
      timer2 = timer;
      changed++;
      if (changed == ROWS)
        changed = 0;
      processed[changed] = 1;
  }

  timer3 = millis();
  if ((timer3 - timer4) > updatespeed)
  {
    draw_board();
    timer4 = timer3;
  }

  for (int k=0; k < ROWS; k++)
  {
      if (processed[k] == 1)// && switcher ==1)
      {
        processed[k] == 0;
        activaterow(k);              
      }
  }
}

//------------------------------------------------------------------------------------------------------------------------

void activaterow(int rownumber)
{
  for (int i=0; i < ROWS; i++)
    digitalWrite(ledRows[i], LOW);  
  digitalWrite(clearPin , LOW);  

  digitalWrite(clearPin , HIGH);
  for (int j=COLUMNS - 1; j > -1; --j)
  {
    digitalWrite(clockPin, LOW);
    if (rowdata[rownumber][j] == 1 )
      digitalWrite(dataPin, HIGH);
    else
      digitalWrite(dataPin, LOW);      
    digitalWrite(clockPin, HIGH);
  }
  digitalWrite(ledRows[rownumber], HIGH);
}

//------------------------------------------------------------------------------------------------------------------------

void initialize()
{
    
  for (int i = 0; i < ROWS; i++)
    for (int j = 0; j < COLUMNS; j++)
    {
      rowdata[i][j] = 0;
    }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (actie.length() < 1) {
        actie.append(inChar);
        Serial.println(actie);
    }
  }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (boodschap.length() < maxLength) {
        boodschap.append(inChar);
        Serial.println(boodschap);
    }
  }
  while (boodschap.length() < COLUMNS / 8)
  {
    boodschap.append(' ');
  }
}

//------------------------------------------------------------------------------------------------------------------------

void draw_board()
{
  switch (actie.charAt(0))
  {
    case 'u' :
      scroll_up();
      break;
    case 'd' :
      scroll_down();
      break;
    case 'r' :
      scroll_right();
      break;
    case 'l' :
      scroll_left();
      break;
  }
}

//------------------------------------------------------------------------------------------------------------------------
// ScrollFunctions
//------------------------------------------------------------------------------------------------------------------------

void scroll_down()
{
  static int row = 0;
  
  for (int i = ROWS -1; i > 0; i--)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i-1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[0][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[0][column] = 0;
    }    
  }
  
  row++;
  if (row > ROWS + 7) row = 0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_up()
{
  static int row = ROWS + 7;
  
  for (int i = 0; i < ROWS-1; i++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i+1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[ROWS-1][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[ROWS-1][column] = 0;
    }    
  }
  
  row--;
  if (row < 0) row = ROWS + 7;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_left()
{
  static int x = 0;
  static int y = 0;
  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[row][column] = rowdata[row][column+1];
    }
    rowdata[row][COLUMNS-1] = bitRead(font_8_7[boodschap.charAt(y)-32][row],7-x);
  }
  x++;
  if (x == 8)
  {  
    x = 0;
    y++;
  }
  if (y == boodschap.length()) y=0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_right()
{
  static int x = 0;
  static int y = -1;

  if (y == -1) y = boodschap.length()-1;  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = COLUMNS-2; column >= 0; column--)
    {
      rowdata[row][column+1] = rowdata[row][column];
    }
    rowdata[row][0] = bitRead(font_8_7[boodschap.charAt(y)-32][row], x);    
  }
  x++;
  if (x == 8)
  {  
    x = 0;
    y--;
  }
}

This

#include <font_8_7.h>

might need to be this

#include "font_8_7.h"

It depends where the file is located.

…R

thanks for the help, that part is now solved :slight_smile:
But now Stills the error related to Font_8_7.h itself

#include <WProgram.h>
#include <avr/pgmspace.h>


FLASH_TABLE(unsigned char, font_8_7, 7,
{
// spatie
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
},
//....... ..... 
{

// z
      B00000000,
      B00000000,      
      B01111100,
      B00000100,
      B00011000,
      B00100000,
      B01111100,
},
{
// {
      B00110000,
      B01000000,
      B01000000,
      B10000000,
      B01000000,
      B01000000,
      B00110000,
},
{
// |
      B00010000,
      B00010000,
      B00010000,
      B00010000,
      B00010000,
      B00010000,
      B00010000,
},
{
// }
      B00011000,
      B00000100,
      B00000100,
      B00000010,
      B00000100,
      B00000100,
      B00011000,
},
{
// "
      B00001010,
      B00010100,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
}
);
In file included from led_sign.ino:6:
font_8_7.h:5: error: 'font_8_7' has not been declared
font_8_7.h:5: error: expected identifier before numeric constant
font_8_7.h:5: error: expected ',' or '...' before numeric constant
font_8_7.h:958: error: expected constructor, destructor, or type conversion before ';' token
led_sign.ino: In function 'void setup()':
led_sign:60: error: 'class String' has no member named 'version'
led_sign.ino: In function 'void scroll_down()':
led_sign:200: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_up()':
led_sign:236: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_left()':
led_sign:265: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_right()':
led_sign:290: error: 'font_8_7' was not declared in this scope

I have no idea what the function FLASH_TABLE() does - or even if it is a function.

I note #include <WProgram.h>

I wonder should it be changed to #include <Arduino.h>

…R

I try to compile this sketch with some corrections:

#include <WString.h>
#include <Flash.h>
#include <LedBoard.h>
#include "font_8_7.h"

#define REFRESH  10
#define ROWS     7
#define COLUMNS  16



int updatespeed = 100;
void initialize(void);
void activaterow(int, int);

int ledRows[] =  {2,3,4,5,6,7,8}; 
int clockPin = 13;
int clearPin = 11;
int dataPin = 12;

unsigned long timer;
unsigned long timer2=0;
unsigned long timer3=0;
unsigned long timer4=0;

int changed;
int processed[ROWS];
boolean rowdata[ROWS][COLUMNS];


int g;
int h;

int maxLength = 32;
String boodschap = String(maxLength);
String actie = String(1);
//------------------------------------------------------------------------------------------------------------------------

void setup()   {             

  // initialize the digital pin as an output:
  for (int i= 0; i < ROWS; i++)
  {
    pinMode(ledRows[i], OUTPUT);
    digitalWrite(ledRows[i], LOW);
    processed[i] = 0;
  }  
  pinMode(clockPin, OUTPUT);
  pinMode(clearPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  randomSeed(analogRead(3));


  Serial.begin(115200);
  Serial.print("String Library version: ");
  Serial.println(boodschap.version());  

  initialize();
}

//------------------------------------------------------------------------------------------------------------------------

void loop()
{
  timer = micros();
  if ((timer - timer2)  > REFRESH)
  {
      timer2 = timer;
      changed++;
      if (changed == ROWS)
        changed = 0;
      processed[changed] = 1;
  }

  timer3 = millis();
  if ((timer3 - timer4) > updatespeed)
  {
    draw_board();
    timer4 = timer3;
  }

  for (int k=0; k < ROWS; k++)
  {
      if (processed[k] == 1)// && switcher ==1)
      {
        processed[k] == 0;
        activaterow(k);               
      }
  }
}

//------------------------------------------------------------------------------------------------------------------------

void activaterow(int rownumber)
{
  for (int i=0; i < ROWS; i++)
    digitalWrite(ledRows[i], LOW);  
  digitalWrite(clearPin , LOW);  

  digitalWrite(clearPin , HIGH);
  for (int j=COLUMNS - 1; j > -1; --j)
  {
    digitalWrite(clockPin, LOW);
    if (rowdata[rownumber][j] == 1 )
      digitalWrite(dataPin, HIGH);
    else
      digitalWrite(dataPin, LOW);      
    digitalWrite(clockPin, HIGH);
  }
  digitalWrite(ledRows[rownumber], HIGH);
}

//------------------------------------------------------------------------------------------------------------------------

void initialize()
{
    
  for (int i = 0; i < ROWS; i++)
    for (int j = 0; j < COLUMNS; j++)
    {
      rowdata[i][j] = 0;
    }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (actie.length() < 1) {
        actie.append(inChar);
        Serial.println(actie);
    } 
  }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (boodschap.length() < maxLength) {
        boodschap.append(inChar);
        Serial.println(boodschap);
    } 
  }
  while (boodschap.length() < COLUMNS / 8)
  {
    boodschap.append(' ');
  }
}

//------------------------------------------------------------------------------------------------------------------------

void draw_board()
{
  switch (actie.charAt(0))
  {
    case 'u' :
      scroll_up();
      break;
    case 'd' :
      scroll_down();
      break;
    case 'r' :
      scroll_right();
      break;
    case 'l' :
      scroll_left();
      break;
  }
}

//------------------------------------------------------------------------------------------------------------------------
// ScrollFunctions
//------------------------------------------------------------------------------------------------------------------------

void scroll_down()
{
  static int row = 0;
  
  for (int i = ROWS -1; i > 0; i--)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i-1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[0][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[0][column] = 0;
    }    
  }
  
  row++;
  if (row > ROWS + 7) row = 0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_up()
{
  static int row = ROWS + 7;
  
  for (int i = 0; i < ROWS-1; i++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i+1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[ROWS-1][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[ROWS-1][column] = 0;
    }    
  }
  
  row--;
  if (row < 0) row = ROWS + 7;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_left()
{
  static int x = 0;
  static int y = 0;
  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[row][column] = rowdata[row][column+1];
    }
    rowdata[row][COLUMNS-1] = bitRead(font_8_7[boodschap.charAt(y)-32][row],7-x);
  }
  x++;
  if (x == 8) 
  {  
    x = 0;
    y++;
  }
  if (y == boodschap.length()) y=0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_right()
{
  static int x = 0;
  static int y = -1;

  if (y == -1) y = boodschap.length()-1;  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = COLUMNS-2; column >= 0; column--)
    {
      rowdata[row][column+1] = rowdata[row][column];
    }
    rowdata[row][0] = bitRead(font_8_7[boodschap.charAt(y)-32][row], x);    
  }
  x++;
  if (x == 8) 
  {  
    x = 0;
    y--;
  }
}

And i found this errors:

Matrix.ino: In function 'void setup()':
Matrix:56: error: 'class String' has no member named 'version'
Matrix.ino: In function 'void initialize()':
Matrix:131: error: 'class String' has no member named 'append'
Matrix:143: error: 'class String' has no member named 'append'
Matrix:149: error: 'class String' has no member named 'append'

Anyone can help to understand this errors?
Thank you

I forget to say, in the font_8_7.h i put #include <Arduino.h> on the head.

#include <WProgram.h>
#include <Arduino.h>
#include <avr/pgmspace.h>

FLASH_TABLE(unsigned char, font_8_7, 7,
{
// spatie
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
},
{
// !
      B00010000,
      B00010000,
      B00010000,
      B00010000,
      B00010000,
      B00000000,
      B00010000,
},
{
// "
      B00101000,
      B00101000,
      B00101000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
},
{
// #
      B00101000,
      B00101000,
      B11111110,
      B00101000,
      B11111110,
      B00101000,
      B00101000,
},
{

Matrix.ino: In function 'void setup()': Matrix:56: error: 'class String' has no member named 'version'

So, why are you trying to call it?

  Serial.println(boodschap.version());

Matrix:131: error: 'class String' has no member named 'append'

So, why are you trying to call it?

        actie.append(inChar);

Go to the String reference page, and look at what methods it DOES have. Don't try to call methods it doesn't have.

Serial.print("String Library version: ");
  Serial.println(boodschap.version());

.version .append

this 2 errors are related to Wstring library versions, or project library location

well… ".append " errors were related to library versions and location and are now solved,
“.version” error occours because it is not present on library, and , anyway it is useless…

still one error related to font declaration on the main code.
Flash_Table is The older way than PROGMEM i guess xD

#include "WString.h"
#include <Flash.h>
#include <LedBoard.h>
#include "font_8_7.h"


#define REFRESH  10
#define ROWS     7
#define COLUMNS  16



int updatespeed = 100;
void initialize(void);
void activaterow(int, int);

int ledRows[] =  {2,3,4,5,6,7,8}; 
int clockPin = 13;
int clearPin = 11;
int dataPin = 12;


unsigned long timer;
unsigned long timer2=0;
unsigned long timer3=0;
unsigned long timer4=0;

int changed;
int processed[ROWS];
boolean rowdata[ROWS][COLUMNS];


int g;
int h;

int maxLength = 32;
String boodschap = String(maxLength);
String actie = String(1);
//------------------------------------------------------------------------------------------------------------------------

void setup()   {             

  // initialize the digital pin as an output:
  for (int i= 0; i < ROWS; i++)
  {
    pinMode(ledRows[i], OUTPUT);
    digitalWrite(ledRows[i], LOW);
    processed[i] = 0;
  }  
  pinMode(clockPin, OUTPUT);
  pinMode(clearPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  randomSeed(analogRead(3));


  Serial.begin(115200);
  Serial.print("String Library version: ");
  

  initialize();
}

//------------------------------------------------------------------------------------------------------------------------

void loop()
{
  timer = micros();
  if ((timer - timer2)  > REFRESH)
  {
      timer2 = timer;
      changed++;
      if (changed == ROWS)
        changed = 0;
      processed[changed] = 1;
  }

  timer3 = millis();
  if ((timer3 - timer4) > updatespeed)
  {
    draw_board();
    timer4 = timer3;
  }

  for (int k=0; k < ROWS; k++)
  {
      if (processed[k] == 1)// && switcher ==1)
      {
        processed[k] == 0;
        activaterow(k);               
      }
  }
}

//------------------------------------------------------------------------------------------------------------------------

void activaterow(int rownumber)
{
  for (int i=0; i < ROWS; i++)
    digitalWrite(ledRows[i], LOW);  
  digitalWrite(clearPin , LOW);  

  digitalWrite(clearPin , HIGH);
  for (int j=COLUMNS - 1; j > -1; --j)
  {
    digitalWrite(clockPin, LOW);
    if (rowdata[rownumber][j] == 1 )
      digitalWrite(dataPin, HIGH);
    else
      digitalWrite(dataPin, LOW);      
    digitalWrite(clockPin, HIGH);
  }
  digitalWrite(ledRows[rownumber], HIGH);
}

//------------------------------------------------------------------------------------------------------------------------

void initialize()
{
    
  for (int i = 0; i < ROWS; i++)
    for (int j = 0; j < COLUMNS; j++)
    {
      rowdata[i][j] = 0;
    }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (actie.length() < 1) {
        actie.append(inChar);
        Serial.println(actie);
    } 
  }

  while(Serial.available() <= 0) ;
  while (Serial.available() > 0) {
    // read the incoming data as a char:
    char inChar = Serial.read();
    // if you're not at the end of the string, append
    // the incoming character:
    if (boodschap.length() < maxLength) {
        boodschap.append(inChar);
        Serial.println(boodschap);
    } 
  }
  while (boodschap.length() < COLUMNS / 8)
  {
    boodschap.append(' ');
  }
}

//------------------------------------------------------------------------------------------------------------------------

void draw_board()
{
  switch (actie.charAt(0))
  {
    case 'u' :
      scroll_up();
      break;
    case 'd' :
      scroll_down();
      break;
    case 'r' :
      scroll_right();
      break;
    case 'l' :
      scroll_left();
      break;
  }
}

//------------------------------------------------------------------------------------------------------------------------
// ScrollFunctions
//------------------------------------------------------------------------------------------------------------------------

void scroll_down()
{
  static int row = 0;
  
  for (int i = ROWS -1; i > 0; i--)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i-1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[0][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[0][column] = 0;
    }    
  }
  
  row++;
  if (row > ROWS + 7) row = 0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_up()
{
  static int row = ROWS + 7;
  
  for (int i = 0; i < ROWS-1; i++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
       rowdata[i][column] = rowdata[i+1][column];
    }
  }
  
  if (row < ROWS)
  {
    for (int column = 0; column < COLUMNS-1; column = column + 8)
    {
      for (int x = 0; x < 8; x++)
      {
       rowdata[ROWS-1][column+x] = bitRead(font_8_7[boodschap.charAt(column/8)-32][(ROWS-1) - row], 7-x);
      }
    }
  }
  else
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[ROWS-1][column] = 0;
    }    
  }
  
  row--;
  if (row < 0) row = ROWS + 7;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_left()
{
  static int x = 0;
  static int y = 0;
  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = 0; column < COLUMNS-1; column++)
    {
      rowdata[row][column] = rowdata[row][column+1];
    }
    rowdata[row][COLUMNS-1] = bitRead(font_8_7[boodschap.charAt(y)-32][row],7-x);
  }
  x++;
  if (x == 8) 
  {  
    x = 0;
    y++;
  }
  if (y == boodschap.length()) y=0;
}

//------------------------------------------------------------------------------------------------------------------------

void scroll_right()
{
  static int x = 0;
  static int y = -1;

  if (y == -1) y = boodschap.length()-1;  
  for (int row = 0; row < ROWS; row++)
  {
    for (int column = COLUMNS-2; column >= 0; column--)
    {
      rowdata[row][column+1] = rowdata[row][column];
    }
    rowdata[row][0] = bitRead(font_8_7[boodschap.charAt(y)-32][row], x);    
  }
  x++;
  if (x == 8) 
  {  
    x = 0;
    y--;
  }
}
#include <Arduino.h>
#include <avr/pgmspace.h>



FLASH_TABLE (unsigned char, font_8_7, 7,
{
// spatie
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
},
{
// G
      B01111100,
      B10000010,
      B10000000,
      B10001110,
      B10000010,
      B10000010,
      B01111100,
},
{
// H
      B10000010,
      B10000010,
      B10000010,
      B11111110,
      B10000010,
      B10000010,
      B10000010,
},
{
// "
      B00001010,
      B00010100,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
      B00000000,
}
In file included from led_sign.ino:4:
font_8_7.h:6: error: 'font_8_7' has not been declared
font_8_7.h:6: error: expected identifier before numeric constant
font_8_7.h:6: error: expected ',' or '...' before numeric constant
led_sign:14: error: expected `)' before ';' token
led_sign:14: error: expected constructor, destructor, or type conversion before ';' token
led_sign.ino: In function 'void scroll_down()':
led_sign:198: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_up()':
led_sign:234: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_left()':
led_sign:263: error: 'font_8_7' was not declared in this scope
led_sign.ino: In function 'void scroll_right()':
led_sign:288: error: 'font_8_7' was not declared in this scope

I get the same errors! :( Who can help?

solved, the append error can be solved by replacing the "append" to "concat"