Why does this code not always work

My code looks like this:

#include <TVout.h>
#include <fontALL.h>

#define CLK 3
#define DAT 6

TVout TV;

const int BUF_SIZE = 11;
bool buffer[BUF_SIZE] = {0};
int pos = 0;
bool ignoreNext = false;
unsigned long lastRead = 0;
String polecenia="";

void setup() 
{
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DAT, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(7, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(CLK),readData , FALLING);
  TV.begin(NTSC,100,86);
  TV.select_font(font6x8);

  for(int i=0; i < 14; i++)
  {
    delay(100);
    TV.print("-");
  }
TV.clear_screen();
TV.println();TV.println("z");TV.println();TV.print(">");
}

void loop() {
delay(5);
  if(pos != 0 && millis() - lastRead > 1000) {
    pos = 0;
  }
  if(pos == 11) {
    pos = 0;
    int keyCode = getKeyCode(buffer);
    if(ignoreNext) {
      ignoreNext = false;
      return;
    }
    if(keyCode == 0xF0) {
      ignoreNext = true;
      return;
    }
    if(keyCode==0x76)//ESC
    {TV.clear_screen(); polecenia=""; TV.print(">");}
    else if(keyCode==0x5A)//ENTER
    {
      if(polecenia=="HELP")
      {
        TV.clear_screen();
        TV.println();TV.println("-------------");TV.println();TV.print("works");TV.println();TV.println("-------------");
      }
              if(polecenia == "PIN")
      {
       TV.clear_screen();
       TV.println();TV.println("test 1");
      }
                if(polecenia == "PIN1")
      {
       digitalWrite(2, HIGH);
      }
       else if(polecenia == "INFO")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
        else if(polecenia == "PIN 2")
      {
       digitalWrite(12, HIGH);
      }
            else if(polecenia == "PIN 3")
      {
       digitalWrite(7, HIGH);
      }
      else
      {TV.println(); TV.println("!");}

      TV.println();
      TV.print(">");
      polecenia="";
    }
    else
    {
    Serial.print(keyCode);
    TV.print(getKeyChar(keyCode)); polecenia=polecenia+getKeyChar(keyCode);
    }
  }
}

void readData() {
  lastRead = millis();
  buffer[pos++ % 11] = digitalRead(DAT);
}

int getKeyCode(bool * buf) {
  bool parity = 1;
  int result = 0;
  if(buf[0] != 0) return -1;
  if(buf[10] != 1) return -2;
  for(int x = 0; x < 8; x++) {
    result |= buf[1+x] << x;
    if(buf[1+x]) parity = !parity;
  }

  if(buf[9] != parity) return -3;
  return result;
}

char getKeyChar(int keyCode) {
  switch(keyCode) {
    case 0x1C: return 'A';
    case 0x32: return 'B';
    case 0x21: return 'C';
    case 0x23: return 'D';
    case 0x24: return 'E';
    case 0x2B: return 'F';
    case 0x34: return 'G';
    case 0x33: return 'H';
    case 0x43: return 'I';
    case 0x3B: return 'J';
    case 0x42: return 'K';
    case 0x4B: return 'L';
    case 0x3A: return 'M';
    case 0x31: return 'N';
    case 0x44: return 'O';
    case 0x4D: return 'P';
    case 0x15: return 'Q';
    case 0x2D: return 'R';
    case 0x1B: return 'S';
    case 0x2C: return 'T';
    case 0x3C: return 'U';
    case 0x2A: return 'V';
    case 0x1D: return 'W';
    case 0x22: return 'X';
    case 0x35: return 'Y';
    case 0x1A: return 'Z';
    case 0x45: return '0';
    case 0x16: return '1';
    case 0x1E: return '2';
    case 0x26: return '3';
    case 0x25: return '4';
    case 0x2E: return '5';
    case 0x36: return '6';
    case 0x3D: return '7';
    case 0x3E: return '8';
    case 0x46: return '9';
    case 0x5A: return '\n';
    case 0x29: return ' ';
  }

  return '\0';
}

