I am coming from Pure Data where I had a ping sensor sending the distance in inches to Pure Data that used the distance information to play a video and different speeds.
I'd like to do the same in OF because OF handles video better.
I am getting hung up on getting the arduino to send the distance information to OF. The distance in inches should show up in the serial monitor of the arduino software, but I just get jumble data.
Here is the code I have on the arduino (.pde file):
#include <Firmata.h>
byte digitalPin;
char firstChar;
char secondChar;
int pingPin = 7;
void digitalWriteCallback(byte pin, int value)
{
pinMode(pin,OUTPUT);
analogWrite(pin, value);
}
void setup()
{
Firmata.setFirmwareVersion(0, 1);
Firmata.attach(ANALOG_MESSAGE, digitalWriteCallback);
Firmata.begin();
}
void loop()
{
while(Firmata.available()) {
Firmata.processInput();
}
for(digitalPin = 0; digitalPin < TOTAL_DIGITAL_PINS; digitalPin++) {
if(digitalPin == 7)
Firmata.sendDigitalPort(digitalPin, computeDistance());
}
}
long computeDistance(){
long duration, inches, cm;
// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// We give a short LOW pulse beforehand to ensure a clean HIGH pulse.
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, 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.
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
// convert the time into a distance
return microsecondsToInches(duration);
//cm = microsecondsToCentimeters(duration);
}
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.
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;
}
Once I get the distance data to show up in the serial monitor with firmata, I will move on to getting OF to read the data.
I have scoured the internet for examples but they all deal with analog data. The ping sensor is digital so I need to be able to receive digital data in OF...
Any insights would be greatly appreciated!!
Thanks
Tim