あ、へるばれモバイル

あ、へるばれモバイル by 無頼寿あさむ

主にゲーム関連の仕事をしているフリーライターの日記。企画、ゲームシナリオ、その他文章の仕事募集中。

◆ メニュー ◆

HOME | 最新日記(10件) | プロフィール | リンク
*** PCサイト(大きい画面)はこちら ***

乱れて交わる俺と姫」 WAFFLE
祝WAFFLE様10周年のファンタジーもの。AVG+エロエロH

ノベルゲームのシナリオ作成奥義」 秀和システム
シナリオの書き方に留まらず、ライターが担当するさまざまな作業を解説。企画・プロットに始まり各種資料やフローの書き方、台本の書き方、etc。プランナーを目指す人にもお勧め

◆ 置いてけぼり日記 ◆

2009/5/24 : 電子工作してた


「USB温度・湿度測定モジュール」というものを入手した。
http://www2.strawberry-linux.com/products/usbrh/

[画像リンク]

単に室温を知りたいだけなので、別に100円ショップで買えばよしなんだが……まあ、なんとなく。
実際に使うにはプログラムを組む必要があるのだけども、使えるAPIは結構シンプル。

[DllImport("USBMeter.dll",CharSet = CharSet.Ansi)] public static extern String FindUSB(ref long index);
[DllImport("USBMeter.dll",CharSet = CharSet.Ansi)] public static extern long GetTempHumid(String dev,ref double temp,ref double humid);

ドライバは自動認識・自動インストール、供給されているUSBMeter.dllから上の2つを呼び出せば十分なわけで、

 String USBDEV = ""; // デバイスID
 long USBNUM = 0; // デバイスの数 or インデックス
 double temp = 0; // 温度(度)
 double humid = 0; // 湿度(%)

 USBDEV = FindUSB(ref USBNUM);
 GetTempHumid(USBDEV,ref temp,ref humid);

C#だとこんだけで温度が引っ張れる。
実はサンプルにはVBの場合とVCの場合しか無かったので、あえてC#で挑戦ってことで(笑)
Cサンプルを参考にアンマネージAPIの呼び出し宣言を書いていたのだけど、一部のlongパラメータがそのまま使えずに難儀した。あれこれ試していくうちにintにすればOKってことで落ち着いたが。
諦めかけたりもしたけど、メーカーサイトにあるサンプルアプリの再現はこの通り完成。

メーカーサイトには対応OSはXPと2000と書いてあるが、この通りVistaでも動かせるようになっている。.NET Framework呼び出しも少し工夫すればOKだ。

[画像リンク]