However, I noticed that if there are 4 more if and if here the program works, but if I add more then the added conditions do not work, someone knows why, this is what the broken code looks like:

#include <TVout.h>
#include <fontALL.h>

#define CLK 3
#define DAT 6

TVout TV;

const int BUF_SIZE = 11;
bool buffer[BUF_SIZE] = {0};
int pos = 0;
bool ignoreNext = false;
unsigned long lastRead = 0;
String polecenia="";

void setup() 
{
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DAT, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(7, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(CLK),readData , FALLING);
  TV.begin(NTSC,100,86);
  TV.select_font(font6x8);

  for(int i=0; i < 14; i++)
  {
    delay(100);
    TV.print("-");
  }
TV.clear_screen();
TV.println();TV.println("z");TV.println();TV.print(">");
}

void loop() {
delay(5);
  if(pos != 0 && millis() - lastRead > 1000) {
    pos = 0;
  }
  if(pos == 11) {
    pos = 0;
    int keyCode = getKeyCode(buffer);
    if(ignoreNext) {
      ignoreNext = false;
      return;
    }
    if(keyCode == 0xF0) {
      ignoreNext = true;
      return;
    }
    if(keyCode==0x76)//ESC
    {TV.clear_screen(); polecenia=""; TV.print(">");}
    else if(keyCode==0x5A)//ENTER
    {
      if(polecenia=="HELP")
      {
        TV.clear_screen();
        TV.println();TV.println("-------------");TV.println();TV.print("works");TV.println();TV.println("-------------");
      }
              if(polecenia == "PIN")
      {
       TV.clear_screen();
       TV.println();TV.println("test 1");
      }
                if(polecenia == "PIN")
      {
       TV.clear_screen();
       TV.println();TV.println("test 1");
      }
                if(polecenia == "Pwe")
      {
       TV.clear_screen();
       TV.println();TV.println("et");
      }
                if(polecenia == "ew")
      {
       TV.clear_screen();
       TV.println();TV.println("test 1");
      }
                if(polecenia == "Pw")
      {
       TV.clear_screen();
       TV.println();TV.println("test 1");
      }
                if(polecenia == "PIN1")
      {
       digitalWrite(2, HIGH);
      }
       else if(polecenia == "INFO")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
         else if(polecenia == "s")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
         else if(polecenia == "d")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
         else if(polecenia == "f")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
         else if(polecenia == "g")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("test 2");TV.println();TV.println("-------------");
      }
        else if(polecenia == "PIN 2")
      {
       digitalWrite(12, HIGH);
      }
            else if(polecenia == "PIN 3")
      {
       digitalWrite(7, HIGH);
      }
      else
      {TV.println(); TV.println("!");}

      TV.println();
      TV.print(">");
      polecenia="";
    }
    else
    {
    Serial.print(keyCode);
    TV.print(getKeyChar(keyCode)); polecenia=polecenia+getKeyChar(keyCode);
    }
  }
}

void readData() {
  lastRead = millis();
  buffer[pos++ % 11] = digitalRead(DAT);
}

int getKeyCode(bool * buf) {
  bool parity = 1;
  int result = 0;
  if(buf[0] != 0) return -1;
  if(buf[10] != 1) return -2;
  for(int x = 0; x < 8; x++) {
    result |= buf[1+x] << x;
    if(buf[1+x]) parity = !parity;
  }

  if(buf[9] != parity) return -3;
  return result;
}

