まずは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;
}
}
}
もうつかれた。また今度。~~~




