sendDigitalPort(byte portNumber, int portData); //send an 8-bit port in a single digital message
session = new ArduinoSession(connection);
session.SetDigitalPinMode(2, PinMode.InputPullup);
session.SetDigitalReportMode(0, true);
session.DigitalStateReceived += Session_OnDigitalStateReceived;
...
private void Session_OnDigitalStateReceived(object sender, FirmataEventArgs<DigitalPortState> eventArgs)
{
var isSet = eventArgs.Value.IsSet(2);
Console.WriteLine($"Message is for port {eventArgs.Value.Port}. Pin2 value= {isSet}");
session.SetDigitalPin(10, isSet);
}
private Dictionary<int, bool> pinStates = new Dictionary<int, bool>();
private void Session_OnDigitalStateReceived(object sender, FirmataEventArgs<DigitalPortState> eventArgs)
{
var basePin = eventArgs.Value.Port * 8;
for (var portPin = 0; portPin < 8; portPin++)
{
var fullPin = basePin + portPin;
var isSet = eventArgs.Value.IsSet(portPin);
if (!pinStates.ContainsKey(fullPin))
{
pinStates.Add(fullPin, !isSet);
}
if (isSet == pinStates[fullPin]) continue;
pinStates[fullPin] = isSet;
Console.WriteLine($"Port {eventArgs.Value.Port}, Pin {portPin} (Pin #{fullPin}) changed to {isSet}");
}
}