LEDを点滅させる

LEDを点滅させるプログラムを作ってみよう

 LEDを点滅させるには、簡単な回路を製作しなければいけませんが、簡単なので取りあえずプログラムだけ先に作ります。
LEDを点滅させる
using System;
using RaspberryPiDotNet;

namespace LEDBlink
{
  class MainClass
  {
    static void Main(string[] args)
    {
      PinS PinState = new PinS(); 
      GPIOMem led = new GPIOMem(GPIOPins.V2_GPIO_04);
      while (true)
      {
        led.Write(PinState.High);
        System.Threading.Thread.Sleep(500);
        led.Write(PinState.Low);
        System.Threading.Thread.Sleep(500);
      }
    }
  }
  public class PinS    {
    public bool High = true;
    public bool Low = false;
  }
}
 1 
 2 IOを利用するためのクラス
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 特に必要が無いが分かり易くするため
11 7番ピンについているLEDを制御するオブジェクトの生成
12 永久ループ
13 
14 ピンの状態をHighすなわちLED点灯 led.Write(true);と同じ
15 500ms待つ
16 ピンの状態をLowすなわちLED消灯 led.Write(false);と同じ
17 500ms待つ
18 
19 
20 
21 
22 Highはtrueと同じ
23 Lowはfalseと同じ
24 
25 


ビルド及び実行方法
 一番始めは、新規作成をクリックします。すでに作ってある場合はそれをクリックします。
.Netのコンソールアプリケーションを選び、ここではソリューション名をLEDBlinkにします。
すると、デフォールトのディレクトリとして~/Projectsが選ばれます。
暫くすると、ソースファイルの雛形が出てきますので、上記のソースプログラムに置き換えます。すると、赤の波線が出てきて、コンパイラは「そんなもの知らない」と知らせてきます。そのため、コンパイラに部品のありかを教える必要があります。
 部品は、参照のところに入れる必要があるので、参照を右クリックし「参照の編集」を選びます。
すると、選択用のタブが出てくるので、「.NETアセンブリ」をタブを選ぶ
 上部のディレクトリ移動を利用して、~/gpio_csharp/RaspberryPiDotNet.dll を選択する。
 正しく読み込めたら、OKを押してプロジェクトの参照に登録します。ソースプログラムに戻ると赤の波線が消えて無くなっているのが分かると思います。無くなっていなかった場合、どこか間違えています。
 ビルドを行います。
メインメニューのビルド→「すべてビルド」を選びます。
エラーが無く、正常にビルドが終了すると、以下のようになります。

実行をするには、以下のようにしますが、回路が出来ていないと正解かどうか分かりません。ぶっ飛ぶかどうかのチェック位はできます。まぁ、回路に接続する前に、プログラムにもよりますが、一度は実行してみるのも良いと思います。

実行→「アプリケーションのデバッグ」を選びます。すると以下のようなものが出てきます。

コマンドの右側の参照ボタンをクリックします。
すると、どれを実行するかを聞いてきますので、Projects→LEDBlink→LEDBlink→bin→Debug の中にある実行型の「LEDBlink.exe」を選びます。
ここで、注意してもらいたいのは同じディレクトリの中に、RaspberryPiDotNet.dll があります。実行時には実行ファイルと同じ場所にこれが無ければいけないということです。
実行させるには、「OK」ボタンを押します。
LEDが点滅することを確認してください。
プログラムは無限ループですので、適切に終了させなければいけません。
それには、実行→「停止」を選択してください。



回路を作る
このプログラムはGPIO4即ち、ピン番号で言うと7番にLEDを繋げます。場所を間違えないように接続します。
回路図のように回路を作ります。接続は例えば下の写真のようになります。回路の実現方法は色々とありますので、各自可能な方法で作ってください。
写真LEDにはアノード側に抵抗が半田付けされているものを用いています。


 これで最低限のIOのコントロールの方法が分かりました。出力のみでしたが。

ターミナルから実行させる



ターミナルから実行させる
cd を用いてプロジェクトのDebugディレクトリまで行く。
行きたくない場合にはexeファイルまでのパスを記述する必要があります。
ここでは、単純にそこまで行ったことにします。
実行すべきファイルがLEDBlink.exeとします。exeという拡張子がついていますが、Linuxでは実行ファイルと言う意味ではありません。
単なる個々の識別の文字列なので実行できません。
このファイルのパーミッションを調べてみると -rw-r--r-- となっているので理解できると思います。
実行させるには、このファイルを実行できるようにパーミッションを変更する方法と、
そもそもこのファイルはVMで動かすのでVMを動かせばよいということになります。

その1 chmod +x ファイル名
   ./ファイル名
その2 mono ファイル名

で実行が出来ます。
実行ができるようになれば、このファイルをスクリプトから指定することもできます。


teratermでのコンパイル
teratermを用いてのコンパイルというよりは、GUIを用いないでターミナルからのコンパイルの方法及び実行方法です。
teratermを用いてのコンパイル
ここではmakefileを用いてみます。今までと同じにシェルスクリプトでも可能です。
しかし、ソースファイルが多くなった場合に備えてソースとオブジェクトの時間比較により、
コンパイルが必要かどうかを判断してくれるmakeコマンドを利用したほうが賢いでしょう。
 また、RaspberryPiDotNet.dllはコンパイル時、及び実行時に同じディレクトリにあったほうが便利なので、コピーしておきましょう。

cp /home/pi/gpio_csharp/RaspberryPiDotNet.dll .

  mekeコマンドはデフォールトでmakefileを読み込み実行します。
makefileの内容

blink.exe:     blink.cs
    csc /r:RaspberryPiDotNet.dll blink.cs


この場合の書式は

出来上がり: 部品
  部品を用いての作り方

です。

実行は、

make

一発です。

シェルスクリプトでコンパイルする場合は、例えば、

csc /r:/home/pi/gpio_csharp/RaspberryPiDotNet.dll $1

という内容で、例えばcsc.shという名前で作りこれを実行します。

./csc.sh LEDBlink.cs


終了の仕方、ターミナルで、コントロールを押しながらCを押します(^Cと記述します)。
それで止まらなかった場合は、別のターミナルからPIDを調べてkillします。