2015年12月15日火曜日

タッチパネルの自動押し化

こんばんは


delphi アドベントカレンダー15日目です。

昨日のowlsperspectiveさんに引き続きまして(内容とても面白かったですね)、

本日は、やましょうが担当させていただきます。。
 
先週は、デベロッパーキャンプお疲れ様でした。


さて5日の公開もまだいろいろあり出来ていなく申し訳ない状態です。
 
さて、LTで御紹介した内容を紹介です。

リレータッチボードドライバー付き@650円をまず購入です。



HPの説明にある様に。
"5VとGNDを電源につなぎEN端子をHIGHにするとリレーがONになります。"


って事で、FTDIのICを使用してBit-Bangを使用しても良いですし、

LPT叩いても良いし、USB-UARTでDTR等で動かすのも手です。

(ただし,PCのRS-232Cで行うと壊れます。
                                                           電圧5Vではないので。。
)


ともかく、EN端子を5V←→ 0Vを入替を自動化をしてください。
(追記:2015/12/24 回路図よく見るとトランジスタが入っているので、EN端子は0.6V以上←→0Vでも動作できそうですね。自己責任でトライしてみてください。)

ちなみに、アドベント、カレンダー5日のLEDボードで動かすとこんな感じに動作できます。



これを使えば簡単に連続押しのテストができますね。

(NEXUS7 2013を動かしてます。)


と言うことで、本日はこれまで、

明日は7of9さんのpublic, private, クラスでないstatic関数の使い分けで必見ですよ。


 それでは、また次回、お会いしましょう。










2015年12月5日土曜日

Delphi で電子工作、枯れた技術232cを素敵に使う。

昨日のluxideaさんより引き継ぎました。
こんばんは、やましょうです。


DELPHI アドベントカレンダー5日目です。



いろいろネタにこまり、ステマモードです。

さて、日頃、Delphiで電子工作やiotを推進しているやましょうなのですが、
いろいろ伺うとどうもハンダが駄目とかRomとかめんどいとか聞くわけです。

そこで今日は、枯れた技術232Cのお話なんですが、
実は、無限の可能性を秘めた内容の御紹介です。

まずはちょっと忍耐です。mbedボードのご紹介です。(2枚写真ではあるけどね。)
このボード何が凄いってUSBにつけるとメモリーとしてデータを書けるのです。
つまりデータの転送がドラック&ドロップでできるのです。
コンパイラはmbed.orgで無料でオンラインコンパイルできるのでとても便利です。
たぶんここが世界で一番、安い入手先だと思う。リンク
6000円くらいしますが、後の開発時間で一時間も短縮できれば元とれますので、
気にしないで青い方を買いましょう。

今回はテスト用にこんなCのコードを書きましたよ。
232Cで受けたコードに+1して返す。まさに、エコーバック+1です。


#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx

int main() {
    pc.printf("Hello World!");
    while(1) {
        pc.putc(pc.getc() + 1);
    }
}

さて、ここでカンの良いあなたはきずいた。そう、USBなのに232Cが使えるんです。
コンパイルとか面倒だと思いますから青い奴のバイナリーをここに置いておきます。
青い奴にコピーするば動きますよ。


さて、ここからはDELPHIの出番です。
DELPHIで通常のCOMポートとしてWIN側からアクセスすれば、このボードとの通信が簡単にできるのです。ボードのポートはそれなりにありますからロボットでもLEDでも、センサーでもなんでもPCとの間で通知する事ができますね。。通信方法はご自分で決定くださいね。
と、 ここまではDELPHIで簡単にできるのです。
                  
でも。でも。でも。やっぱり、せっかくのXeeee eeee eeですもの(10個数えます)
タブレットアンドロイドで動かしたいですよね!。
(ちなみにIOSでも動かす方法は知っていますが、他の方法があるで直接聞いてください。)

こんな感じで接続して(OTGケーブル介してつなぐこれだけ)
付属部品実装例














