Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
        }
Пример #5
0
        } = 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();
        }
Пример #6
0
 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);
     }
 }
Пример #7
0
        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.");
        }
Пример #8
0
        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.");
        }