まずはArduinoのスケッチを適当に書く
#include <Servo.h> Servo s1; int sp = 9; int f_rate = 1000; int is_add = 0; void setup(){ Serial.begin(9600); s1.attach(sp); } void loop(){ if(Serial.available() > 0){ is_add = Serial.read(); Serial.print("Received serial echo... f_rate::"); Serial.println(f_rate); } //SerialPort経由でASCII文字"a","b"がきたときにサーボを動かしっぱなしにする。 if(is_add == 'a') { f_rate++; }else if(is_add == 'd'){ f_rate--; } if (f_rate == 2400){ f_rate = 2399; }else if (f_rate == 544){ f_rate = 545; } //サーボに角度を設定 s1.writeMicroseconds(f_rate); delay(1); }
"a","b"以外の値が送られてくるとf_ rateの変化がなくなる。
これによりシリアル経由でa,bを送信することでサーボを制御する。
Windows側のプログラム
AキーとDキーでFPSみたいに動かせるようにする。
適当にC#と.NETFrameworkで書く。
こんなかんじにコントロールを配置してする。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace webCamCtr1 { public partial class Form1 : Form { int x = 0; string is_opened = ""; SerialPort myPort; int is_pressing = 0; public Form1() { InitializeComponent(); } private void Form1_MouseMove(object sender, MouseEventArgs e) { } private void Form1_KeyDown(object sender, KeyEventArgs e) { //button1.Visible = true; //label1.Text = e.KeyValue.ToString(); if (is_pressing != 1){ if (e.KeyCode == Keys.A) { myPort.Write("a"); label1.Text = "<-"; is_pressing = 1; } if (e.KeyCode == Keys.D) { myPort.Write("d"); label1.Text = "->"; is_pressing = 1; } } x++; label2.Text = x.ToString(); } private void Form1_Load(object sender, EventArgs e) { //foreach (String p in SerialPort.GetPortNames()) { // String p_name = p; // com_lists.Items.Add(p_name); //} //com_lists.Items.Add("a"); String[] comName = SerialPort.GetPortNames(); com_lists.Items.AddRange(comName); this.KeyPreview = true; } private void button1_Click(object sender, EventArgs e) { int i = com_lists.SelectedIndex; if (i != -1) { button1.Text = com_lists.Text; string sp_name = com_lists.Text; int BaudRate = 9600; Parity Parity = Parity.None; int DataBits = 8; StopBits StopBits = StopBits.One; if (!(is_opened.Equals(sp_name))){ myPort = new SerialPort(sp_name, BaudRate, Parity, DataBits, StopBits); myPort.Open(); is_opened = sp_name; button1.Visible = false; this.Text = sp_name; } } else { button1.Text = "SelectCOM"; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { } private void Form1_KeyUp(object sender, KeyEventArgs e) { myPort.Write("s"); label1.Text = "-||-"; is_pressing = 0; } } }
もうつかれた。また今度。~~~