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';
}