ちなみに、右の緑のボードは、こちらで購入できます。
ちなみにコンポーネントは、こちら購入できます。
(xe10用は来週あたりに用意する予定)


 動作中の様子はこちら、

     



ということで、あとはDELPHI側からなんでも操作ができるわけです。
もちろんこんなこともDELPHI側からできる筈。(今回は時間がなく断念)



というわけで、232Cは枯れた技術だけどいろいろがんばると、素敵になると言うお話でした。

(1768も動くようになりました報告っていう話でもある。)




明日は7of9さんです。


よろしくお願いします。


追記:やっぱ、動かしました動画です。
 1.WINDOSで動かした。
 2.Androidから動かした。


 と言うことでなんとか動きました。








2015年9月2日水曜日

DELPHI で232CをWIFI化する。

みなさん

おひさしぶり、やましょうです。
気がつけば9月ですね。そろそろサンタ見習いをはじめないと。。と思いつつ過ごしているのですが、いきなりデルファイXE9でなく10ですか。。そうですか。。

でも私個人的に10はいいと思うのですが、Xってどうよ?で思っている今日この頃です。
いい意味で裏切ってくれることを期待するしています。

さて、中国より1000円以下で232CをWIFI化できるチップがでました。
動作の動画はこんな感じ






実は、WIFI化するとコードがこんなに簡単に、ソースは以下だけでOK
procedure TForm1.Button1Click(Sender: TObject);
begin
/// esp8266へ送信
  IdUDPServer1.Send('192.168.11.90', 1112, Edit1.Text+sLineBreak);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdUDPServer1.DefaultPort := 12345; //適当なポートを使用
  IdUDPServer1.Active      := True;
end;


procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
var
Str : String;
begin
  Str := BytesToString(AData);
  Memo1.Lines.Add(str);

end;
ソースはここです。


ESP8266の詳細の設定はやましょうの電子工作にて、

それでは、みなさん、また次回














2014年12月25日木曜日

表参道ヒルズのツリーにdelphiを使ってみた。


メリークリスマス

アドベントカレンダー最終日です。
2014、本年はお世話になりました。m(_ _)m
やましょうです。



さて、技術的にはとてもしょぼい内容なので、
まず、やましょうの今年あったことなど
とても無駄な内容で前半半分以上が記載されています。
面倒だなと思う人は読み飛ばしましょう。

時は本年6月第2週目までに遡ります、
その時、私は絶望の淵に立っていた。
「その引継ぎ何件目?」
もう、既に仕事を去った人の業務を引継ぎ続けていた。
そこに巨大な引継ぎ案件が告げられた2件も

そこで私は、引継ぎの担当者に当社に来て頂けますか?と告げた。

となると、それは私自身が無職になる事を意味した。
そして、ダメ元だとは思ったのだが、twitterの名称をこんな
名称に変えてみた やましょう(お仕事募集中)と。

7月中は、いままでの残務整理に明け暮れた、時は7月末になっていた。
そこに1本の電話がかかって来る。
「今度、大きなツリーを作る、是非、やましょうにも仕事として、と言う連絡だった。」
私は即座に了承した。その時は、表参道のツリーになる事はまったく知らなかったが、
了承し計画がスタートした。

その3時間後にDelphi界の大御所さんから連絡があった。
とても皮肉なもので、仕事が決まりだすと仕事は、どんどん入ってくるのだ。
しかも、既にツリーは決定してしまっている。僕は非常に悩んだ。
しかし、私は会社もあり、社員もいるので、
Delphi界の大御所にはかなり無理を言って譲歩してもらった。とても、感謝している。
Delphi界の大御所の所で働いた一ヶ月は、ちょっと嬉しく、自分には何が不足なのか、を感じた1ヶ月になった、前の会社を辞めて独立し、約20年近く、会社のオフィスとか縦割り的関係とか、社長の仕事とかいろいろとても、お金では買えない感覚や、勉強ができた宝石の様な時間だった。
(その他、仕事作って頂けたのにスケジュール都合等でお断りした皆さん、この場を借りてゴメンナサイ、本当に仕事いっぺんに来たのです。)

