Bluetooth通信(Processing:リモコン編)

<PC(Win・Mac)からNXTのモーターをリモートコントロール>

動画:https://www.youtube.com/watch?v=JOnKCIKgWJc

Drive Aボタンを押すと、Aポートにつないだモーターが回転

Drive Bボタンを押すと、Bポートにつないだモーターが回転

STOPボタンを押すと両方停止

(NXT側でプログラムを走らせておく必要はありません)

import processing.serial.*;
Serial port;
String NXTPort;

void setup()
{  

  size(420,300);
  println(Serial.list());  //シリアルポートの一覧をコンソール表示

  NXTPort = Serial.list()[0]; //[0]の数値は接続ポートにより1, 2, 3などに変更する必要あり
  
  port=new Serial(this,NXTPort,9600);

}
  

void draw()
{

  String disp;
  background(100);

  fill(255);
  text(NXTPort, 100, 50);
  
  rect(60,100,100,100);
  rect(180,100,100,100);
  rect(300,100,100,100);
  
  fill(0);
  text("Drive A", 80, 150);
  text("STOP", 200, 150);
  text("Drive B", 320, 150);
  

}


void mousePressed(){

  if (mouseX < 150){
  drive(0, 100);
  }
  
  if (mouseX > 150 && mouseX < 270) {
  drive(0, 0);
  drive(1, 0);
  }
  
  if (mouseX > 270) {
  drive(1, 100);
  }

}

void drive(int pnum, int power)
{
  byte[] tele = new byte[15];
  //byte[] resu = new byte[5];
  
  tele[0]=13; // Length of LSB
  tele[1]=0x00; // Length of MSB
  tele[2]=0x00; // Direct Command,with response
  tele[3]=0x04; // Command
  tele[4]=(byte)pnum; // Output Port
  tele[5]=(byte)power; // Power set point

  tele[6]=0x01; // Mode byte:MotorON=0x01,Break=0x02,Reguratied=0x04
  tele[7]=0x00; // Regulation Mode: IDLE=0x00,Speed=0x01,Sync=0x02
  tele[8]=100; // Turn Ratio -100-100
  tele[9]=0x20; // Run Stat  //Iedle=0x00,RampUp=0x10,Running=0x20,RampDown=0x40
  tele[10]=0x00;// Tacho Limit 0:run forever
  tele[11]=0x00;// Tacho Limit 0:run forever
  tele[12]=0x00;// Tacho Limit 0:run forever
  tele[13]=0x00;// Tacho Limit 0:run forever
  tele[14]=0x00;// Tacho Limit 0:run forever
  
  port.write(tele);
  
  
}


Last modified: 2014-09-01 Attached files total: 33MB