Operácie

Acrob050

Z SensorWiki

ParallaxMemsic.jpg

Product page: http://www.parallax.com/tabid/768/ProductID/93/Default.aspx Sensor Manufacturer: http://www.memsic.com/technology/sensor-components.html


Getting Started: http://forums.parallax.com/showthread.php?76042-How-to-Accelerometer-%281%29-Fundamentals-and-Tilt-Measurement&highlight=Boe-Bot+Robot+Navigation+Accelerometer+Incline+Sensing

Project: http://forums.parallax.com/showthread.php?76732-Boe-Bot%AE-Robot-Navigation-with-Accelerometer-Incline-Sensing&highlight=Boe-Bot+Robot+Navigation+Accelerometer+Incline+Sensing


Following code should work on Arduino (source: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1175526074 )

int pinX = 3;
int pinY = 2;
unsigned long serialTimer = millis();
unsigned long xAcc = 0;
unsigned long yAcc = 0;
boolean flipflop;

void setup()
{
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  Serial.begin(115200);
}

void loop()
{
    if (flipflop == true) {
     xAcc = pulseIn(pinX, HIGH);
     flipflop = false;
    } else {
	 yAcc = pulseIn(pinY, HIGH);
	 flipflop = true;
    }

  if ((millis() - serialTimer) > 50 ) {
    Serial.print("X ");
    Serial.println(xAcc);
    Serial.print("Y ");
    Serial.println(yAcc);
  }
}

And here is corresponding Processing code:

import processing.serial.*;

Serial port;  // Create object from Serial class
int val;	// Data received from the serial port
int xAngle;
int yAngle;


void setup()
{
  println ( Serial.list());
  size(200, 200,P3D);
  frameRate(10);
  // Open the port that the board is connected to and use the same speed (9600 bps)
  port = new Serial(this, Serial.list()[0],115200);
  port.bufferUntil(13);
  lights();


}

void draw()
{
  background(0);
  directionalLight(51, 102, 126, 0, 0, -1);
  translate(100,100,0);
  rotateX(map(xAngle,3800,6300,-1 * HALF_PI,HALF_PI));
  rotateY(map(yAngle,3800,6300,-1 * HALF_PI,HALF_PI));
  translate(-50,-50,0);
  rect(0,0,100,100);





}

void serialEvent(Serial p) {
  String msg = port.readStringUntil(13);
  if (msg != null) readMsg(msg);

}

void readMsg(String msg) {

  //remove non printing chars
  int badChars = 0;
  for (int i = msg.length() -1; i >= 0; i--) {
    char c = msg.charAt(i);
    if ( c == 10 || c ==13) {
	badChars++;
    }
  }
  if (badChars > 0) msg = msg.substring(0,msg.length()-badChars+1);

  String[] words = splitTokens(msg);
  if (words[0].equals("X")) {
    xAngle = int( words[1]);
  }
  if (words[0].equals("Y")) {
    yAngle = int( words[1]);
  }

}