ここまでできればあとは使いたいアプリに組み込むだけさーといいながら、実は温度計アプリ以上にネタはなかったりする(笑)
メーカーから提供される制御API「USBMeter.dll」の内部はブラックボックスであり、提供されているAPI自体もあとはテスト用ヒーターON/OFFとか、基板についているLEDのON/OFFとかしか機能は無い。本当にシンプルな回路なのだ。
以下にC#用に書いたラッパーを置いておくので、興味のある人はいじってみてほしい。もちろん、回路購入は必須です(笑)


  ■使い方
  public USBMeter usbMeter = new USBMeter(); // オブジェクトの初期化
  if(usbMeter.IsUSBMeter()){ // 回路が認識できるか?
    usbMeter.GetData(); // 値を取得
    textBox1.Text = usbMeter.Temp.ToString(); // 温度(℃)
    textBox2.Text = usbMeter.Humid.ToString(); // 湿度(%)
  }


  /// ----------------------------------------------------------------------
  /// <summary>
  /// USBMeter.dll呼び出しクラス
  /// </summary>
  /// ----------------------------------------------------------------------
  public class USBMeter {
    /// ------------------------------------------------------------------
    /// <summary>
    /// モジュールの検索
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern String FindUSB(ref long index);

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度・湿度の取得
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="temp"></param>
    /// <param name="humid"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long GetTempHumid(String dev,ref double temp,ref double humid);

    /// ------------------------------------------------------------------
    /// <summary>
    /// ヒーターの制御
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="val"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long SetHeater(String dev,int val);

    /// ------------------------------------------------------------------
    /// <summary>
    /// LEDの制御
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="port"></param>
    /// <param name="val"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long ControlIO(String dev,int port,int val);

    /// ------------------------------------------------------------------
    /// <summary>
    /// ファームウェアバージョンの取得
    /// </summary>
    /// <param name="dev"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern string GetVers(String dev);

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度・湿度の取得(2)
    /// </summary>
    /// <param name="dev"></param>
    /// <param name="temp"></param>
    /// <param name="humid"></param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    [DllImport("USBMeter.dll",CharSet = CharSet.Ansi)]
    public static extern long GetTempHumidTrue(String dev,ref double temp,ref double humid);

    /// <summary>
    /// デバイス名
    /// </summary>
    public String USBDEV = "";

    /// <summary>
    /// FindUSBで取得される数値
    /// </summary>
    public long USBNUM = 0;

    /// <summary>
    /// パラメータ
    /// </summary>
    public struct USBMETER_DATA{
      /// <summary>
      /// 温度
      /// </summary>
      public double temp;

      /// <summary>
      /// 湿度
      /// </summary>
      public double humid;
    }
    public USBMETER_DATA Data;

    public USBMeter() {
      Data.temp = Data.humid = 0;

      USBDEV = "";
      USBNUM = 0;
      try{
        USBDEV = FindUSB(ref USBNUM);
      }catch{
        USBNUM = 0;
        USBDEV = "";
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// USBMeterが有効かどうかのチェック
    /// </summary>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public bool IsUSBMeter() {
      return USBNUM > 0 && USBDEV != "";
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 値を取得する
    /// </summary>
    /// ------------------------------------------------------------------
    public void GetData() {
      GetTempHumid(USBDEV,ref Data.temp,ref Data.humid);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 値を取得する(2)
    /// </summary>
    /// ------------------------------------------------------------------
    public void GetData2() {
      GetTempHumidTrue(USBDEV,ref Data.temp,ref Data.humid);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 温度を取得
    /// </summary>
    /// ------------------------------------------------------------------
    public double Temp {
      get {
        return Data.temp;
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// 湿度を取得
    /// </summary>
    /// ------------------------------------------------------------------
    public double Humid {
      get {
        return Data.humid;
      }
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// ヒーターON/OFF
    /// </summary>
    /// <param name="b">ONならtrue</param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public void SetHeater(bool b) {
      SetHeater(USBDEV,b ? 1 : 0);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// LEDのON/OFF
    /// </summary>
    /// <param name="port">LEDポート 0-1</param>
    /// <param name="b">ONならtrue</param>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public void SetLED(int port,bool b) {
      ControlIO(USBDEV,port,b ? 1 : 0);
    }

    /// ------------------------------------------------------------------
    /// <summary>
    /// ファームウェアバージョン
    /// </summary>
    /// <returns></returns>
    /// ------------------------------------------------------------------
    public string GetVersion() {
      return GetVers(USBDEV);
    }
  }



関連タグ: PC 開発


2009/5/1 : Twitterは有利?


GoogleはTwitterのランキング特別扱いしている?
http://www.sem-r.com/google09/20090430150112.html

インデックス化をしていく上でたまたま相性がよいってことなのですかね。
twitterは特定ユーザーへのリプライはリンクで結んでいくけど、会話が加熱していけば、あるコミュニティ内で網の目のようにリンクが結ばれていくわけだ。
それが同一テーマであればあるほど、内部リンクが密になればなるほど、Googleからすれば重要な内容であると判断して順位が上がっていくと……?
なんとなくだけど、そんな感じなのかな。

そういう意味では、ブログなんかも同じ環境が自然にできあがるはずなんだけど……でもほら、ブログってもうアレですし。

関連タグ: Web


◆ バックナンバー ◆

2009年09月 2009年08月 2009年07月 2009年06月 2009年05月 2009年04月 2009年03月 2009年02月 2009年01月 2008年12月 2008年11月 2008年10月 2008年09月 2008年08月 2008年07月 2008年06月 2008年05月 2008年04月 2008年03月 2008年02月


Copyright (c) 無頼寿あさむ/Powerd by Digital Cottage.Net
ご意見ご感想ネタの提供は、assem-blage@digital-cottage.netにどうぞ