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