public void Clear() { Value = 0; Direction = EPinDirection.Disconnected; Mode = EPinOperatingMode.None; Busy = false; }
public PinState(int id) { Id = id; Value = 0; Direction = EPinDirection.Disconnected; Mode = EPinOperatingMode.None; Busy = false; FrequencyHz = 20000; FrequencyMultiplier = 1; DutyCycle = 511; }
/// <summary> /// Read the pin's last known value. Will configure the pin for input if necessary. /// </summary> /// <param name="pin">The id of the pin.</param> /// <param name="operatingMode">The operating mode of the pin.</param> /// <param name="pullMode">The pull mode of the pin. Applicable for digital inputs only.</param> /// <returns>The most recent sampled pin value.</returns> public int ReadPinValue(int pin, EPinOperatingMode operatingMode, EPinPullMode pullMode = EPinPullMode.PullNone) { if (!_port.IsOpen || _status != EDeviceStatus.READY) { return(0); } if (pin < 0 || pin > 2) { return(0); } // If this pin is already configured for input, return the current value. if (_curr.Pins[pin].Mode == operatingMode) { return(_curr.Pins[pin].Value); } _curr.Pins[pin].Mode = operatingMode; _curr.Pins[pin].Value = 0; MicroBitMessageWriter writer = new MicroBitMessageWriter(); writer.WriteChar(Protocol.CMD_CONFIG_INPUT_PIN); writer.WriteU8Hex(pin); if (operatingMode == EPinOperatingMode.Analog) { writer.WriteU8Hex((int)EPinAnalogMode.In); } else { writer.WriteU8Hex((int)EPinDigitalMode.In); writer.WriteU8Hex((int)pullMode); } QueueForSend(writer.ToString()); return(0); }
/// <summary> /// Set the pin's output value. Will configure the pin for output if necessary. /// </summary> /// <param name="pin">The id of the pin.</param> /// <param name="value">The value to set.</param> /// <param name="operatingMode">The operating mode of the pin.</param> public void SetPinValue(int pin, int value, EPinOperatingMode operatingMode) { if (!_port.IsOpen || _status != EDeviceStatus.READY) { return; } if (pin < 0 || pin > 2) { return; } if (value < 0 || value > 0xff) { return; } if (_curr.Pins[pin].Busy) { return; } // Don't send the same value over and over. if (_curr.Pins[pin].Mode == operatingMode && _curr.Pins[pin].Value == value) { return; } _curr.Pins[pin].Mode = operatingMode; _curr.Pins[pin].Value = value; MicroBitMessageWriter writer = new MicroBitMessageWriter(); writer.WriteChar(Protocol.CMD_SET_PIN_VALUE); writer.WriteU8Hex(pin); writer.WriteU8Hex(operatingMode == EPinOperatingMode.Digital ? (int)EPinDigitalMode.Out : (int)EPinAnalogMode.Out); writer.WriteU16Hex(value); QueueForSend(writer.ToString()); }