using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using ORiN2.interop.CAO; namespace Project { public partial class Form1 : Form { private CaoEngine caoEng; private CaoWorkspaces caoWss; private CaoWorkspace caoWs; private CaoController caoCtrl; public Form1() { InitializeComponent(); timerMeasure.Interval = 500; } // Form1起動時 private void Form1_Load(object sender, EventArgs e) { try { // CAOエンジン生成 caoEng = new CaoEngine(); caoWss = caoEng.Workspaces; caoWs = caoWss.Item(0); } catch(Exception ex) { MessageBox.Show(ex.Message.ToString()); } } // Form1を閉じたとき private void Form1_FormClosing(object sender, FormClosingEventArgs e) { btnDisconnectRobot_Click(sender, e); // CaoEngineを消去 if(caoWs != null) { Marshal.ReleaseComObject(caoWs); caoWs = null; } if(caoWss != null) { Marshal.ReleaseComObject(caoWss); caoWss = null; } if(caoEng != null) { Marshal.ReleaseComObject(caoEng); caoEng = null; } } // Connectボタンの動作 private void btnConnectRobot_Click(object sender, EventArgs e) { try { // コントローラに接続 caoCtrl = caoWs.AddController("USBRH", "CaoProv.StrawberryLinux.USBRH2", "", ""); // LED、ヒータをOFF int[] gLedNoState = new int[2] {0, 0}; caoCtrl.Execute("ControlIO", gLedNoState); int[] rLedNoState = new int[2] {1, 0}; caoCtrl.Execute("ControlIO", rLedNoState); caoCtrl.Execute("SetHeater", 0); // ボタンの動作 切り替わり btnConnect.Enabled = false; btnDisconnect.Enabled = true; btnVer.Enabled = true; btnMeasureStart.Enabled = true; btnMeasureStop.Enabled = false; btnGrnOn.Enabled = true; btnRedOn.Enabled = true; btnHtrOn.Enabled = true; } catch(Exception ex) { btnDisconnectRobot_Click(sender, e); MessageBox.Show("USBRHの接続に失敗しました。\n" + ex.Message.ToString(), "Failed to connect USBRH.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // Disconnectボタンの動作 private void btnDisconnectRobot_Click(object sender, EventArgs e) { try { timerMeasure.Stop(); if (caoCtrl != null) { // LED、ヒータをOFF int[] gLedNoState = new int[2] {0, 0}; caoCtrl.Execute("ControlIO", gLedNoState); int[] rLedNoState = new int[2] {1, 0}; caoCtrl.Execute("ControlIO", rLedNoState); caoCtrl.Execute("SetHeater", 0); // コントローラから切断 CaoControllers ctrls = caoWs.Controllers; ctrls.Remove(caoCtrl.Name); Marshal.ReleaseComObject(caoCtrl); caoCtrl = null; Marshal.ReleaseComObject(ctrls); ctrls = null; } // ボタンの動作 切り替わり btnConnect.Enabled = true; btnDisconnect.Enabled = false; btnVer.Enabled = false; btnMeasureStart.Enabled = false; btnMeasureStop.Enabled = false; btnGrnOn.Enabled = false; btnGrnOff.Enabled = false; btnRedOn.Enabled = false; btnRedOff.Enabled = false; btnHtrOn.Enabled = false; btnHtrOff.Enabled = false; } catch(Exception ex) { MessageBox.Show("USBRHの切断に失敗しました。\n" + ex.Message.ToString(), "Failed to disconnect USBRH.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // バージョン情報の取得 private void btnVer_Click(object sender, EventArgs e) { try { object ver; ver = caoCtrl.Execute("GetVers", ""); MessageBox.Show("Firmware Version: " + ver.ToString(), "Version Information", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show("バージョン情報の取得に失敗しました。\n" + ex.Message.ToString(), "Failed to get Version Information.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 緑色LED: ON private void btnGrnOn_Click(object sender, EventArgs e) { try { int[] ledNoState = new int[2] {0, 1}; caoCtrl.Execute("ControlIO", ledNoState); btnGrnOn.Enabled = false; btnGrnOff.Enabled = true; } catch (Exception ex) { MessageBox.Show("LEDの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to turn Green LED ON.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 緑色LED: OFF private void btnGrnOff_Click(object sender, EventArgs e) { try { int[] ledNoState = new int[2] {0, 0}; caoCtrl.Execute("ControlIO", ledNoState); btnGrnOn.Enabled = true; btnGrnOff.Enabled = false; } catch(Exception ex) { MessageBox.Show("LEDの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to turn Green LED OFF.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 赤色LED: ON private void btnRedOn_Click(object sender, EventArgs e) { try { int[] ledNoState = new int[2] {1, 1}; caoCtrl.Execute("ControlIO", ledNoState); btnRedOff.Enabled = true; btnRedOn.Enabled = false; } catch(Exception ex) { MessageBox.Show("LEDの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to turn Red LED ON.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 赤色LED: OFF private void btnRedOff_Click(object sender, EventArgs e) { try { int[] ledNoState = new int[2] {1, 0}; caoCtrl.Execute("ControlIO", ledNoState); btnRedOff.Enabled = false; btnRedOn.Enabled = true; } catch(Exception ex) { MessageBox.Show("LEDの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to turn Red LED OFF.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // ヒータ: ON private void btnHtrOn_Click(object sender, EventArgs e) { try { caoCtrl.Execute("SetHeater", 1); btnHtrOn.Enabled = false; btnHtrOff.Enabled = true; } catch(Exception ex) { MessageBox.Show("ヒータの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to set Heater ON.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // ヒータ: OFF private void btnHtrOff_Click(object sender, EventArgs e) { try { caoCtrl.Execute("SetHeater", 0); btnHtrOff.Enabled = false; btnHtrOn.Enabled = true; } catch(Exception ex) { MessageBox.Show("ヒータの制御に失敗しました。\n" + ex.Message.ToString(), "Failed to set Heater OFF.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // 温度・湿度取得タイマの開始 private void btnMeasureStart_Click(object sender, EventArgs e) { timerMeasure.Start(); btnMeasureStart.Enabled = false; btnMeasureStop.Enabled = true; } // 温度・湿度取得タイマの停止 private void btnMeasureStop_Click(object sender, EventArgs e) { timerMeasure.Stop(); btnMeasureStart.Enabled = true; btnMeasureStop.Enabled = false; } // 温度・湿度の取得 private void timerMeasure_Tick(object sender, EventArgs e) { try { object tmp; double[] TempHumid = new double[2]; tmp = caoCtrl.Execute("GetTempHumidTrue", ""); TempHumid = (double[])tmp; tBoxTemp.Text = TempHumid[0].ToString(); tBoxHumid.Text = TempHumid[1].ToString(); } catch (Exception ex) { timerMeasure.Stop(); MessageBox.Show("温度・湿度の取得に失敗しました。\n" + ex.Message.ToString(), "Failed to get Temperature & Humid.", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }