web-dev-qa-db-ja.com

C / C ++プログラムからLEDを点滅させる手順は?

C/C++プログラムからLEDフラッシュで小さな回路を作る最も簡単なステップは何ですか?

必要な依存関係とパッケージの数を最小限に抑えたいと思います。

  • どのポートに何かを接続しますか?
  • どのコンパイラを使用しますか?
  • そのポートにデータを送信するにはどうすればよいですか?
  • マイクロプロセッサが必要ですか?そうでない場合は、この単純なプロジェクトに使用したくありません。

編集:OS固有のソリューションに興味があります。

13
Brian R. Bondy

パラレルポート でそれを行うためのチュートリアルがあります。

Arduino をお勧めしますが、これは非常に安価に購入でき、次のコードのみが含まれます。

/* Blinking LED
 * ------------
 *
 * turns on and off a light emitting diode(LED) connected to a digital  
 * pin, in intervals of 2 seconds. Ideally we use pin 13 on the Arduino 
 * board because it has a resistor attached to it, needing only an LED

 * 
 * Created 1 June 2005
 * copyleft 2005 DojoDave <http://www.0j0.org>
 * http://arduino.berlios.de
 *
 * based on an orginal by H. Barragan for the Wiring i/o board
 */

int ledPin = 13;                 // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}

alt text

http://www.arduino.cc/en/Tutorial/BlinkingLED

17
mwilliams

どのポート?パラレルポートは+ 5V(TTLロジックレベル)を出力し、プログラミングが非常に簡単なので、私のお気に入りの選択肢です。ほとんどのパラレルポートには、LEDを駆動するのに十分な電力があります。一般に、コンピュータポートは信号電圧のみを出力するように設計されており、ほとんどのデバイスに実際に電力を供給するのに十分な電流を生成しないことを覚えておくことが重要です。

どのコンパイラ?関係ありません。ただし、この種のハードウェアハッキングは、Linuxではより楽しく簡単なので、GCCが適しています。

データを送信するにはどうすればよいですか?ポートとオペレーティングシステムによって異なります。 USBは単純なプロジェクトでは恐ろしく複雑なので、忘れてください。シリアルポートとパラレルポートは、さまざまなインターフェイスを介して制御できます。私の好みは、Linuxでioctl()システムコールを使用して、パラレルポートピンを直接制御することです。これを行う方法に関する情報は次のとおりです。 http://www.linuxfocus.org/common/src/article205/ppdev.html

マイクロプロセッサが必要ですか?いいえ、外部デバイスにマイクロプロセッサは必要ありません(明らかに、コンピュータにはマイクロプロセッサがあります:-P)。パラレルポートまたはシリアルポートを使用する場合は、LEDと抵抗器または2つと、LEDを直接接続するために必要な部品を使用するだけです。

(また、オンラインで無料で入手できるLinux Device Drivers bookには、単純な電子デバイスをパラレルポートに接続し、それらのカーネルドライバーを作成する方法に関する情報があります。)

EDIT:このスレッドでは、「マイクロプロセッサが必要ですか?」というOPの意味について大きな混乱が生じているようです。明らかに、パラレルポートだけでソフトウェアコンピュータ内に基づいてLEDを駆動できます。デバイスにマイクロプロセッサは必要ありません。ただし、デバイスがそれ自体を制御できるようにする場合はコンピューターに接続せずに、マイクロプロセッサーまたはその他のデジタルロジックisが必要です。

6
Dan Lenski

マイクロプロセッサなしでLEDを点滅させたい場合(C/C++がないことを意味します)、555タイマーICを使用した単純な回路でうまくいきます。これらは、初心者の愛好家向け電子機器の本やキットで一般的なプロジェクトです。これらは非常にシンプルで、RadioShackのどのタイプの場所でも部品を入手できるためです。

Vlionが言及 のように、ソフトウェアでそれを実行したい場合、すべては使用されているハードウェアとLEDを接続する回路の設計に依存します。

PCで何かを試したい場合は、PCのパラレルポートのピンに接続されているLEDを点滅させる方法に関する記事を次に示します。

2
Michael Burr

迅速でダーティな操作のために、シリアルポートまたはパラレルポートの2つの簡単なオプションがあります。シリアルポートは簡単ですが、LEDの数に制限があります。

LEDを接続するには、正しい性別のシェルコネクタ(DB25/DB9)、LED、および抵抗が必要です。抵抗器の値を自分で調べる必要があります。

シリアルポートには、プログラマーの制御下にある制御フロー信号があります。 (シリアルポートを開いた後)MCRレジスタに正しいビットを出力するのは簡単なことです。

パラレルポートは、ハンドシェイクを行う必要があるという点で少し難しいですが、一般的にはレジスタへの書き込みと同じ原理です。

ポートを制御するには、OSと戦わなければならない場合があります。

出てくる信号は送信レジスタに書き込まれたデータのシリアルビットストリームであるため、Txラインの使用はやや複雑です。私はCTSとDSR信号に固執します。

迅速で汚いデバッグのために、私はレジスターに書き込み、モデムのライトを見ました。

1
dar7yl

シリアルポートの送信(ピン3)からアース(ピン5)にLEDと300オームの抵抗を配置してみてください。次に、データを送信してオンにします。

シリアルポートはおそらく10mAしか供給できません。

幸運を。

1
Robert

OSにもよります。 Linuxでは、LEDをパラレルポートに直接配線し(もちろん、適切な電流制限抵抗を使用)、C関数「outb()」を使用してオンとオフを切り替えることができます。

Windowsでは、OSがユーザーアプリケーションにポートと直接通信させないため、はるかに複雑です。

0
nobody

これを行う最も簡単なポートは、シリアルまたはパラレルです。 LEDと直列に抵抗を配置することを常に忘れないでください。そうしないと、焼損してしまいます。

0
Tanj