ノリタケ伊勢電子のVFDモジュールに PowerShell からビットマップファイルを表示してみたテスト

function initializeVfd
{
    $a = [byte]0x1b, [byte]0x40
    $serialPort.write($a, 0 ,$a.Length)
}

function clearVfd
{
    $serialPort.write( [char]0x0c )
}

function displayCursorVfd
{
    $a = [byte]0x1f, [byte]0x43, [byte]1
    $serialPort.write($a,0,$a.Length)
}

function moveCursorVfd([int]$x, [int]$y)
{
    $a = [byte]0x1f, [byte]0x24, [byte]5, [byte]0, [byte]1, [byte]0
    $serialPort.write($a,0,$a.Length)

}

function drawBitmapVfd
{
    $a = [byte]0x1f, [byte]0x28, [byte]0x66, [byte]0x11, [byte]128, [byte]0, [byte]8, [byte]0, [byte]1
    $a.Length
    $serialPort.Write($a, 0, $a.Length)
    $serialPort.write($vfdimg, 0, $vfdimg.Length)
}

$serialPort = New-Object System.IO.Ports.SerialPort "COM1", 38400
$serialPort.Open()
initializeVfd
clearVfd
displayCursorVfd
#moveCursorVfd
$img = [System.Drawing.Image]::FromFile("D:\mkusunoki\Documents\i-tron128X64.bmp")
$vfdimg = New-Object byte[] ($img.Width * $img.Height / 8)
for($i = 0; $i -lt $img.Width; $i++)
{
    for($j = 0; $j -lt ($img.Height / 8); $j++)
    {
        $bb = 0
        if($img.GetPixel($i, $j * 8).G -gt 127)
        {
            $bb = 1
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 1).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 2).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 3).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 4).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 5).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 6).G -gt 127)
        {
            $bb++
        }
        $bb += $bb
        if($img.GetPixel($i, $j * 8 + 7).G -gt 127)
        {
            $bb++
        }
        $vfdimg[$i * ($img.Height / 8) + $j] = $bb
    }
}
drawBitmapVfd
# $serialPort.Write("HHHHH")
$serialPort.Close()
$serialPort.Dispose()

ということで、128×64ドットのディスプレイになんか表示しましょうということです。とりあえず、付属のCDROM に入っていたサンプルに i-tron128X64.bmp というビットマップファイルがあったのでこれを表示させてみることにしました。

今回は Windows の PowerShell というやつを使いまして、ビットマップファイルをロードして、シリアルポートに投げるというものです。まだ試行錯誤中のアプリケーションノートからロジック丸パクしたソースは以下に掲載します。あとは、ビットマップオジェクトをいじれば漢字だろうが何だろうが描画出来るので少しだけ前に進んだかな?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です