// LOG IN TO RASPBERRY PI VIA UART SERIAL 0.5 #include PS2Keyboard keyboard; const int DataPin = 2; //IO2 = "DATA" PIN const int IRQpin = 3; //IO3 = "CLOCK" PIN const boolean jp106 = 1; //JP Keyboard #include LiquidCrystal lcd(4,5,6,7,8,9,10); byte tilde[8] = { B01000, B10101, B00010, B00000, B00000, B00000, B00000, }; void setup() { Serial.begin(1200); lcd.createChar(0, tilde); lcd.begin(20, 4); lcd.cursor(); lcd.setCursor(0, 0); keyboard.begin(DataPin, IRQpin); } //CONTROLS 20x4 LCD DISPLAY void lcdChOut(char ch) { static byte x; static byte y; static char c[61]; byte times; int i; if(ch == '\r') { times = (20 - x); ch = ' '; } else { times = 1; } for(i = 0; i < times; i++) { if(ch == '~') { lcd.write(byte(0)); } else { lcd.print(ch); } if(y == 1){c[ x] = ch;} if(y == 2){c[20 + x] = ch;} if(y == 3){c[40 + x] = ch;} x++; if(x == 20 && y == 0){x = 0, y = 1;} if(x == 20 && y == 1){x = 0, y = 2;} if(x == 20 && y == 2){x = 0, y = 3;} if(x == 20 && y == 3) { lcd.clear(); lcd.setCursor(0, 0); for(i = 0; i < 20; i++) { if(c[i] == '~') { lcd.write(byte(0)); } else { lcd.print(c[i]); } } lcd.setCursor(0, 1); for(i = 0; i < 20; i++) { if(c[20 + i] == '~') { lcd.write(byte(0)); } else { lcd.print(c[20 + i]); } } lcd.setCursor(0, 2); for(i = 0; i < 20; i++) { if(c[40 + i] == '~') { lcd.write(byte(0)); } else { lcd.print(c[40 + i]); } } x = 0, y = 3; for(i = 0; i < 20; i++){c[ i] = c[20 + i];} for(i = 0; i < 20; i++){c[20 + i] = c[40 + i];} } } lcd.setCursor(x, y); } char chConvt(char ch) { if(jp106 == 1) //JP106 KEYBOARD { if(ch == '@' ){ch = '"' ;} else if(ch == '^' ){ch = '&' ;} else if(ch == '&' ){ch = '\'';} else if(ch == '*' ){ch = '(' ;} else if(ch == '(' ){ch = ')' ;} else if(ch == ')' ){ch = '~' ;} else if(ch == '_' ){ch = '=' ;} else if(ch == '=' ){ch = '^' ;} else if(ch == '+' ){ch = '\0';} else if(ch == '[' ){ch = '@' ;} else if(ch == '{' ){ch = '`' ;} else if(ch == ']' ){ch = '[' ;} else if(ch == '}' ){ch = '{' ;} else if(ch == ':' ){ch = '+' ;} else if(ch == '\''){ch = ':' ;} else if(ch == '"' ){ch = '*' ;} else if(ch == '\\'){ch = ']' ;} else if(ch == '|' ){ch = '}' ;} } return ch; } void loop() { char ch; int i; while(Serial.available()) { ch = Serial.read(); if(ch != '\n') { lcdChOut(ch); } } if(keyboard.available()) { ch = keyboard.read(); ch = chConvt(ch); Serial.print(ch); if(ch == PS2_BACKSPACE) { delay(100); for(i = 0; i < 4; i++) { ch = Serial.read(); } lcdChOut(PS2_BACKSPACE); } } delayMicroseconds(10); }