예제 #1
0
        public void GetFirmware()
        {
            const int    majorVersion = 3;
            const int    minorVersion = 7;
            const string Name         = "Arduino Firmata";

            var connection = new MockSerialConnection();
            var session    = new ArduinoSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion });
            connection.EnqueueResponse(Name.To14BitIso());
            connection.EnqueueResponse(0xF7);

            Firmware firmware = session.GetFirmware();

            Assert.AreEqual(firmware.MajorVersion, majorVersion);
            Assert.AreEqual(firmware.MinorVersion, minorVersion);
            Assert.AreEqual(firmware.Name, Name);
        }
예제 #2
0
        public ArduinoSession GetArduinoSession()
        {
            if (arduinoSession == null)
            {
                var connection = GetConnection();
                var session    = new ArduinoSession(connection);
                var firmware   = session.GetFirmware();
                if (firmware.MajorVersion >= 2)
                {
                    session.ResetBoard();
                    //步进电机
                    session.CreateStepperMoveCompleteMonitor().Monitor(f =>
                    {
                        GetStepperStep(f.DeviceNumber).Invoke(f.DeviceNumber);
                    });
                    session.CreateReceivedStringMonitor().Monitor(f =>
                    {
                    });

                    session.StepperConfiguration(0, new DeviceConfig
                    {
                        MotorInterface        = DeviceConfig.MotorInterfaceType.Driver,
                        StepOrPin1Number      = 26,
                        DirectionOrPin2Number = 28,
                        EnablePinNumber       = 24,
                        InvertEnablePinNumber = true
                    });
                    session.StepperEnable(0, true);
                    session.StepperSetSpeed(0, 32767);
                    session.StepperSetScceleration(0, 5000);
                    arduinoSession = session;
                }
                else
                {
                    session.Dispose();
                    throw new Exception("读取设备失败");
                }
            }
            return(arduinoSession);
        }
예제 #3
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();
        }
예제 #4
0
        public void GetFirmware()
        {
            const int majorVersion = 3;
            const int minorVersion = 7;
            const string Name = "Arduino Firmata";

            var connection = new MockSerialConnection();
            var session = new ArduinoSession(connection);

            connection.EnqueueRequestAndResponse(new byte[] { 0xF0, 0x79, 0xF7 }, new byte[] { 0xF0, 0x79, majorVersion, minorVersion });
            connection.EnqueueResponse(Name.To14BitIso());
            connection.EnqueueResponse(0xF7);

            Firmware firmware = session.GetFirmware();
            Assert.AreEqual(firmware.MajorVersion, majorVersion);
            Assert.AreEqual(firmware.MinorVersion, minorVersion);
            Assert.AreEqual(firmware.Name, Name);
        }