学習リモコンで送信

先日に引き続いてBUFFALOのPC-OP-RS1を利用したデータ送信(参考:スーの道具箱)。シリアル通信にはDelphi 4用通信コンポーネント(Windows95/98/Me / プログラミング)を使用。送信部分自体は結構前にできていたのだけれども、いろいろ機能を追加してたら時間がかかってしまった。まだまだ作りかけなのだけれども。今後は、常駐させてタイマ機能つけたり、スキンで概観いじれるようにしたりするかも。

http://hp.vector.co.jp/authors/VA013135/guutara.zip

データの入力が面倒なのがきついなぁ。

学習リモコンで受信

BUFFALOのPC-OP-RS1を利用してデータを受信してみる(参考:スーの道具箱)。シリアル通信にはDelphi 4用通信コンポーネント(Windows95/98/Me / プログラミング)を使用。

受信してcsvに落とすプログラムhttp://hp.vector.co.jp/authors/VA013135/receive_rc.zip。まだその先の送信作ってないけど。

かなり適当な通信部分。

try
try
ReceiveForm := TReceiveForm.Create(Application);
ReceiveForm.rs232c.portname := COMCombo.Text;

if(not ReceiveForm.rs232c.rsopen)then Raise Exception.Create('error -- open');
if(not ReceiveForm.rs232c.rswritechar(Chr($72)))then Raise Exception.Create('error -- write');
if(not ReceiveForm.rs232c.rsreadchar(c))then Raise Exception.Create('error -- read');
if(c <> Chr($59))then Raise Exception.Create('error -- not Y($59)');
if(ReceiveForm.ShowModal = mrCancel)then Raise Exception.Create('cancel');
if(not ReceiveForm.rs232c.rsreadchar(c))then Raise Exception.Create('error -- read');
if(c <> Chr($53))then Raise Exception.Create('error -- not S($53)');

if(not ReceiveForm.rs232c.rsread(data, 240))then Raise Exception.Create('error -- read');
data[240] := #0;
if(not ReceiveForm.rs232c.rsreadchar(c))then Raise Exception.Create('error -- read');
if(c <> Chr($45))then Raise Exception.Create('error -- not E($45)');
ReceiveForm.rs232c.rsclose;

ListItem := DataListView.Items.Add;
ListItem.Caption := name;
ListItem.SubItems.Add(DataToStr(data));
except
on e: Exception do
MessageDlg(e.Message, mtError, [mbOK], 0);
end;
finally
ReceiveForm.Free;
end;

レジストリ

TRegistryクラスでサクサク。下はCOMポート一覧を取り出しているところ。

var
i: Integer;
reg: TRegistry;
st: TStringList;
begin
reg := TRegistry.Create;
st := TStringList.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
if(reg.OpenKey('\HARDWARE\DEVICEMAP\SERIALCOMM\', False))then
begin
reg.GetValueNames(st);
for i := 0 to st.Count - 1 do
begin
if(reg.GetDataType(st.Strings[i]) = rdString)then
COMCombo.Items.Append(reg.ReadString(st.Strings[i]));
end;
reg.CloseKey;
end;
st.Free;
reg.Free;