internal void OnDigitalPinChanged(byte pin, ArduinoDigitalValue state) { if (isDisposed) { return; } DigitalPinChanged?.Invoke(pin, state); }
/// <summary> /// Write to a digital pin that has been toggled to output mode with pinMode() method. /// </summary> /// <param name="pin">The digital pin to write to.</param> /// <param name="value">Value either Arduino.LOW or Arduino.HIGH.</param> public void DigitalWrite(int pin, ArduinoDigitalValue value) { int portNumber = (pin >> 3) & 0x0F; byte[] message = new byte[3]; if (value == ArduinoDigitalValue.LOW) { _digitalOutputData[portNumber] &= ~(1 << (pin & 0x07)); } else { _digitalOutputData[portNumber] |= (1 << (pin & 0x07)); } message[0] = (byte)((int)ArduinoMultiByteCommand.DIGITAL_MESSAGE | portNumber); message[1] = (byte)(_digitalOutputData[portNumber] & 0x7F); message[2] = (byte)(_digitalOutputData[portNumber] >> 7); _serialPort.Write(message, 0, message.Length); }