char getKeyChar(int keyCode) {
  switch(keyCode) {
    case 0x1C: return 'A';
    case 0x32: return 'B';
    case 0x21: return 'C';
    case 0x23: return 'D';
    case 0x24: return 'E';
    case 0x2B: return 'F';
    case 0x34: return 'G';
    case 0x33: return 'H';
    case 0x43: return 'I';
    case 0x3B: return 'J';
    case 0x42: return 'K';
    case 0x4B: return 'L';
    case 0x3A: return 'M';
    case 0x31: return 'N';
    case 0x44: return 'O';
    case 0x4D: return 'P';
    case 0x15: return 'Q';
    case 0x2D: return 'R';
    case 0x1B: return 'S';
    case 0x2C: return 'T';
    case 0x3C: return 'U';
    case 0x2A: return 'V';
    case 0x1D: return 'W';
    case 0x22: return 'X';
    case 0x35: return 'Y';
    case 0x1A: return 'Z';
    case 0x45: return '0';
    case 0x16: return '1';
    case 0x1E: return '2';
    case 0x26: return '3';
    case 0x25: return '4';
    case 0x2E: return '5';
    case 0x36: return '6';
    case 0x3D: return '7';
    case 0x3E: return '8';
    case 0x46: return '9';
    case 0x5A: return '\n';
    case 0x29: return ' ';
  }

  return '\0';
}

You should indent the code (that’s done by pressing ctrlT on a PC or cmdT on a Mac) and use if/else consistently

I can’t read the structure easily from my phone

1 Like

You added four cases ("PIN", "Pwe", "ew", and "Pw") between "PIN" and "PIN1" and four more cases ("s", "d", "f", and "g") between "INFO" and "PIN 2". Which added conditions do not work. In what way do they not work?

      if (polecenia == "PIN")
      {
        TV.clear_screen();
        TV.println(); TV.println("test 1");
      }
      ////////////////////// Added:
      if (polecenia == "PIN")
      {
        TV.clear_screen();
        TV.println(); TV.println("test 1");
      }
      if (polecenia == "Pwe")
      {
        TV.clear_screen();
        TV.println(); TV.println("et");
      }
      if (polecenia == "ew")
      {
        TV.clear_screen();
        TV.println(); TV.println("test 1");
      }
      if (polecenia == "Pw")
      {
        TV.clear_screen();
        TV.println(); TV.println("test 1");
      }
      ///////////////// End of added code
      if (polecenia == "PIN1")
      {
        digitalWrite(2, HIGH);
      }



      else if (polecenia == "INFO")
      {
        TV.clear_screen();
        TV.println(); TV.println("-------------"); TV.println(); TV.print("test 2"); TV.println(); TV.println("-------------");
      }
      ////////////////////// Added:
      else if (polecenia == "s")
      {
        TV.clear_screen();
        TV.println(); TV.println("-------------"); TV.println(); TV.print("test 2"); TV.println(); TV.println("-------------");
      }
      else if (polecenia == "d")
      {
        TV.clear_screen();
        TV.println(); TV.println("-------------"); TV.println(); TV.print("test 2"); TV.println(); TV.println("-------------");
      }
      else if (polecenia == "f")
      {
        TV.clear_screen();
        TV.println(); TV.println("-------------"); TV.println(); TV.print("test 2"); TV.println(); TV.println("-------------");
      }
      else if (polecenia == "g")
      {
        TV.clear_screen();
        TV.println(); TV.println("-------------"); TV.println(); TV.print("test 2"); TV.println(); TV.println("-------------");
      }
      ///////////////// End of added code
      else if (polecenia == "PIN 2")
      {
        digitalWrite(12, HIGH);
      }

It's just that if there are more than 4 "else if" and "if" conditions, the rest of the commands except 8 don't work

Can you please explain that again with different words? I don't know what you mean by "except 8". That could be "except the first 8", "except the last 8", except the 8th one"... Try again using more words.

You can't expect the commands "Pwe", "ew", "Pw", "s", "d", "f", or "g" to work since you have no way to enter a lower-case letter. It might help if you changed them to "PWE", "EW", "PW", "S", "D", "F", and "G".

Maybe because I use a language translator and I don't know English very well, but I will try to write it a bit more accurately. When there are 8 conditions, the program works fine, but when I add, for example, 2 or more conditions, the conditions I add don't work, only 8 of them.

It was just an example, it doesn't work with capital letters

It was an example that can't possibly work. Try writing an example that CAN possibly work and then explain in what way it does not work. For example:

      if (polecenia == "PHIN")
      {
        TV.clear_screen();
        TV.println(); 
        TV.print("PHIN works"); 
      }

