/** * @brief Update the app's gui and take actions based on user interaction with gui. * Additional buttons can be added to easily send EagleAPI commands<br> * if (GUI.Button(new Rect(200, 200, 75, 20), "Reset Position")) EagleAPI.actuators[target_actuator].ResetPosition(); */ private void OnGUI() { // ///Search for a serial port that has an eagle controller, stop and white light when correct port found switch (EagleAPI.correctPort) { case false: style.normal.textColor = Color.black; if ((Time.time - waiting_for_response) > 0.05) { EagleAPI.Handshake(); waiting_for_response = Time.time; } break; case true: style.normal.textColor = Color.white; break; } ///Comm port that is being used by the Serial class GUI.Label(new Rect(Screen.width - 250, Screen.height - 100, 250, 40), "Port: " + Serial.GetPortName(), style); ///Send a system ready command if (GUI.Button(new Rect(50, 250, 150, 20), "System Ready")) { EagleAPI.SystemReady(); } ///Actuator information, target acutator, position, actuator force, temperature etc. GUI.Label(new Rect(50, 50, 250, 40), "Target Actuator: " + target_actuator.ToString()); target_actuator = Mathf.RoundToInt(GUI.HorizontalSlider(new Rect(50, 30, 150, 20), target_actuator, 0, 5)); if (target_actuator != last_target_actuator) { pcenableflag = true; } GUI.Label(new Rect(50, 75, 250, 20), "Actuator Position (mm): " + (EagleAPI.actuators[target_actuator].position / 1000f).ToString("0.00")); //position is received in micrometers GUI.Label(new Rect(50, 100, 250, 20), "Actuator Force: " + EagleAPI.actuators[target_actuator].force.ToString("0")); GUI.Label(new Rect(50, 125, 250, 20), "Errors: " + EagleAPI.actuators[target_actuator].errors.ToString()); GUI.Label(new Rect(50, 150, 250, 20), "Temperature (C): " + EagleAPI.actuators[target_actuator].temperature.ToString()); GUI.Label(new Rect(50, 175, 250, 20), "Voltage (V): " + EagleAPI.actuators[target_actuator].voltage.ToString("0.00")); GUI.Label(new Rect(50, 200, 250, 20), "Power (W): " + EagleAPI.actuators[target_actuator].power.ToString("0.00")); ///Force Control section, spring constant and center, sine magnitude and frequency. if (forceControl = GUI.Toggle(new Rect(500, 50, 250, 20), forceControl, "ForceControl", "Button")) { if (positionControl) { pcenableflag = true; } positionControl = false; } GUI.Label(new Rect(300, 75, 250, 20), "Spring Constant(force/mm): " + springK.ToString("0.00")); springK = (GUI.HorizontalSlider(new Rect(500, 80, 250, 20), springK, 0, 5)); GUI.Label(new Rect(300, 100, 250, 20), "Spring Center(mm): " + springCenter.ToString("0.00")); springCenter = (GUI.HorizontalSlider(new Rect(500, 105, 250, 20), springCenter, 0, 200)); GUI.Label(new Rect(300, 125, 250, 20), "Sine Magnitude: " + sine_mag.ToString("0.00")); sine_mag = (GUI.HorizontalSlider(new Rect(500, 130, 250, 20), sine_mag, 0, 50)); GUI.Label(new Rect(300, 150, 250, 20), "Sine Frequency (Hz): " + sine_freq.ToString("0")); sine_freq = (GUI.HorizontalSlider(new Rect(500, 155, 250, 20), sine_freq, 0, 50)); GUI.Label(new Rect(300, 175, 250, 20), "Constant Force: " + const_force.ToString("0")); const_force = (GUI.HorizontalSlider(new Rect(500, 180, 250, 20), const_force, -30, 30)); ///Position control sections if (positionControl = GUI.Toggle(new Rect(500, 250, 250, 20), positionControl, "Position Control", "Button")) { if (forceControl) { pcenableflag = true; } forceControl = false; } GUI.Label(new Rect(300, 275, 250, 20), "Target Position(mm): " + target_position.ToString("0")); target_position = (int)(GUI.HorizontalSlider(new Rect(500, 280, 250, 20), target_position, 0, 150)); GUI.Label(new Rect(50, Screen.height - 175, 150, 20), "Received: " + EagleAPI.lastResponse); GUI.Label(new Rect(50, Screen.height - 150, 150, 20), "Sent: " + EagleAPI.lastSent); ///General serial command sending box GUI.Label(new Rect(50, Screen.height - 100, 150, 20), "Send Serial Command"); stringCommand = GUI.TextField(new Rect(50, Screen.height - 75, 150, 20), stringCommand); if (GUI.Button(new Rect(200, Screen.height - 75, 75, 20), "Send")) { Serial.Write(stringCommand + "\r"); } }