public void GetBoardCapability() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO/I2C, 0/1/2/3/4/6 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(0, 1, 1, 1, 3, 10, 6, 1, 0x7F); connection.EnqueueResponse(0xF7); BoardCapability capability = session.GetBoardCapability(); Assert.AreEqual(1, capability.Pins.Length); Assert.AreEqual(0, capability.Pins[0].PinNumber); Assert.AreEqual(true, capability.Pins[0].DigitalInput); Assert.AreEqual(true, capability.Pins[0].DigitalOutput); Assert.AreEqual(true, capability.Pins[0].Pwm); Assert.AreEqual(10, capability.Pins[0].PwmResolution); Assert.AreEqual(true, capability.Pins[0].I2C); Assert.AreEqual(false, capability.Pins[0].Analog); Assert.AreEqual(0, capability.Pins[0].AnalogResolution); Assert.AreEqual(false, capability.Pins[0].Servo); Assert.AreEqual(0, capability.Pins[0].ServoResolution); }
private static void DisplayPortCapabilities() { using (var session = new ArduinoSession(new EnhancedSerialConnection("COM4", SerialBaudRate.Bps_57600))) { session.StringReceived += (object sender, StringEventArgs eventArgs) => { Console.WriteLine(eventArgs.Text); }; BoardCapability cap = session.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capability:"); foreach (var pin in cap.Pins) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } } }
public void GetBoardCapabilityAsync() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO, 0/1/2/3/4 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(2, 8, 0x7F); connection.EnqueueResponse(0, 1, 1, 1, 0x7F); connection.EnqueueResponse(1, 1, 3, 7, 4, 7, 0x7F); connection.EnqueueResponse(0xF7); BoardCapability capability = session.GetBoardCapabilityAsync().Result; Assert.AreEqual(3, capability.PinCapabilities.Length); Assert.AreEqual(0, capability.PinCapabilities[0].PinNumber); Assert.AreEqual(false, capability.PinCapabilities[0].DigitalInput); Assert.AreEqual(false, capability.PinCapabilities[0].DigitalOutput); Assert.AreEqual(true, capability.PinCapabilities[0].Analog); Assert.AreEqual(8, capability.PinCapabilities[0].AnalogResolution); Assert.AreEqual(false, capability.PinCapabilities[0].Pwm); Assert.AreEqual(0, capability.PinCapabilities[0].PwmResolution); Assert.AreEqual(false, capability.PinCapabilities[0].Servo); Assert.AreEqual(0, capability.PinCapabilities[0].ServoResolution); Assert.AreEqual(1, capability.PinCapabilities[1].PinNumber); Assert.AreEqual(true, capability.PinCapabilities[1].DigitalInput); Assert.AreEqual(true, capability.PinCapabilities[1].DigitalOutput); Assert.AreEqual(false, capability.PinCapabilities[1].Analog); Assert.AreEqual(0, capability.PinCapabilities[1].AnalogResolution); Assert.AreEqual(false, capability.PinCapabilities[1].Pwm); Assert.AreEqual(0, capability.PinCapabilities[1].PwmResolution); Assert.AreEqual(false, capability.PinCapabilities[1].Servo); Assert.AreEqual(0, capability.PinCapabilities[1].ServoResolution); Assert.AreEqual(2, capability.PinCapabilities[2].PinNumber); Assert.AreEqual(false, capability.PinCapabilities[2].DigitalInput); Assert.AreEqual(true, capability.PinCapabilities[2].DigitalOutput); Assert.AreEqual(false, capability.PinCapabilities[2].Analog); Assert.AreEqual(0, capability.PinCapabilities[2].AnalogResolution); Assert.AreEqual(true, capability.PinCapabilities[2].Pwm); Assert.AreEqual(7, capability.PinCapabilities[2].PwmResolution); Assert.AreEqual(true, capability.PinCapabilities[2].Servo); Assert.AreEqual(7, capability.PinCapabilities[2].ServoResolution); }
public void RequestBoardCapability() { var connection = new MockSerialConnection(); var session = CreateFirmataSession(connection); // DIGITAL INPUT/DIGITAL OUTPUT/ANALOG/PWM/SERVO, 0/1/2/3/4 connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x6B, 0xF7 }, 0xF0, 0x6C); connection.EnqueueResponse(2, 8, 0x7F); connection.EnqueueResponse(0, 127, 1, 127, 0x7F); connection.EnqueueResponse(0xF7); session.RequestBoardCapability(); IFirmataMessage message = _messagesReceived.Dequeue(); //Assert.AreEqual(MessageType.CapabilityResponse, message.Type); Assert.IsInstanceOfType(message, typeof(FirmataMessage <BoardCapability>)); BoardCapability capability = (BoardCapability)message.Value; Assert.AreEqual(2, capability.Pins.Length); Assert.AreEqual(0, capability.Pins[0].PinNumber); Assert.AreEqual(false, capability.Pins[0].DigitalInput); Assert.AreEqual(false, capability.Pins[0].DigitalOutput); Assert.AreEqual(true, capability.Pins[0].Analog); Assert.AreEqual(8, capability.Pins[0].AnalogResolution); Assert.AreEqual(false, capability.Pins[0].Pwm); Assert.AreEqual(0, capability.Pins[0].PwmResolution); Assert.AreEqual(false, capability.Pins[0].Servo); Assert.AreEqual(0, capability.Pins[0].ServoResolution); Assert.AreEqual(1, capability.Pins[1].PinNumber); Assert.AreEqual(true, capability.Pins[1].DigitalInput); Assert.AreEqual(true, capability.Pins[1].DigitalOutput); Assert.AreEqual(false, capability.Pins[1].Analog); Assert.AreEqual(0, capability.Pins[1].AnalogResolution); Assert.AreEqual(false, capability.Pins[1].Pwm); Assert.AreEqual(0, capability.Pins[1].PwmResolution); Assert.AreEqual(false, capability.Pins[1].Servo); Assert.AreEqual(0, capability.Pins[1].ServoResolution); }
} = null; //To be supplied externally public ArduinoDeviceManager(ArduinoSession firmata, Action <ADMMessage, ArduinoDeviceManager> listener, String port, String nodeID = null) { State = ADMState.CONNECTING; _devices = new Dictionary <String, ArduinoDevice>(); _device2boardID = new Dictionary <String, byte>(); _boardID2device = new Dictionary <byte, ArduinoDevice>(); _pin2device = new Dictionary <int, List <ArduinoDevice> >(); _portStates = new Dictionary <int, DigitalPortState>(); _session = firmata; _listener = listener; _session.MessageReceived += HandleFirmataMessageReceived; _session.ProcessMessageException += HandleFirmataProcessMessageException; Port = port; NodeID = nodeID; _session.ID = PortAndNodeID; _firmware = _session.GetFirmware(); #if DEBUG Debug.Print(String.Format("{0}: Firmware: {1} version {2}.{3}", PortAndNodeID, _firmware.Name, _firmware.MajorVersion, _firmware.MinorVersion)); #endif _protocolVersion = _session.GetProtocolVersion(); #if DEBUG Debug.Print(String.Format("{0}: Firmata protocol version {1}.{2}", PortAndNodeID, _protocolVersion.Major, _protocolVersion.Minor)); #endif _boardCapability = _session.GetBoardCapability(); State = ADMState.CONNECTED; //if here and no exceptions then the connection should be good //so initialise the board Initialise(); //and request board status RequestStatus(); }
private void compatibilityTest() { if (this._session != null) { this._firmware = this._session.GetFirmware(); Console.WriteLine( $"Firmware: {this._firmware.Name}, version : {this._firmware.MajorVersion}.{this._firmware.MinorVersion}"); this._protocal = this._session.GetProtocolVersion(); Console.WriteLine($"Firmata protocol version : {this._protocal.Major}.{this._protocal.Minor}"); this._compatibility = this._session.GetBoardCapability(); Console.WriteLine("Board Capability List,"); foreach (var pin in this._compatibility.Pins) { Console.WriteLine( "Pin {0}\t: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, " + "Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } Console.WriteLine("Press any key to proceed ..."); Console.ReadKey(true); } }
static void SimpelTest(ISerialConnection connection) { var session = new ArduinoSession(connection, timeOut: 2500); IFirmataProtocol firmata = session; firmata.AnalogStateReceived += Session_OnAnalogStateReceived; firmata.DigitalStateReceived += Session_OnDigitalStateReceived; Firmware firm = firmata.GetFirmware(); Console.WriteLine(); Console.WriteLine("Firmware: {0} {1}.{2}", firm.Name, firm.MajorVersion, firm.MinorVersion); Console.WriteLine(); ProtocolVersion version = firmata.GetProtocolVersion(); Console.WriteLine(); Console.WriteLine("Protocol version: {0}.{1}", version.Major, version.Minor); Console.WriteLine(); BoardCapability cap = firmata.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capability:"); foreach (var pin in cap.Pins) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}, Serial: {9}, Encoder: {10}, Input-pullup: {11}", pin.PinNumber, pin.DigitalInput, pin.DigitalOutput, pin.Analog, pin.AnalogResolution, pin.Pwm, pin.PwmResolution, pin.Servo, pin.ServoResolution, pin.Serial, pin.Encoder, pin.InputPullup); } Console.WriteLine(); var analogMapping = firmata.GetBoardAnalogMapping(); Console.WriteLine("Analog channel mappings:"); foreach (var mapping in analogMapping.PinMappings) { Console.WriteLine("Channel {0} is mapped to pin {1}.", mapping.Channel, mapping.PinNumber); } firmata.ResetBoard(); Console.WriteLine(); Console.WriteLine("Digital port states:"); foreach (var pincap in cap.Pins.Where(c => (c.DigitalInput || c.DigitalOutput) && !c.Analog)) { var pinState = firmata.GetPinState(pincap.PinNumber); Console.WriteLine("Pin {0}: Mode = {1}, Value = {2}", pincap.PinNumber, pinState.Mode, pinState.Value); } Console.WriteLine(); firmata.SetDigitalPort(0, 0x04); firmata.SetDigitalPort(1, 0xff); firmata.SetDigitalPinMode(10, PinMode.DigitalOutput); firmata.SetDigitalPinMode(11, PinMode.ServoControl); firmata.SetDigitalPin(11, 90); Thread.Sleep(500); int hi = 0; for (int a = 0; a <= 179; a += 1) { firmata.SetDigitalPin(11, a); Thread.Sleep(100); firmata.SetDigitalPort(1, hi); hi ^= 4; Console.Write("{0};", a); } Console.WriteLine(); Console.WriteLine(); firmata.SetDigitalPinMode(6, PinMode.DigitalInput); //firmata.SetDigitalPortState(2, 255); //firmata.SetDigitalPortState(3, 255); firmata.SetSamplingInterval(500); firmata.SetAnalogReportMode(0, true); Console.WriteLine("Setting digital report modes:"); firmata.SetDigitalReportMode(0, true); firmata.SetDigitalReportMode(1, true); firmata.SetDigitalReportMode(2, true); Console.WriteLine(); foreach (var pinCap in cap.Pins.Where(c => (c.DigitalInput || c.DigitalOutput) && !c.Analog)) { PinState state = firmata.GetPinState(pinCap.PinNumber); Console.WriteLine("Digital {1} pin {0}: {2}", state.PinNumber, state.Mode, state.Value); } Console.WriteLine(); Console.ReadLine(); firmata.SetAnalogReportMode(0, false); firmata.SetDigitalReportMode(0, false); firmata.SetDigitalReportMode(1, false); firmata.SetDigitalReportMode(2, false); Console.WriteLine("Ready."); }
static void SimpelTest() { var connection = new EnhancedSerialConnection("COM6", SerialBaudRate.Bps_57600); var session = new ArduinoSession(connection, timeOut: 250); IFirmataProtocol firmata = session; firmata.AnalogStateReceived += session_OnAnalogStateReceived; firmata.DigitalStateReceived += session_OnDigitalStateReceived; Firmware firm = firmata.GetFirmware(); Console.WriteLine(); Console.WriteLine("Firmware: {0} {1}.{2}", firm.Name, firm.MajorVersion, firm.MinorVersion); Console.WriteLine(); ProtocolVersion version = firmata.GetProtocolVersion(); Console.WriteLine(); Console.WriteLine("Protocol version: {0}.{1}", version.Major, version.Minor); Console.WriteLine(); BoardCapability caps = firmata.GetBoardCapability(); Console.WriteLine(); Console.WriteLine("Board Capabilities:"); foreach (var pincap in caps.PinCapabilities) { Console.WriteLine("Pin {0}: Input: {1}, Output: {2}, Analog: {3}, Analog-Res: {4}, PWM: {5}, PWM-Res: {6}, Servo: {7}, Servo-Res: {8}", pincap.PinNumber, pincap.DigitalInput, pincap.DigitalOutput, pincap.Analog, pincap.AnalogResolution, pincap.Pwm, pincap.PwmResolution, pincap.Servo, pincap.ServoResolution); } Console.WriteLine(); var analogMapping = firmata.GetBoardAnalogMapping(); Console.WriteLine("Analog channel mappings:"); foreach (var mapping in analogMapping.PinMappings) { Console.WriteLine("Channel {0} is mapped to pin {1}.", mapping.Channel, mapping.PinNumber); } firmata.ResetBoard(); Console.WriteLine(); Console.WriteLine("Digital port states:"); for (int x = 0; x < 20; x++) { var pinState = firmata.GetPinState(x); Console.WriteLine("Pin {0}: Mode = {1}, Value = {2}", x, pinState.Mode, pinState.Value); } Console.WriteLine(); firmata.SetDigitalPort(0, 0x04); firmata.SetDigitalPort(1, 0xff); firmata.SetDigitalPinMode(10, PinMode.DigitalOutput); firmata.SetDigitalPinMode(11, PinMode.ServoControl); firmata.SetDigitalPin(11, 90); Thread.Sleep(500); int hi = 0; for (int a = 0; a <= 179; a += 1) { firmata.SetDigitalPin(11, a); Thread.Sleep(100); firmata.SetDigitalPort(1, hi); hi ^= 4; Console.Write("{0};", a); } Console.WriteLine(); Console.WriteLine(); firmata.SetDigitalPinMode(6, PinMode.DigitalInput); //firmata.SetDigitalPortState(2, 255); //firmata.SetDigitalPortState(3, 255); firmata.SetSamplingInterval(500); firmata.SetAnalogReportMode(0, false); firmata.SetDigitalReportMode(0, true); firmata.SetDigitalReportMode(1, true); firmata.SetDigitalReportMode(2, true); for (int x = 0; x < 20; x++) { PinState state = firmata.GetPinState(x); Console.WriteLine("Digital {1} pin {0}: {2}", x, state.Mode, state.Value); } Console.WriteLine(); Console.ReadLine(); firmata.SetAnalogReportMode(0, false); firmata.SetDigitalReportMode(0, false); firmata.SetDigitalReportMode(1, false); firmata.SetDigitalReportMode(2, false); Console.WriteLine("Ready."); }