しかも、
この仕事が来たのも
Delphiのおかげだな。。と。

私を絶望の淵から救ったものは、Delphiだった。

8月以降の仕事は私自身がいかに、井の中の蛙かも、わかったし、この世にはいろいろな仕事が
あるものだな。。といろいろ感じた仕事だった。
そして、この8月以降の仕事は自分の人生の中でも本当に毎日が御褒美の様な日々でとても
たのしかったし、今でも毎日、御褒美をもらっているかの様だ。

そして、、
まず、どんなツリーか。。(本日25日まで、開催されていますよ。お近くの方は是非)


そしてどこにDelphiを使ったというと実は各楽器が光るのは
各楽器が演奏している時だけなのです。(クライマックス以外)
 
ちょっと荒い切り抜きなのでわかりずらいかもしれませんが、
各楽器毎に音にリンクして、LEDが光ります。

さて、これ普通にハード屋さんからいわせるとADで各Chの出力レベル
確認してLed点灯させているだろう。。と言われそうなのですが、
実は、違いまして、
前もってWaveファイルをDelphiを使って解析して
点灯、消灯情報に変更しています。

そして、それをデータ化=>Cのテーブルにする=>マイコンのソース=>マイコンに書く
言う実は、本当にめんどくさい処理をしているのです。

内容プログラム的にはWAVのチャンク解析して、データをテーブル化って
とても大味な書き方になります。このアイデアだけでよいかな。。と。。。。
とはいってもソースがないと。。

TYPE
TWAV = record
chank_ID   : array [0..3] of byte;
chank_SIZE : Dword;
Format_TYPE: array [0..3] of byte;
format_chank :array [0..3] of byte;
chank_size2  :dword;
PCM_TYPE     :WORD;
channel      :WORD;
SAMPLE       :DWORD;
BYTEPAR      :DWORD;
BLOCK_SIZE   :WORD;
BIT_SAMP     :WORD;
DATA         :array [0..3] of byte;
CHANK_SIZE3  :DWORD;
END;

//button1で読ませる ///
procedure TForm5.Button1Click(Sender: TObject);
var
 FS : TFileStream;
begin
  OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0));
  if OpenDialog1.Execute then
  begin
    try
     FillChar(WAV_ORG_DATA,sizeof(WAV_ORG_DATA),00);
     FS := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
     fs.read(WAV_ORG,sizeof(WAV_ORG));
     fs.read(WAV_ORG_DATA,wav_ORG.CHANK_SIZE3);
    finally
     fs.Free;
    end;
  end;
end;

procedure TForm5.Button2Click(Sender: TObject);
var
i : Longint;
FW  : TextFile;
LMMax : Word;
RMMax : Word;
LWriteData : Byte;
RWriteData : Byte;
Str : String;
begin
  try
    AssignFile(Fw,(ExtractFileName(OpenDialog1.FileName)+'LTxt'));
    Rewrite(Fw);

    Str :='const unsigned char Ch01Table[]= ';
    writeln(fw,Str);
    Str :='{';
    writeln(fw,Str);

    for i := 0 to (wav_ORG.CHANK_SIZE3 div 4) -1 do
    begin
           LMMax := abs(WAV_ORG_DATA[i*2]);
           RMMax := abs(WAV_ORG_DATA[i*2+1]);


           if(LMMax >=  閾値) then LWriteData := 点灯値
           else                            LWriteData :=  消灯値;
////////////////////////////////////////////////////////////
            if(RMMax >=  閾値) then RWriteData := 点灯値
            else                             RWriteData :=  消灯値;
            Str := '  0x'+IntToHex(LWriteData,1)+IntToHex(RWriteData,1)+',     );
            writeln(fw,Str);
    end;
  finally
    writeln(fw,'};');
    writeln(fw,'');
    writeln(fw,'');
    CloseFile(Fw);
  end;
