Version 0 of Interfacing PS2 Keyboard with Arduino and Androwish

Updated 2018-12-05 00:33:15 by Jorge

JM 2018/12/4 Using and stripped-down version of A scale with Arduino and AndroWish here is an interface to a PS2 keyboard.

The arduino is programmed with this: https://github.com/PaulStoffregen/PS2Keyboard

While Androwish (I actually used Undroidwish on a PC) is running this:

# AndroWish script to interface Arduino with PS2 Keyboard
#
# Wiring:
#
#  +--------------+       +-------------+   +-----------------+
#  | Android      |       |          +5V|---|        PS2      |
#  | Device       |--USB--| Arduino  GND|---|        Keyboard |
#  | w/ AndroWish |       |           D4|---|DATA             |
#  +--------------+       |           D3|---|CK               |
#                         +-------------+   +-----------------+
console show

wm attributes . -fullscreen 1
catch {borg screenorientation landscape}
sdltk screensaver 0

option add *Radiobutton.borderWidth 3
option add *Radiobutton.highlightThickness 0
option add *Button.borderWidth 3
option add *Button.highlightThickness 0

# Open/reopen serial line to Arduino
proc reopen {} {
    after cancel reopen
    if {[sdltk android]} {
        if {[catch {
            set dev [lindex [usbserial] 0]
            set ::SCALE(chan) [usbserial $dev]
            fconfigure $::SCALE(chan) -blocking 0 -translation binary \
                -mode 9600,n,8,1
            fileevent $::SCALE(chan) readable readv
            set ::SCALE(value) "online"
            puts -nonewline $::SCALE(chan) "S"
        } err]} {
            sdltk log verbose $err
            set ::SCALE(value) "offline"
            after 1000 reopen
            return
        }
    } else {
        if {[catch {
            set ::SCALE(chan) [open "COM4" {RDWR}]
            fconfigure $::SCALE(chan) -translation binary -mode 9600,n,8,1
            fileevent $::SCALE(chan) readable readv
            set ::SCALE(value) "online"
        } err]} {
            sdltk log verbose $err
            puts $err
            set ::SCALE(value) "off..line"
            after 1000 reopen
            return
        }
    }
    # sendc 5 S
}

# Read data from Arduino
proc readv {} {
    if {[eof $::SCALE(chan)]} {
        sdltk log verbose "EOF detected"
        puts "EOF detected"
        catch {close $::SCALE(chan)}
        set ::SCALE(value) "offline"
        after 1000 reopen
        return
    }
    
    if {[catch {gets $::SCALE(chan) v} err]} {
        sdltk log verbose $err
        puts $err
        catch {close $::SCALE(chan)}
        set ::SCALE(value) "offline"
        after 1000 reopen
        return
    }
    
    puts $v
    set ::SCALE(value) $v
}

# Main screen
label .weight -textvariable SCALE(value) -font {Courier -160}
grid .weight -row 0 -column 0 -columnspan 9 -sticky news
grid columnconfigure . 0 -uniform largebutton
grid rowconfigure . 0 -weight 12
grid columnconfigure . all -weight 1

reopen