Does that 'work' when you try it?

It works, but only because it's one condition, if I add 7 more conditions, the program will still work. However, after the number of 8 conditions is exceeded, the program only works incorrectly

Please show me the version that has valid conditions but does not work. Also please tell me in what way it 'works incorrectly'.

This is the version that is not working properly. The only conditions that work are: if (commands == "HELP"), if (commands == "INFO"), and: if (commands == "PIN"). Why do other conditions and act as if they are not there? (if what I wrote doesn't make sense, write it because I'm using google translator)

#include <TVout.h>
#include <fontALL.h>

#define CLK 3
#define DAT 6

TVout TV;

const int BUF_SIZE = 11;
bool buffer[BUF_SIZE] = {0};
int pos = 0;
bool ignoreNext = false;
unsigned long lastRead = 0;
String polecenia="";

void setup() 
{
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DAT, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(7, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(CLK),readData , FALLING);
  TV.begin(NTSC,100,86);
  TV.select_font(font6x8);

  for(int i=0; i < 14; i++)
  {
    delay(100);
    TV.print("-");
  }
      TV.clear_screen();
  TV.select_font(font8x8);
  TV.print(10, 5, "ENCHER OS");
  TV.select_font(font6x8);
  TV.print(22, 35, "prosze czekac");
  TV.delay(1000);
  TV.print(30, 45, ".");
  TV.delay(1000);
  TV.print(30, 45, "..");
  TV.delay(1000);
  TV.print(30, 45, "...");
  TV.delay(1000);
  TV.clear_screen();
  TV.select_font(font8x8);
  TV.print(10, 5, "ENCHER OS");
  TV.select_font(font6x8);
  TV.print(22, 35, "prosze czekac");
  TV.delay(1000);
  TV.print(30, 45, ".");
  TV.delay(1000);
  TV.print(30, 45, "..");
  TV.delay(1000);
  TV.print(30, 45, "...");
  TV.delay(1000);
TV.clear_screen();
TV.println();TV.println("EncherOs");TV.println();TV.print(">");
}

void loop() {
delay(5);
  if(pos != 0 && millis() - lastRead > 1000) {
    pos = 0;
  }
  if(pos == 11) {
    pos = 0;
    int keyCode = getKeyCode(buffer);
    if(ignoreNext) {
      ignoreNext = false;
      return;
    }
    if(keyCode == 0xF0) {
      ignoreNext = true;
      return;
    }
    if(keyCode==0x76)//ESC
    {TV.clear_screen(); polecenia=""; TV.print(">");}
    else if(keyCode==0x5A)//ENTER
    {
      if(polecenia=="HELP")
      {
        TV.clear_screen();
        TV.println();TV.println("-------------");TV.println();TV.print("HELP, DEVHELP INFO, PIN, PROGRAMS");TV.println();TV.println("-------------");
      }
              if(polecenia == "PIN")
      {
       TV.clear_screen();
       TV.println();TV.println("Ustaw stan wysoki lub niski na pinie 1-3 komenda: PIN 1, PIN 2, PIN 3 oraz PIN STOP");
      }
                if(polecenia == "DEVHELP")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("Komendy dla programistow, wpisz by zobaczyc opis: XVAR, PRINT, CALC, IFKEY, SAVE");TV.println();TV.println("-------------");
      }
                if(polecenia == "IFKEY")
      {
       TV.print("info o ifkey");
      }
       else if(polecenia == "INFO")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("SYSTEM OPERACYJNY ENCHERos,pamiec:512 bajtow");TV.println();TV.println("-------------");
      }
        else if(polecenia == "PRINT")
      {
       TV.print("info o print");
      }
            else if(polecenia == "CALC")
      {
       TV.print("info o calc");
      }
           else if(polecenia == "XVAR")
      {
       TV.clear_screen();
       TV.println();TV.println("-------------");TV.println();TV.print("X - zmienna. Wykorzystanie: X|1-200| |A-B| Przyklad: X1 B - ustaw zmienna 1 na B");TV.println();TV.println("-------------");
      }
      else
      {TV.println(); TV.println("!");}

      TV.println();
      TV.print(">");
      polecenia="";
    }
    else
    {
    Serial.print(keyCode);
    TV.print(getKeyChar(keyCode)); polecenia=polecenia+getKeyChar(keyCode);
    }
  }
}

