Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

No lcd example (duplicate) #17

Closed
drp0 opened this issue Feb 20, 2018 · 0 comments
Closed

No lcd example (duplicate) #17

drp0 opened this issue Feb 20, 2018 · 0 comments

Comments

@drp0
Copy link

drp0 commented Feb 20, 2018

For those that need it, here is a keyboard lcd example, tested on a mega with a standard 16x2 LCD and Keypad shield:
It includes custom characters for un-supported lcd keys.

``
/* PS2Keyboard library example

ps2Keyboard1

NB may need to plug usb in after starting the Arduino

Lcd support added 18/2/2018 D.R.Patterson
lcd character set:
http://forum.arduino.cc/index.php?topic=19002.0

Tested on a mega with a Keypad Shield for Arduino

PS2Keyboard now requries both pins specified for begin()
keyboard.begin(data_pin, irq_pin);

Valid irq pins:
Arduino Uno: 2, 3
Arduino Due: All pins, except 13 (LED)
Arduino Mega: 2, 3, 18, 19, 20, 21
Teensy 2.0: All pins, except 13 (LED)
Teensy 2.0: 5, 6, 7, 8
Teensy 1.0: 0, 1, 2, 3, 4, 6, 7, 16
Teensy++ 2.0: 0, 1, 2, 3, 18, 19, 36, 37
Teensy++ 1.0: 0, 1, 2, 3, 18, 19, 36, 37
Sanguino: 2, 10, 11

for more information you can read the original wiki in arduino.cc
at http://www.arduino.cc/playground/Main/PS2Keyboard
or http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html

Like the Original library and example this is under LGPL license.

Modified by Cuninganreset@gmail.com on 2010-03-22
Modified by Paul Stoffregen paul@pjrc.com June 2010
*/

#include <PS2Keyboard.h>
const int DataPin = 19;
const int IRQpin = 18;
PS2Keyboard keyboard;

#include <LiquidCrystal.h>
// LCD Keypad Shield for Arduino
// http://www.hobbytronics.co.uk/lcd/lcd-displays-5v/arduino-lcd-keypad-shield

//set constants for number of rows and columns to match your LCD
const int numRows = 2;
const int numCols = 16;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

byte x, y; // track lcd position

// custom pound using https://omerk.github.io/lcdchargen/
byte customPound[8] = {
0b01100,
0b10010,
0b01000,
0b11100,
0b01000,
0b01000,
0b11110,
0b00000
};
const char pound = 1;

byte customkey[8] = { // ¬
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b00001,
0b00001,
0b00000
};
const char custom = 2;

byte customslash[8] = { // backslash
0b00000,
0b00000,
0b10000,
0b01000,
0b00100,
0b00010,
0b00001,
0b00000
};
const char backslash = 3;

char c;

// currently un-used:
#define is_printable(c) (!(c&0x80)) // don't print if top bit is set

void setup() {
delay(1000);
keyboard.begin(DataPin, IRQpin);
Serial.begin(115200);
while (!Serial) yield();
lcd.begin(numRows, numCols);
delay(250);
lcd.clear();
// create a new custom character
lcd.createChar(pound, customPound);
lcd.createChar(custom, customkey);
lcd.createChar(backslash, customslash);
lcd.cursor(); // Enable Cursor
//lcd.blink(); // Blinking cursor
lcd.clear();

lcd.print(F("Keyboard Test:"));
lcd.setCursor(0,1);
lcd.print(F("Esc to clear LCD"));
Serial.println(F("Keyboard Test:"));
unsigned long t = millis();
do{
if (keyboard.available()) {
c = keyboard.read();
if (c == PS2_ESC) break;
}
} while ((millis() - t) < 8000);
lcd.clear();
}

void loop() {

if (keyboard.available()) {
// read the next key
c = keyboard.read();

// check for some of the special keys
if (c == PS2_ENTER) {
Serial.println();
x = 0;
y += 1;
  if (y == numRows){
  y = 0;
  lcd.clear();
  }
lcd.setCursor(x, y);
  
} else if (c == PS2_TAB) {
lcdprint(F("[Tab]"));

} else if (c == PS2_ESC) {
Serial.println(F("\n[ESC]\n"));
lcd.clear();
x = 0; y = 0;
lcd.setCursor(x, y);
  
} else if (c == PS2_PAGEDOWN) {
lcdprint(F("[PgDn]"));
    
} else if (c == PS2_PAGEUP) {
lcdprint(F("[PgUp]"));
    
} else if (c == PS2_LEFTARROW) {
lcdprint(F("[Left]"));
    
} else if (c == PS2_RIGHTARROW) {
lcdprint(F("[Right]"));
    
} else if (c == PS2_UPARROW) {
lcdprint(F("[Up]"));
    
} else if (c == PS2_DOWNARROW) {
lcdprint(F("[Down]"));
    
} else if (c == PS2_DELETE) {
lcdprint(F("[Del]"));;

} else if (c == PS2_BACKSPACE) {
lcdprint(F("[Back]"));
    
} else {  
// otherwise, just print all normal characters
lcdprintChar(c);
}

}
}

void lcdprintChar(char t){ // display char on lcd and Serial
byte test = byte(t);
if (test == 194) return; // this char appears as an indicator of special keys

if (x > (numCols - 1) ) {
x = 0;
if (y == (numRows - 1)) {
lcd.clear();
Serial.println();
y = 0;
}else y += 1;
Serial.println();
lcd.setCursor(x, y);
}

if (test == 126) lcd.write(243); // 126 ~
else if (test == 163) lcd.write(pound); // 163 £
else if (test == 172) lcd.write(custom); // 194 172 ¬
else if (test == 92) lcd.write(backslash); // 92 backslash
else lcd.print(t);
Serial.print(t);
x += 1;
}

void lcdprint(String t){ // display string on lcd and Serial
byte L = t.length();
if (x > (numCols - L) ) {
x = 0;
if (y == (numRows - 1)) {
lcd.clear();
Serial.println();
y = 0;
}else y += 1;
Serial.println();
lcd.setCursor(x, y);
}
lcd.print(t);
Serial.print(t);
x += L;
}

@drp0 drp0 closed this as completed Feb 20, 2018
@drp0 drp0 changed the title No lcd example No lcd example (duplicate) Feb 20, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant