Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
digitalWrite()

digitalWrite()

概要

指定したピンにHIGHもしくはLOWを出力します。Atmel社提供のライブラリ群を呼び出すことで実現しています。

digitalWrite()のリファレンスはこちらをご覧ください。

ソースコード

digitalWrite()は、hardware/arduino/sam/cores/arduino/wiring_digital.c に定義されています。以下に全ソースコードを示します。

extern void digitalWrite( uint32_t ulPin, uint32_t ulVal )
{
  /* Handle */
        if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
  {
    return ;
  }

  if ( PIO_GetOutputDataStatus( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin ) == 0 )
  {
    PIO_PullUp( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin, ulVal ) ;
  }
  else
  {
    PIO_SetOutput( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin, ulVal, 0, PIO_PULLUP ) ;
  }
}
extern void digitalWrite( uint32_t ulPin, uint32_t ulVal )
{

入力は、ピン番号(ulPin)とそのピンに出力する値(ulVal)です。

  /* Handle */
        if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
  {
    return ;
  }

入力されたピン番号に対応するピンタイプ(g_APinDescription[ulPin].ulPinType)がPIO_NOT_A_PINであれば、何もせずに終了します。g_APinDescriptionにはArduinoの全てのピンの情報が定義されています。g_APinDescription[ulPin].ulPinTypeにPIO_NOT_A_PINが設定されているのは番兵だけです。

  if ( PIO_GetOutputDataStatus( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin ) == 0 )
  {
    PIO_PullUp( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin, ulVal ) ;
  }
  else
  {
    PIO_SetOutput( g_APinDescription[ulPin].pPort, g_APinDescription[ulPin].ulPin, ulVal, 0, PIO_PULLUP ) ;
  }
}

PIO_GetOutputDataStatus()の値によって分岐します。PIO_GetOutputDataStatus()は、ピンが出力モードに設定されているかどうかを調べる関数です。戻り値が1のときは出力モードに設定されています。

PIO_GetOutputDataStatus()の値が0のとき(ピンが入力モードのとき)は、PIO_PullUp()を呼び出してプルアップ抵抗を制御します。

0以外のとき(ピンが出力モードのとき)は、PIO_SetOutput()を呼び出し、ピンに値を出力します。

バージョン

Arduino 1.5



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2013 garretlab all rights reserved.
inserted by FC2 system