public PhidgetMotor(MotorCallback p, int motorIndex = 0) { try { pCallback = p; motoControl = new MotorControl(); m_motorIndex = motorIndex; motoControl.Attach += new AttachEventHandler(motoControl_Attach); motoControl.Detach += new DetachEventHandler(motoControl_Detach); motoControl.Error += new ErrorEventHandler(motoControl_Error); motoControl.CurrentChange += new CurrentChangeEventHandler(motoControl_CurrentChange); motoControl.InputChange += new InputChangeEventHandler(motoControl_InputChange); motoControl.VelocityChange += new VelocityChangeEventHandler(motoControl_VelocityChange); motoControl.BackEMFUpdate += new BackEMFUpdateEventHandler(motoControl_BackEMFUpdate); motoControl.EncoderPositionChange += new EncoderPositionChangeEventHandler(motoControl_EncoderPositionChange); motoControl.SensorUpdate += new SensorUpdateEventHandler(motoControl_SensorUpdate); NewMaxLength = 0; NewMinLength = 0; openCmdLine(motoControl); } catch (Exception err) { throw (new SystemException(err.Message)); } }
//When the form is being close, make sure to stop all the motors and close the Phidget. public void stopMotorControl() { /* * motoControl.Attach -= motoControl_Attach; * motoControl.Detach -= motoControl_Detach; * motoControl.Error -= motoControl_Error; * * motoControl.InputChange -= motoControl_InputChange; * motoControl.CurrentChange -= motoControl_CurrentChange; * motoControl.VelocityChange -= motoControl_VelocityChange; * motoControl.BackEMFUpdate -= motoControl_BackEMFUpdate; * motoControl.EncoderPositionChange -= motoControl_EncoderPositionChange; * motoControl.SensorUpdate -= motoControl_SensorUpdate; */ if (motoControl.Attached) { foreach (MotorControlMotor motor in motoControl.motors) { motor.Velocity = 0; } } //run any events in the message queue - otherwise close will hang if there are any outstanding events //Application.DoEvents(); motoControl.close(); motoControl = null; }
/// <summary> /// Metoda pro otaceni obrazkem motoru /// </summary> /// <param name="parameters">struktura s parametry otaceni</param> public void rotateImage(MotorControl.RotParameters parameters) { rotParameters = parameters; rotateTimer.Interval = rotParameters.speed; // nastaveni intervalu timeru podle rychlosti otaceni if (rotParameters.sectors == false) { // pokud se ma otacet po krocich ( ne po sektorech ) rotate(); // otoceni o jeden krok a spusteni otaceni pres timer rotParameters.steps--; // otoceno o jeden krok - dekrementace } else { // otaci se po sektorech if (rotParameters.direction == MotorControl.Direction.Left) { // toci se vlevo sectorSteps = (50 * (rotParameters.steps - 1)) + (50 - (position % 50)); rotParameters.steps = sectorSteps; } else { // toci se vpravo sectorSteps = (50 * (rotParameters.steps - 1)) + ((position % 50) == 0 ? 50 : (position % 50)); rotParameters.steps = sectorSteps; } rotate(); // otoceni o jeden krok a spusteni otaceni pres timer rotParameters.steps--; // otoceno o jeden krok - dekrementace } }
public MotorControl motoControl = null; //Declare a MotorControl object public void setMotorState(Boolean state) { if (state == true) { if (motoControl == null) { //loadMotorControl(); motoControl = new MotorControl(); motoControl.open(-1); } int i = 0, k = 0; for (i = 0; i < 999999; i++) { k++; } k--; setVelocity(100); } else { if (motoControl != null) { //resetEncoder(); //stopMotorControl(); foreach (MotorControlMotor motor in motoControl.motors) { motor.Velocity = 0; } motoControl.close(); motoControl = null; } } }
//When the form is being close, make sure to stop all the motors and close the Phidget. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { motoControl.Attach -= motoControl_Attach; motoControl.Detach -= motoControl_Detach; motoControl.Error -= motoControl_Error; motoControl.InputChange -= motoControl_InputChange; motoControl.CurrentChange -= motoControl_CurrentChange; motoControl.VelocityChange -= motoControl_VelocityChange; motoControl.BackEMFUpdate -= motoControl_BackEMFUpdate; motoControl.EncoderPositionChange -= motoControl_EncoderPositionChange; motoControl.SensorUpdate -= motoControl_SensorUpdate; if (motoControl.Attached) { foreach (MotorControlMotor motor in motoControl.motors) { motor.Velocity = 0; } } //run any events in the message queue - otherwise close will hang if there are any outstanding events Application.DoEvents(); motoControl.close(); motoControl = null; }
private void _close() { try { m_runmotor = false; motoControl.Attach -= motoControl_Attach; motoControl.Detach -= motoControl_Detach; motoControl.Error -= motoControl_Error; motoControl.InputChange -= motoControl_InputChange; motoControl.CurrentChange -= motoControl_CurrentChange; motoControl.VelocityChange -= motoControl_VelocityChange; motoControl.BackEMFUpdate -= motoControl_BackEMFUpdate; motoControl.EncoderPositionChange -= motoControl_EncoderPositionChange; motoControl.SensorUpdate -= motoControl_SensorUpdate; if (motoControl.Attached) { foreach (MotorControlMotor motor in motoControl.motors) { motor.Velocity = 0; } } Thread.Sleep(0); //run any events in the message queue - otherwise close will hang if there are any outstanding events motoControl.close(); motoControl = null; } catch (Exception err) { throw (new SystemException(err.Message)); } }
private Navigation() { board = new CentralBoard(); motor = new MotorControl(); dynamixel = DX.i; running = false; Moving = false; Speed = 0; }
private static void CheckMotorControl(BlockConfigModalParameters parameters, GameObject blockObject) { MotorControl motorControl = blockObject.GetComponent <MotorControl>(); if (motorControl != null) { parameters.panelParametersList.Add(new MotorBlockConfigPanelParameters(motorControl)); } }
public MotorController() { _motorControl = new MotorControl(); _motorControl.open(); _leftmotor = new Motor(); _leftmotor.index = 0; _leftmotor.MotorSide = Side.Left; _leftmotor.Location = MotorControllerLocation.Front; _rightmotor = new Motor(); _rightmotor.index = 1; _rightmotor.MotorSide = Side.Right; _rightmotor.Location = MotorControllerLocation.Front; }
//MotorControl Detach event handler...Clear all the fields and disable all the controls void motoControl_Detach(object sender, DetachEventArgs e) { MotorControl detached = (MotorControl)sender; attachedTxt.Text = detached.Attached.ToString(); nameTxt.Clear(); serialTxt.Clear(); versiontxt.Clear(); numMotorsTxt.Clear(); numInputsTxt.Clear(); numEncodersTxt.Clear(); numSensorsTxt.Clear(); //Shrink window and hide some groups this.Bounds = new Rectangle(this.Location, new Size(this.Width, 535)); digitalInputsGroup.Visible = false; encodersGroup.Visible = false; sensorsGroup.Visible = false; //Clear everything in the motor group motorCmb.Items.Clear(); vMaxTxt.Clear(); vCurrentTxt.Clear(); AccelTxt.Clear(); brakingTxt.Clear(); cChangeTxt.Clear(); backEmfTxt.Clear(); backEmfSensingCheck.Checked = false; velocityTrk.Value = 0; accelTrk.Value = accelTrk.Minimum; brakingTrk.Value = 0; supplyVoltageTimer.Stop(); voltageTxt.Clear(); for (int i = 0; i < 4; i++) { ((CheckBox)digitalInputsGroup.Controls["input" + i + "Chk"]).Visible = false; } //Disable everything motorCmb.Enabled = false; backEmfSensingCheck.Enabled = false; velocityTrk.Enabled = false; accelTrk.Enabled = false; brakingTrk.Enabled = false; }
//initialize the MotorConrol object and hook the event handlers private void Form1_Load(object sender, EventArgs e) { motoControl = new MotorControl(); motoControl.Attach += new AttachEventHandler(motoControl_Attach); motoControl.Detach += new DetachEventHandler(motoControl_Detach); motoControl.Error += new ErrorEventHandler(motoControl_Error); motoControl.CurrentChange += new CurrentChangeEventHandler(motoControl_CurrentChange); motoControl.InputChange += new InputChangeEventHandler(motoControl_InputChange); motoControl.VelocityChange += new VelocityChangeEventHandler(motoControl_VelocityChange); motoControl.BackEMFUpdate += new BackEMFUpdateEventHandler(motoControl_BackEMFUpdate); motoControl.EncoderPositionChange += new EncoderPositionChangeEventHandler(motoControl_EncoderPositionChange); motoControl.SensorUpdate += new SensorUpdateEventHandler(motoControl_SensorUpdate); openCmdLine(motoControl); }
public override void Init(BlockConfigPanelParameters parameters) { base.Init(parameters); var panelParameters = parameters as MotorBlockConfigPanelParameters; motorControl = panelParameters.motorControl; motorControl.MotorVelocityChanged += UpdateTextFields; motorControl.MotorForceChanged += UpdateTextFields; motorControl.FreespinChanged += UpdateTextFields; motorControl.Reverced += UpdateTextFields; motorControl.ForwardAxisKeyChanged += UpdateTextFields; motorControl.BackAxisKeyChanged += UpdateTextFields; motorControl.IsFixableValueChanged += UpdateTextFields; motorControl.MotorDamperChanged += UpdateTextFields; UpdateTextFields(); }
void MotorSettings_SaveSettings(object sender, MotorSettingsEventArgs e) { if (_selectedMotorControl == null) { return; } MotorSettings.SaveSettings -= MotorSettings_SaveSettings; _selectedMotorControl.MotorMovementType = e.MotorMovementType; _selectedMotorControl.DegreeMovement = e.DegreeMovement; _selectedMotorControl.PowerRatingMovement = e.PowerRatingMovement; _selectedMotorControl.TimeToMoveInSeconds = e.TimeToMoveInSeconds; _selectedMotorControl.UpdateUx(); _selectedMotorControl = null; }
//initialize the MotorConrol object and hook the event handlers public void loadMotorControl() { motoControl = new MotorControl(); /* * motoControl.Attach += new AttachEventHandler(motoControl_Attach); * motoControl.Detach += new DetachEventHandler(motoControl_Detach); * motoControl.Error += new ErrorEventHandler(motoControl_Error); * * motoControl.CurrentChange += new CurrentChangeEventHandler(motoControl_CurrentChange); * motoControl.InputChange += new InputChangeEventHandler(motoControl_InputChange); * motoControl.VelocityChange += new VelocityChangeEventHandler(motoControl_VelocityChange); * motoControl.BackEMFUpdate += new BackEMFUpdateEventHandler(motoControl_BackEMFUpdate); * motoControl.EncoderPositionChange += new EncoderPositionChangeEventHandler(motoControl_EncoderPositionChange); * motoControl.SensorUpdate += new SensorUpdateEventHandler(motoControl_SensorUpdate); * openCmdLine(motoControl); */ motoControl.open(-1); }
private void MotorSettingClicked(object sender, RoutedEventArgs routedEventArgs) { var control = sender as MotorControl; if (control != null) { MotorSettings.SaveSettings += MotorSettings_SaveSettings; _selectedMotorControl = control; MotorSettings.Show( control.BrickInputPort, _brick.Ports[control.BrickInputPort].Type, control.MotorMovementType, control.DegreeMovement, control.PowerRatingMovement, control.TimeToMoveInSeconds); } }
private void MotorSettingClicked(object sender, RoutedEventArgs routedEventArgs) { var control = sender as MotorControl; if (control != null) { MotorSettings.SaveSettings += MotorSettings_SaveSettings; _selectedMotorControl = control; MotorSettings.Show( control.BrickInputPort, _brick.Ports[control.BrickInputPort].Type, control.MotorMovementType, control.DegreeMovement, control.PowerRatingMovement, control.TimeToMoveInSeconds); } }
//MotorControl Attach event handler...populate the fields and controls void motoControl_Attach(object sender, AttachEventArgs e) { MotorControl attached = (MotorControl)sender; attachedTxt.Text = attached.Attached.ToString(); nameTxt.Text = attached.Name; serialTxt.Text = attached.SerialNumber.ToString(); versiontxt.Text = attached.Version.ToString(); numMotorsTxt.Text = attached.motors.Count.ToString(); numInputsTxt.Text = attached.inputs.Count.ToString(); numEncodersTxt.Text = attached.encoders.Count.ToString(); numSensorsTxt.Text = attached.sensors.Count.ToString(); //Re-size according to capabilities if (attached.inputs.Count > 0) { this.Bounds = new Rectangle(this.Location, new Size(this.Width, 585)); digitalInputsGroup.Visible = true; for (int i = 0; i < attached.inputs.Count; i++) { ((CheckBox)digitalInputsGroup.Controls["input" + i + "Chk"]).Visible = true; } } if (attached.encoders.Count > 0) { this.Bounds = new Rectangle(this.Location, new Size(this.Width, 641)); encodersGroup.Visible = true; encoderPosition.Text = motoControl.encoders[0].Position.ToString(); } if (attached.sensors.Count > 0) { this.Bounds = new Rectangle(this.Location, new Size(this.Width, 695)); sensorsGroup.Visible = true; ratiometricCheck.Checked = motoControl.Ratiometric; } //Set accel range (varies according to controller) accelTrk.SetRange((int)Math.Round(attached.motors[0].AccelerationMin), (int)attached.motors[0].AccelerationMax); accelTrk.TickFrequency = ((int)attached.motors[0].AccelerationMax - (int)Math.Round(attached.motors[0].AccelerationMin)) / 10; accelTrk.Value = accelTrk.Minimum; //Enable everything motorCmb.Enabled = true; velocityTrk.Enabled = true; accelTrk.Enabled = true; if (attached.ID == Phidget.PhidgetID.MOTORCONTROL_1MOTOR) { backEmfSensingCheck.Enabled = true; brakingTrk.Enabled = true; } supplyVoltageTimer.Start(); for (int i = 0; i < attached.motors.Count; i++) { motorCmb.Items.Add(i); } motorCmb.SelectedIndex = 0; }
public void InitializeMotor(String portName) { modCom = new ModbusCommunication(portName); motorControl = new MotorControl(modCom); USBConnected = true; }
public void CloseController() { _motorControl.close(); _motorControl = null; }
void MotorSettings_SaveSettings(object sender, MotorSettingsEventArgs e) { if (_selectedMotorControl == null) return; MotorSettings.SaveSettings -= MotorSettings_SaveSettings; _selectedMotorControl.MotorMovementType = e.MotorMovementType; _selectedMotorControl.DegreeMovement = e.DegreeMovement; _selectedMotorControl.PowerRatingMovement = e.PowerRatingMovement; _selectedMotorControl.TimeToMoveInSeconds = e.TimeToMoveInSeconds; _selectedMotorControl.UpdateUx(); _selectedMotorControl = null; }
public MotorBlockConfigPanelParameters(MotorControl motorControl) { this.motorControl = motorControl; }
// osetreni udalosti stisku tlacitka otaceni motorem private void rotateMotor(MotorControl.RotParameters rotParameters) { FtCommunication.Connection connection = ftCom.getConnection(); // pokud pripojene zarizeni neni dostupne, vypise chybove hlaseni a aktualizuje seznam zarizeni if (!ftCom.getConnection(lbDevice.SelectedItem.ToString())) { MessageBox.Show("Zařízení '" + lbDevice.SelectedItem + "' není dostupné!", "Chyba připojení", MessageBoxButtons.OK, MessageBoxIcon.Error); btFindDevice_Click(btFindDevice,EventArgs.Empty); // vola event stisknuti tlacitka najit zarizeni - aktualizuje seznam zarizeni return; } // pokud zarizeni prave pracuje, nebo jsou hodnoty kroku nulove pozadavek na otoceni se neposle if ((deviceWorkingState == true) || (rotParameters.steps == 0)) { return; } else { changeWorkingState(true); // signalizuje, ze soustava pracuje connection.ftStatus = new FTDI.FT_STATUS[1]; connection.ftStatus[0] = ftCom.rotateMotor(rotParameters); // vola metodu pro odeslani parametru otoceni motorem seriovou linkou // pokud odeslani probehlo OK if (connection.ftStatus[0] == FTDI.FT_STATUS.FT_OK) { rotateMotorImage(rotParameters); // vola metodu pro otaceni obrazky motoru podle zadanych parametru } else { changeWorkingState(false); // signalizuje, ze zarizeni nepracuje MessageBox.Show("Chyba komunikace se zařízením '" + connection.ftStatus[0].ToString() + "'.", "Chyba komunikace", MessageBoxButtons.OK, MessageBoxIcon.Error); } addLog("Otočení motorem " + rotParameters.motorNum.ToString(), connection.ftStatus[0].ToString()); } }
static void Main(string[] args) { try { //Initiallize the MotorControl object motoControl = new MotorControl(); //Hook the basic event handlers motoControl.Attach += new AttachEventHandler(motoControl_Attach); motoControl.Detach += new DetachEventHandler(motoControl_Detach); motoControl.Error += new ErrorEventHandler(motoControl_Error); //Hook the phidget specific event handlers motoControl.CurrentChange += new CurrentChangeEventHandler (motoControl_CurrentChange); motoControl.InputChange += new InputChangeEventHandler (motoControl_InputChange); motoControl.VelocityChange += new VelocityChangeEventHandler (motoControl_VelocityChange); //open the object for MotorControl device connections motoControl.open(); //Wait for a MotorControl device to be attached Console.WriteLine("Waiting for MotorControl to be attached...."); motoControl.waitForAttachment(); //Set the acceleration to 100 for this example and intialize the velocity //to 0.00 (stopped) motoControl.motors[0].Acceleration = 100.00; motoControl.motors[0].Velocity = 0.00; //Prompt for user inpu to continue Console.WriteLine("Press any button to continue..."); Console.Read(); //Slowly speed the motor to full speed going one direction double i; for (i = 0.00; i < 100; i++) { Thread.Sleep(100); motoControl.motors[0].Velocity = i; } //Slowly speed down and start accelerating in the other direction for (i = 100; i > -100; i--) { Thread.Sleep(100); motoControl.motors[0].Velocity = i; } //Stop the motor motoControl.motors[0].Velocity = 0.00; //Prompt the user for input to terminate Console.WriteLine("Press any key to end..."); Console.Read(); //User input was read so we can terminate, close the MotorControl object motoControl.close(); //Set the MotorControl object to null to get it out of memory motoControl = null; //If no exceptions were thrown by this point it is ok to terminate Console.WriteLine("ok"); } catch (PhidgetException ex) { Console.WriteLine(ex.Description); } }
void motoControl_Attach(object sender, AttachEventArgs e) { MotorControl attached = (MotorControl)sender; pCallback("motoControl_Attach", ""); }
//initialize the MotorConrol object and hook the event handlers private void Form1_Load(object sender, EventArgs e) { motoControl = new MotorControl(); motoControl.Attach += new AttachEventHandler(motoControl_Attach); motoControl.Detach += new DetachEventHandler(motoControl_Detach); motoControl.Error += new ErrorEventHandler(motoControl_Error); motoControl.CurrentChange += new CurrentChangeEventHandler(motoControl_CurrentChange); motoControl.InputChange += new InputChangeEventHandler(motoControl_InputChange); motoControl.VelocityChange += new VelocityChangeEventHandler(motoControl_VelocityChange); motoControl.BackEMFUpdate += new BackEMFUpdateEventHandler(motoControl_BackEMFUpdate); motoControl.EncoderPositionChange += new EncoderPositionChangeEventHandler(motoControl_EncoderPositionChange); motoControl.SensorUpdate += new SensorUpdateEventHandler(motoControl_SensorUpdate); openCmdLine(motoControl); }
// metoda pro otaceni obrazky motoru podle zadanych parametru private void rotateMotorImage(MotorControl.RotParameters rotParameters) { switch (rotParameters.motorNum) { case MotorControl.MotorNum.Motor1: motorVisualization1.rotateImage(rotParameters); break; case MotorControl.MotorNum.Motor2: motorVisualization2.rotateImage(rotParameters); break; case MotorControl.MotorNum.Motor3: motorVisualization3.rotateImage(rotParameters); break; case MotorControl.MotorNum.Motor4: motorVisualization4.rotateImage(rotParameters); break; } }
/// <summary> /// Metoda pro otaceni motorem podle zadanych parametru, seriovou linkou posle tri bajty s parametry otaceni /// </summary> /// <param name="rotParameters">Struktura s nastavenymi parametry otaceni</param> /// <returns>Ft status</returns> public FTDI.FT_STATUS rotateMotor(MotorControl.RotParameters rotParameters) { ftDevice.Purge(FTDI.FT_PURGE.FT_PURGE_RX & FTDI.FT_PURGE.FT_PURGE_TX); // vycisti prijmaci a vysilacu buffer zarizeni // 1. bajt = hlavicka // 2. bajt = cislo ovladace, smer otaceni, zpusob otaceni // 3. bajt = rychlost otaceni, dolni polovina // 4. bajt = rychlost otaceni, horni polovina // 5. bajt = pocet kroku nebo sektoru, dolni polovina // 6. bajt = pocet kroku nebo sektoru, horni polovina // 7. bajt = stop bajt, obshuje kontrolni soucet soucet byte[] dataToWrite = new byte[7]; uint bytesWriten = 0; string dataToRead; uint bytesRead = 0; // sestaveni dat pro odeslani // halvicka v prvnim bajtu dataToWrite[0] = (byte)'H'; // pridani informace o cisle ovladace motoru do druheho bajtu switch (rotParameters.motorNum) { case MotorControl.MotorNum.Motor1: dataToWrite[1] = 0x00; // data = 0b00000000 break; case MotorControl.MotorNum.Motor2: dataToWrite[1] = 0x40; // data = 0b01000000 break; case MotorControl.MotorNum.Motor3: dataToWrite[1] = 0x80; // data = 0b10000000 break; case MotorControl.MotorNum.Motor4: dataToWrite[1] = 0xc0; // data = 0b11000000 break; } // pridani informace o smeru otaceni motorem, 0 = vlevo, 1 vpravo do druheho bajtu if (rotParameters.direction == MotorControl.Direction.Left) { dataToWrite[1] = (byte)(dataToWrite[1] & 0xdf); // data = 0bxx0xxxxx } else { dataToWrite[1] = (byte)(dataToWrite[1] | 0x20); // data = 0bxx1xxxxx } // pridani informace o zpusobu otaceni, po krocich vs. sektorech do druheho bajtu // pokud je pocet kroku i pocet sektoru = 0, nedela nic a vrati OK if (rotParameters.steps == 0) { return FTDI.FT_STATUS.FT_OK; } else { // jinak pokud je pocet sektoru = 0 , nastavi info bit na 0 if (rotParameters.sectors == false) { // otaceni po krocich dataToWrite[1] = (byte)(dataToWrite[1] & 0xef); // data = 0bxxx0xxxx } else { // otaceni po sektorech , nastavi info bit na 1 dataToWrite[1] = (byte)(dataToWrite[1] | 0x10); // data = 0bxxx1xxxx } } // pridani informace o rychlosti otaceni motorem do tretiho a ctvrteho bajtu dataToWrite[2] = (byte)(rotParameters.speed); // dolni byte rychlosti dataToWrite[3] = (byte)(rotParameters.speed >> 8); // horni polovina rychlosti // prida pocet kroku nebo sektoru o ktery se bude motorem otacet do pateho a sesteho bajtu dataToWrite[4] = (byte)(rotParameters.steps); // dolni polovina poctu kroku/sektoru dataToWrite[5] = (byte)(rotParameters.steps >> 8); // horni polovina poctu kroku/sektoru // pridani kontrolniho souctu do 7 bajtu for (int i = 0; i < 6; i++) { dataToWrite[6] += (byte)(dataToWrite[i]); } EventWaitHandle waitRxChar = new EventWaitHandle(false, EventResetMode.AutoReset); // handle udalosti cekani na prijeti znaku seriovou linkou ftDevice.SetEventNotification(FTDI.FT_EVENTS.FT_EVENT_RXCHAR, waitRxChar); // nastaveni hlaseni udalosti od prijeti znaku seriovou linkou thread = new Thread(waitingThread); // vypocet a ulozeni potrebne minimalni doby cekani na prijeti stavu opto nez skonci otaceni threadDelay = (rotParameters.sectors == true ? rotParameters.steps * rotParameters.speed * 50 : rotParameters.steps * rotParameters.speed) + 3000; ftDevice.Write(dataToWrite, 7, ref bytesWriten); // zapise sestavene bajty na seriovou linku // ceka na prijeti znaku seriovou linkou, pokud se nedocka, vraci ERROR if (waitRxChar.WaitOne(1000, true) == false) { return FTDI.FT_STATUS.FT_IO_ERROR; } else { ftDevice.Read(out dataToRead, 3, ref bytesRead); // precte odpoved thread.Start(); // spousti vlakno cekajci prichozi data // Kontrola komunikace, pokud odeslani a zpracovani dat probelo OK tak.. if (dataToRead == "OK\n") { return FTDI.FT_STATUS.FT_OK; } else { // prijaty znak neni OK thread.Abort(); return FTDI.FT_STATUS.FT_IO_ERROR; } } }
//When the form is being close, make sure to stop all the motors and close the Phidget. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { motoControl.Attach -= motoControl_Attach; motoControl.Detach -= motoControl_Detach; motoControl.Error -= motoControl_Error; motoControl.InputChange -= motoControl_InputChange; motoControl.CurrentChange -= motoControl_CurrentChange; motoControl.VelocityChange -= motoControl_VelocityChange; motoControl.BackEMFUpdate -= motoControl_BackEMFUpdate; motoControl.EncoderPositionChange -= motoControl_EncoderPositionChange; motoControl.SensorUpdate -= motoControl_SensorUpdate; if (motoControl.Attached) { foreach (MotorControlMotor motor in motoControl.motors) { motor.Velocity = 0; } } //run any events in the message queue - otherwise close will hang if there are any outstanding events Application.DoEvents(); motoControl.close(); motoControl = null; }
static void Main(string[] args) { try { //Initiallize the MotorControl object motoControl = new MotorControl(); //Hook the basic event handlers motoControl.Attach += new AttachEventHandler(motoControl_Attach); motoControl.Detach += new DetachEventHandler(motoControl_Detach); motoControl.Error += new ErrorEventHandler(motoControl_Error); //Hook the phidget specific event handlers motoControl.CurrentChange += new CurrentChangeEventHandler (motoControl_CurrentChange); motoControl.InputChange += new InputChangeEventHandler (motoControl_InputChange); motoControl.VelocityChange += new VelocityChangeEventHandler (motoControl_VelocityChange); //open the object for MotorControl device connections motoControl.open(); //Wait for a MotorControl device to be attached Console.WriteLine("Waiting for MotorControl to be attached...."); motoControl.waitForAttachment(); //Set the acceleration to 100 for this example and intialize the velocity //to 0.00 (stopped) motoControl.motors[0].Acceleration = 100.00; motoControl.motors[0].Velocity = 0.00; //Prompt for user inpu to continue Console.WriteLine("Press any button to continue..."); Console.Read(); //Slowly speed the motor to full speed going one direction double i; for (i = 0.00; i < 100; i++) { Thread.Sleep(100); motoControl.motors[0].Velocity = i; } //Slowly speed down and start accelerating in the other direction for (i = 100; i > -100; i--) { Thread.Sleep(100); motoControl.motors[0].Velocity = i; } //Stop the motor motoControl.motors[0].Velocity = 0.00; //Prompt the user for input to terminate Console.WriteLine("Press any key to end..."); Console.Read(); //User input was read so we can terminate, close the MotorControl object motoControl.close(); //Set the MotorControl object to null to get it out of memory motoControl = null; //If no exceptions were thrown by this point it is ok to terminate Console.WriteLine("ok"); } catch (PhidgetException ex) { Console.WriteLine(ex.Description); } }