edu.wpi.first.wpilibj

## Class DigitalOutput

- java.lang.Object
- - edu.wpi.first.wpilibj.SensorBase
  - - edu.wpi.first.wpilibj.InterruptableSensorBase
    - - edu.wpi.first.wpilibj.DigitalSource
      - - edu.wpi.first.wpilibj.DigitalOutput

- All Implemented Interfaces:
    LiveWindowSendable, Sendable

      public class DigitalOutput
      extends DigitalSource
      implements LiveWindowSendable

  Class to write digital outputs. This class will write digital outputs. Other devices that are implemented elsewhere will automatically allocate digital inputs and outputs as required.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class edu.wpi.first.wpilibj.InterruptableSensorBase

      `InterruptableSensorBase.WaitResult`

  - ### Field Summary

    - ### Fields inherited from class edu.wpi.first.wpilibj.InterruptableSensorBase

      `m_interrupt, m_isSynchronousInterrupt`

    - ### Fields inherited from class edu.wpi.first.wpilibj.SensorBase

      `kAnalogInputChannels, kAnalogOutputChannels, kDigitalChannels, kPCMModules, kPDPChannels, kPDPModules, kPwmChannels, kRelayChannels, kSolenoidChannels, kSystemClockTicksPerMicrosecond`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DigitalOutput(int channel)` Create an instance of a digital output.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `disablePWM()` Change this line from a PWM output back to a static Digital Output line.
    `void` | `enablePWM(double initialDutyCycle)` Enable a PWM Output on this line.
    `void` | `free()` Free the resources associated with a digital output.
    `boolean` | `get()` Gets the value being output from the Digital Output.
    `int` | `getAnalogTriggerTypeForRouting()` Get the analog trigger type.
    `int` | `getChannel()` Get the GPIO channel number that this object represents.
    `int` | `getPortHandleForRouting()` Get the HAL Port Handle.
    `java.lang.String` | `getSmartDashboardType()` The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
    `void` | `initTable(NetworkTable subtable)` Initializes a table for this `Sendable` object.
    `boolean` | `isAnalogTrigger()` Is this an analog trigger.
    `boolean` | `isPulsing()` Determine if the pulse is still going.
    `void` | `pulse(double pulseLength)` Generate a single pulse.
    `void` | `set(boolean value)` Set the value of a digital output.
    `void` | `setPWMRate(double rate)` Change the PWM frequency of the PWM output on a Digital Output line.
    `void` | `startLiveWindowMode()` Start having this sendable object automatically respond to value changes reflect the value on the table.
    `void` | `stopLiveWindowMode()` Stop having this sendable object automatically respond to value changes.
    `void` | `updateDutyCycle(double dutyCycle)` Change the duty-cycle that is being generated on the line.
    `void` | `updateTable()` Update the table for this sendable object with the latest values.

    - ### Methods inherited from class edu.wpi.first.wpilibj.InterruptableSensorBase

      `allocateInterrupts, cancelInterrupts, disableInterrupts, enableInterrupts, readFallingTimestamp, readRisingTimestamp, requestInterrupts, requestInterrupts, setUpSourceEdge, waitForInterrupt, waitForInterrupt`

    - ### Methods inherited from class edu.wpi.first.wpilibj.SensorBase

      `checkAnalogInputChannel, checkAnalogOutputChannel, checkDigitalChannel, checkPDPChannel, checkPDPModule, checkPWMChannel, checkRelayChannel, checkSolenoidChannel, checkSolenoidModule, getDefaultSolenoidModule, setDefaultSolenoidModule`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### DigitalOutput

          public DigitalOutput(int channel)

      Create an instance of a digital output. Create an instance of a digital output given a channel.
      Parameters:
        `channel` - the DIO channel to use for the digital output. 0-9 are on-board, 10-25 are on the MXP

  - ### Method Detail

    - #### free

          public void free()

      Free the resources associated with a digital output.
      Overrides:
        `free` in class `SensorBase`

    - #### set

          public void set(boolean value)

      Set the value of a digital output.
      Parameters:
        `value` - true is on, off is false

    - #### get

          public boolean get()

      Gets the value being output from the Digital Output.
      Returns:
        the state of the digital output.

    - #### getChannel

          public int getChannel()

      Get the GPIO channel number that this object represents.
      Specified by:
        `getChannel` in class `DigitalSource`
      Returns:
        The GPIO channel number.

    - #### pulse

          public void pulse(double pulseLength)

      Generate a single pulse. There can only be a single pulse going at any time.
      Parameters:
        `pulseLength` - The length of the pulse.

    - #### isPulsing

          public boolean isPulsing()

      Determine if the pulse is still going. Determine if a previously started pulse is still going.
      Returns:
        true if pulsing

    - #### setPWMRate

          public void setPWMRate(double rate)

      Change the PWM frequency of the PWM output on a Digital Output line.

      The valid range is from 0.6 Hz to 19 kHz. The frequency resolution is logarithmic.

      There is only one PWM frequency for all channels.

      Parameters:
        `rate` - The frequency to output all digital output PWM signals.

    - #### enablePWM

          public void enablePWM(double initialDutyCycle)

      Enable a PWM Output on this line.

      Allocate one of the 6 DO PWM generator resources.

      Supply the initial duty-cycle to output so as to avoid a glitch when first starting.

      The resolution of the duty cycle is 8-bit for low frequencies (1kHz or less) but is reduced the higher the frequency of the PWM signal is.

      Parameters:
        `initialDutyCycle` - The duty-cycle to start generating. [0..1]

    - #### disablePWM

          public void disablePWM()

      Change this line from a PWM output back to a static Digital Output line.

      Free up one of the 6 DO PWM generator resources that were in use.

    - #### updateDutyCycle

          public void updateDutyCycle(double dutyCycle)

      Change the duty-cycle that is being generated on the line.

      The resolution of the duty cycle is 8-bit for low frequencies (1kHz or less) but is reduced the higher the frequency of the PWM signal is.

      Parameters:
        `dutyCycle` - The duty-cycle to change to. [0..1]

    - #### getAnalogTriggerTypeForRouting

          public int getAnalogTriggerTypeForRouting()

      Get the analog trigger type.
      Specified by:
        `getAnalogTriggerTypeForRouting` in class `InterruptableSensorBase`
      Returns:
        false

    - #### isAnalogTrigger

          public boolean isAnalogTrigger()

      Is this an analog trigger.
      Specified by:
        `isAnalogTrigger` in class `DigitalSource`
      Returns:
        true if this is an analog trigger

    - #### getPortHandleForRouting

          public int getPortHandleForRouting()

      Get the HAL Port Handle.
      Specified by:
        `getPortHandleForRouting` in class `InterruptableSensorBase`
      Returns:
        The HAL Handle to the specified source.

    - #### getSmartDashboardType

          public java.lang.String getSmartDashboardType()

      Description copied from interface: `Sendable`
      The string representation of the named data type that will be used by the smart dashboard for this `Sendable`.
      Specified by:
        `getSmartDashboardType` in interface `Sendable`
      Returns:
        The type of this `Sendable`.

    - #### initTable

          public void initTable(NetworkTable subtable)

      Description copied from interface: `Sendable`
      Initializes a table for this `Sendable` object.
      Specified by:
        `initTable` in interface `Sendable`
      Parameters:
        `subtable` - The table to put the values in.

    - #### updateTable

          public void updateTable()

      Description copied from interface: `LiveWindowSendable`
      Update the table for this sendable object with the latest values.
      Specified by:
        `updateTable` in interface `LiveWindowSendable`

    - #### startLiveWindowMode

          public void startLiveWindowMode()

      Description copied from interface: `LiveWindowSendable`
      Start having this sendable object automatically respond to value changes reflect the value on the table.
      Specified by:
        `startLiveWindowMode` in interface `LiveWindowSendable`

    - #### stopLiveWindowMode

          public void stopLiveWindowMode()

      Description copied from interface: `LiveWindowSendable`
      Stop having this sendable object automatically respond to value changes.
      Specified by:
        `stopLiveWindowMode` in interface `LiveWindowSendable`