Example #1
0
 public void Clear()
 {
     Value     = 0;
     Direction = EPinDirection.Disconnected;
     Mode      = EPinOperatingMode.None;
     Busy      = false;
 }
Example #2
0
 public PinState(int id)
 {
     Id                  = id;
     Value               = 0;
     Direction           = EPinDirection.Disconnected;
     Mode                = EPinOperatingMode.None;
     Busy                = false;
     FrequencyHz         = 20000;
     FrequencyMultiplier = 1;
     DutyCycle           = 511;
 }
Example #3
0
        /// <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);
        }
Example #4
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());
        }