void readData() {
  lastRead = millis();
  buffer[pos++ % 11] = digitalRead(DAT);
}

int getKeyCode(bool * buf) {
  bool parity = 1;
  int result = 0;
  if(buf[0] != 0) return -1;
  if(buf[10] != 1) return -2;
  for(int x = 0; x < 8; x++) {
    result |= buf[1+x] << x;
    if(buf[1+x]) parity = !parity;
  }

  if(buf[9] != parity) return -3;
  return result;
}

char getKeyChar(int keyCode) {
  switch(keyCode) {
    case 0x1C: return 'A';
    case 0x32: return 'B';
    case 0x21: return 'C';
    case 0x23: return 'D';
    case 0x24: return 'E';
    case 0x2B: return 'F';
    case 0x34: return 'G';
    case 0x33: return 'H';
    case 0x43: return 'I';
    case 0x3B: return 'J';
    case 0x42: return 'K';
    case 0x4B: return 'L';
    case 0x3A: return 'M';
    case 0x31: return 'N';
    case 0x44: return 'O';
    case 0x4D: return 'P';
    case 0x15: return 'Q';
    case 0x2D: return 'R';
    case 0x1B: return 'S';
    case 0x2C: return 'T';
    case 0x3C: return 'U';
    case 0x2A: return 'V';
    case 0x1D: return 'W';
    case 0x22: return 'X';
    case 0x35: return 'Y';
    case 0x1A: return 'Z';
    case 0x45: return '0';
    case 0x16: return '1';
    case 0x1E: return '2';
    case 0x26: return '3';
    case 0x25: return '4';
    case 0x2E: return '5';
    case 0x36: return '6';
    case 0x3D: return '7';
    case 0x3E: return '8';
    case 0x46: return '9';
    case 0x5A: return '\n';
    case 0x29: return ' ';
  }

  return '\0';
}

I do not see any problem with the code that would keep the other 5 commands from working.

I am just after the test, this time all conditions turned out to be correct, but very chaotic. Sometimes the condition worked and sometimes it didn't. When I tried the first time, only a few conditions worked and the rest worked at random times. Do you know why this is happening? Solving this problem is very important to me.

TVout.h Relies on interrupts and so does your readData() function

You might run into timing issues to acquire the message

Do you see the same challenge if you remove TV out ?

I also don’t see any critical section nor volatile keyword for the buffer and position.

Thanks for the answer, I still have a question. If I were to spread the project over two arduino boards and one would read data etc. functions and the other would only display the TV image. Would the problem be resolved then? @J-M-L

I don’t know :slight_smile:

Before going that route you need to qualify this is the issue

Correct the code so that you use volatile variables and critical sections when you play with data coming from the interrupts and see if that works any better

I changed the library from displaying the image on the TV. However, I have a problem with one line of the program. Currently, the code looks like this:

#include "MRETV.h"
#include "textfont.h"
char mystring[]="test";
char ws[]="EncherOs >";
char sw[]="test";
char we[]="test";
char ew[]="test";
char er[]="test";
char yu[]=">";
char op[]="ERROR";

#define CLK 3
#define DAT 6

const int BUF_SIZE = 11;
bool buffer[BUF_SIZE] = {0};
int pos = 0;
bool ignoreNext = false;
unsigned long lastRead = 0;
String polecenia="";

void setup() 
{
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  pinMode(CLK, INPUT);
  pinMode(DAT, INPUT);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(7, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(CLK),readData , FALLING);

  for(int i=0; i < 14; i++)
  {
    delay(100);
    Screen.begin(textfont,er,2*fontheight,6,30,30,1);
  }
Screen.begin(textfont,ws,2*fontheight,6,30,30,1);
}