end;

ってな感じです。



ともかく
Delphi、使いで良かった。


みなさん良いお年を、お迎えください。



追加情報:
今回、ツリーを一緒に作ったお二人は
実はyes,mama ok? と言うバンドをやっておりまして、12月26日渋谷スターラウンジにて、
ライブあるようです。やましょうも、お客さんとして行っていると思います。
クリスマスな曲は、ここ!

メリークリスマス!!




2014年12月20日土曜日

XE7 のJAVA2OP

お久しぶりです。

季節は既に、真冬ですね。


本日は12/20ですね。

実はアンドロイド開発者に朗報です。
XE7からjavaへのラッパー生成.exeがつきました。

ここに説明がありますので読んでください。

この説明,javaとか詳しい人には分かるように書いてあるのですが、
delphiしか知らないな~って人にはちょっときつい。

という事でさらに簡単、覚書(簡略)してます。

まず、
①javaをインストール
②jdk 1.7以上 インストール
この時点でめんどくせなぁとか、天野アキ風に思ってしまうのが
怠けものの私です。
③そしてpathの追加、私は面倒なのでというより、過去のパスの精算の為
C:\Program Files\Java\jdk1.7.0_71\bin;
を追加
④PC再起動。
⑤java2opダウンロード、任意フォルダーに解凍

さて、環境は整った。

ここからが若い子に”黒い画面だぁ”と言われた内容ですよ。

まず、黒い画面を起動です。(ファイル名うんたらの所で、cmdって打ってね。)

今回は、私の大好きなUSBのラッパーを作りますよ。

java2opをインストールした。任意のディレクトリーに移動 そして、


java2op -classes android.hardware.usb.*

って入れます。

すると、
Androidapi.JNI.Interfaces.pas

が生成されます。

中身をみると、、あれ。。。const 系がないの。。。。

あーーーって事で人間、楽したい。。
そこでgithubですよ。

そう面倒ならここ

をみればたいていあるけどファイル分けすぎ。

つまり、結局はGitHubと、jave2opをうまく使っていきましょう
という感じですね。

あとは面倒でもリファレンスを参照しましょう。


それでは、また次回。


2014年9月3日水曜日

Create でフォームの動的構築

こんにちは、

やっとXe7をインストールがし終わった。

やましょうです。

さて、初日に私がVCL=>FMに移行しはじめて最初の挫折を書いたのですが、

なんと、 本日確認したところ、XE2でもちゃんと動作する事を確認しました。


あれ?たしかXE3もだめだった記憶があるのですが、UPDATEで対応

してくれたのでしょう。


ちなみに、ソースはBLOW.

unit unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private 宣言 }
  public
    { public 宣言 }
  end;

var
  Form1: TForm1;
  FormD: TForm2;

implementation

{$R *.fmx}


procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Formd.Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Formd := TForm2.Create(Self);
end;

end.
 
だったのですが、XE2の頃ですよ。
ともかく現在は問題なく動作するので良かった。
よかった。


え!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
え!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

私のソフトこれの対応でいろいろしちゃってましたけど、
もうこの対応いらないのですね。

それではまた明日。



2014年3月14日金曜日

xe5 で ios battery 電池 残量を 調べる。

delphi programing

みなさんおひさしぶりです。

やましょうっす。

さて本題です。

電池残量を調べる為には、

iosapi.uikit.pasをuse節に追加し。

var
  device : UIDevice;
begin
  device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
  Device.setBatteryMonitoringEnabled( True );
  label1.Text := floattostr(Device.batteryLevel * 100);
  Device.setBatteryMonitoringEnabled( false );
end;

です。

さて、一番、重要なのは、
   Device.setBatteryMonitoringEnabledです。
これを読みたいときtrueにして、後に必ずoffしましょう。
offしないと電池が早く終わると思います。

以上
やましょうでした。