periphery = require('periphery') Serial = periphery.Serial serial = Serial("/dev/ttyAMA0",9600) COMMAND_POSITION = 0x19 COMMAND_POSITION_X = 0x13 COMMAND_POSITION_Y = 0x11 COMMAND_01H = 0x01 COMMAND_03H = 0x03 COMMAND_CURSOR_OFF = 0x0E COMMAND_BLINK = 0x0B COMMAND_UNBLINK = 0x0C COMMAND_CR = 0x0D COMMAND_LF = 0x0A blinkFlag = false posX = 0 posY = 0 function checkY(y) if y < 0 then y = 0 end if y > 5 then y = 5 end posY = y return y end function checkX(x) if x < 0 then x = 39; posY = posY - 1 checkY(posY) end if x > 39 then if posY == 5 then x = 39; else x = 0; posY = posY + 1 checkY(posY); end end posX = x return x end function gotoXY(x,y) checkX(x); checkY(y); end function lineFeed(void) posY = posY + 1 gotoXY(posX, checkY(posY)); end function carriageReturn(void) gotoXY(0, posY); end while (1) do while serial:poll(100) do local c = serial:read(1) if c:byte() == COMMAND_POSITION then local cmd = serial:read(1) if cmd:byte() == COMMAND_POSITION_X then local x = string.byte(serial:read(1)) gotoXY(x,posY) elseif cmd:byte() == COMMAND_POSITION_Y then local y = string.byte(serial:read(1)) gotoXY(posX,y) end elseif c:byte() == COMMAND_03H then serial:read(1) serial:read(1) elseif c:byte() == COMMAND_BLINK then blinkFlag = true elseif c:byte() == COMMAND_UNBLINK then blinkFlag = false elseif c:byte() == COMMAND_CURSOR_OFF then -- curs_set(0); elseif c:byte() == COMMAND_CR then carriageReturn() elseif c:byte() == COMMAND_LF then lineFeed() else if c:byte() >= 0x20 and c:byte() < 0x7F then print(c.." at "..posX.." "..posY.."\n") posX = posX + 1 checkX(posX) --[[ if ( c >= 0x20 && c < 0x7F ) { (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); buf_char[y_now][x_now] = c; checkX(++x_now); --]] else print("Unknown: "..c:byte().."\n"); end end -- -- io.stderr:write(string.format('%02X ',c:byte(1))); end end