void loop() {
delay(5);
  if(pos != 0 && millis() - lastRead > 1000) {
    pos = 0;
  }
  if(pos == 11) {
    pos = 0;
    int keyCode = getKeyCode(buffer);
    if(ignoreNext) {
      ignoreNext = false;
      return;
    }
    if(keyCode == 0xF0) {
      ignoreNext = true;
      return;
    }
    if(keyCode==0x76)//ESC
    {Screen.begin(textfont,ew,2*fontheight,6,30,30,1); polecenia=""; Screen.begin(textfont,ew,2*fontheight,6,30,30,1);;}
    else if(keyCode==0x5A)//ENTER
    {
      if(polecenia=="HELP")
      {
        Screen.begin(textfont,ew,2*fontheight,6,30,30,1);
      }
              if(polecenia == "PIN")
      {
       Screen.begin(textfont,ew,2*fontheight,6,30,30,1);
      }
                if(polecenia == "PIN1")
      {
       digitalWrite(2, HIGH);
      }
       else if(polecenia == "INFO")
      {
       Screen.begin(textfont,ew,2*fontheight,6,30,30,1);
      }
        else if(polecenia == "PIN 2")
      {
       digitalWrite(12, HIGH);
      }
            else if(polecenia == "PIN 3")
      {
       digitalWrite(7, HIGH);
      }
      else
      {Screen.begin(textfont,op,2*fontheight,6,30,30,1);}

      Screen.begin(textfont,yu,2*fontheight,6,30,30,1);
      polecenia="";
    }
    else
    {
    Serial.print(keyCode);
    Screen.begin(textfont,polecenia,2*fontheight,6,30,30,1);
    }
  }
}

void readData() {
  lastRead = millis();
  buffer[pos++ % 11] = digitalRead(DAT);
}

int getKeyCode(bool * buf) {
  bool parity = 1;
  int result = 0;
  if(buf[0] != 0) return -1;
  if(buf[10] != 1) return -2;
  for(int x = 0; x < 8; x++) {
    result |= buf[1+x] << x;
    if(buf[1+x]) parity = !parity;
  }

  if(buf[9] != parity) return -3;
  return result;
}

char getKeyChar(int keyCode) {
  switch(keyCode) {
    case 0x1C: return 'A';
    case 0x32: return 'B';
    case 0x21: return 'C';
    case 0x23: return 'D';
    case 0x24: return 'E';
    case 0x2B: return 'F';
    case 0x34: return 'G';
    case 0x33: return 'H';
    case 0x43: return 'I';
    case 0x3B: return 'J';
    case 0x42: return 'K';
    case 0x4B: return 'L';
    case 0x3A: return 'M';
    case 0x31: return 'N';
    case 0x44: return 'O';
    case 0x4D: return 'P';
    case 0x15: return 'Q';
    case 0x2D: return 'R';
    case 0x1B: return 'S';
    case 0x2C: return 'T';
    case 0x3C: return 'U';
    case 0x2A: return 'V';
    case 0x1D: return 'W';
    case 0x22: return 'X';
    case 0x35: return 'Y';
    case 0x1A: return 'Z';
    case 0x45: return '0';
    case 0x16: return '1';
    case 0x1E: return '2';
    case 0x26: return '3';
    case 0x25: return '4';
    case 0x2E: return '5';
    case 0x36: return '6';
    case 0x3D: return '7';
    case 0x3E: return '8';
    case 0x46: return '9';
    case 0x5A: return '\n';
    case 0x29: return ' ';
  }

  return '\0';
}

The problem appears here:

Screen.begin(textfont,polecenia,2*fontheight,6,30,30,1);

The following error is then displayed:
exit status 1
no matching function for call to 'RasterPort::begin(const unsigned char [1024], String&, int, int, int, int, int)'

Okay. So check the library function and compare the number and type of parameters you passed to it.

I don't understand :frowning: