Processing + Firmata + Ping sensor

Is there a way to directly control a Ping sensor connected to an arduino from processing?

I was having a delay and poor response from using serial. I figured I'd give firmata a try, but I cannot seem to do the pulseIn function from arduino in processing.

I am also wondering about the microseconds parts.

Is this possible?

The reason id like to this is I want to save serial chatter for sending information to pd, or would it be easier / is it possible to send information to both pd and processing using the same serial port?

I need information from arduino to processing, and from processing to pd, I do not need cross talk between arduino and pd.

Thanks,

Here is the code:

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;


int pingPin = 7;



void setup() {
  //println(Arduino.list());
  size(470, 280);
  arduino = new Arduino(this, Arduino.list()[0], 57600);
}

void draw() {
  /* Ping))) Sensor
   
   This sketch reads a PING))) ultrasonic rangefinder and returns the
   distance to the closest object in range. To do this, it sends a pulse
   to the sensor to initiate a reading, then listens for a pulse 
   to return.  The length of the returning pulse is proportional to 
   the distance of the object from the sensor.
   
   The circuit:
         * +V connection of the PING))) attached to +5V
         * GND connection of the PING))) attached to ground
         * SIG connection of the PING))) attached to digital pin 7
   
   http://www.arduino.cc/en/Tutorial/Ping
   
   created 3 Nov 2008
   by David A. Mellis
   modified 30 Jun 2009
   by Tom Igoe
   
   This example code is in the public domain.
   
   */

    // establish variables for duration of the ping, 
    // and the distance result in inches and centimeters:
    long duration, inches, cm;

    // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
    // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
    arduino.pinMode(pingPin, Arduino.OUTPUT);
    arduino.digitalWrite(pingPin, Arduino.LOW);
    delay(2);
    arduino.digitalWrite(pingPin, Arduino.HIGH);
    delay(5);
    arduino.digitalWrite(pingPin, Arduino.LOW);

    // The same pin is used to read the signal from the PING))): a HIGH
    // pulse whose duration is the time (in microseconds) from the sending
    // of the ping to the reception of its echo off of an object.
    arduino.pinMode(pingPin, Arduino.INPUT);
    duration = arduino.pulseIn(pingPin, Arduino.HIGH);

    // convert the time into a distance
    inches = microsecondsToInches(duration);
    cm = microsecondsToCentimeters(duration);

    System.println(inches);
    //Serial.print("in, ");
    //Serial.print(cm);
    //Serial.print("cm");
    //Serial.println();

    delay(200);
  }

long microsecondsToInches(long microseconds)
  {
    // According to Parallax's datasheet for the PING))), there are
    // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
    // second).  This gives the distance travelled by the ping, outbound
    // and return, so we divide by 2 to get the distance of the obstacle.
    // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
    return microseconds / 74 / 2;
  }

  long microsecondsToCentimeters(long microseconds)
  {
    // The speed of sound is 340 m/s or 29 microseconds per centimeter.
    // The ping travels out and back, so to find the distance of the
    // object we take half of the distance travelled.
    return microseconds / 29 / 2;
  }

I got the serial communication working. Still curious about firmata and processing, is it pretty limited in what it can do?

First things first. Have you written a sketch for the Arduino that executes the Ping sensor, and send data to the serial port, for viewing in the Serial Monitor? Did the data sent to the Serial Monitor match what you expected, based on objects placed known distances in front of the sensor?

Getting sensor data into Processing, when the process isn't working, is getting the cart on the wrong end of the horse.

The reason id like to this is I want to save serial chatter for sending information to pd

How do you suppose Processing and the Arduino are talking to each other?

would it be easier / is it possible to send information to both pd and processing using the same serial port?

It wouldn't be easier, because it isn't even possible.

There is nothing to stop you from using more than one serial port at a time in the Processing application. Use one to talk to the Arduino and another to talk to PD.

I was having a delay and poor response from using serial. I figured I'd give firmata a try, but I cannot seem to do the pulseIn function from arduino in processing.

Was indicates past tense. What was the problem? Did switching to Firmata make the serial communication any faster? How?

Why can't you do the pulseIn function in Processing? Is it because it is not a Firmata function?