Go Down

Topic: Slow data transmission from Arduino+Bluesmirf to P (Read 414 times) previous topic - next topic

protozoo

Hi there,

I am trying to use a Bluesmirf bluetooth component attached to an Arduino duemillanove to send sensor values to my processing sketch. I finally managed to read values on the processing side, but I notice the data exchange is REALLY SLOW. I added some simple code to measure how much time it takes between readings. Using the USB cable I get 30ms average, but using the same code with the Smirf it takes 10x ( 300ms), making my project unusable.

Is this normal or I'm doing something wrong? Here's the Arduino code:

Code: [Select]

// Arduino code
int counter = 0;

void setup()
{
 Serial.begin(9600);
 while( Serial.available() <= 0 )
 {
   Serial.print('\r', BYTE );
   delay(300);
 }
}

void loop()
{
 while( Serial.available() > 0 )
 {
   int inByte = Serial.read();
    counter++;
   if(counter >= 200 )
     counter = 0;

   Serial.print( 0, DEC );
   Serial.print( ',' );
   Serial.print( 1, DEC );
   Serial.print( ',' );
   Serial.print( 2, DEC );
   Serial.print( ',' );
   Serial.print( 3, DEC );
   Serial.print( ',' );
   Serial.println( counter, DEC );
 }
}




And the Processing one:

Code: [Select]

// Processing code

import cc.arduino.*;
import processing.serial.*;

Serial myPort;
boolean madeContact = false;
int lineFeed = 10;
int lastValue = 0;
int lastPing = millis();

void setup()
{
 size(400, 200);
 println( Serial.list() );
 myPort = new Serial(this, Serial.list()[0], 9600 );
 myPort.bufferUntil( lineFeed );
}

void draw() {
 background(0);
 if( madeContact == false )
 {
   println( "----------------" );
   myPort.write('\r');
   delay(500);
 }

 stroke(255);
 line( 10, lastValue, 50, lastValue );

}

void serialEvent(Serial p )
{
 if( madeContact == false)
 {
   myPort.clear();
   madeContact = true;
   myPort.write( '\r' );
 }
 String myString = myPort.readStringUntil( lineFeed );
 if( myString != null )
 {
   myString = trim( myString );
   int sensors[] = int( split( myString, ',') );
   if( sensors.length == 5 )
   {
     for( int sensorNum=0; sensorNum<sensors.length; sensorNum++ )
     {
       print( "Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t");
     }
     lastValue = sensors[4];
     int time = millis() - lastPing;
     lastPing = millis();
     print( "  ::::  " );
     print( time );
     println();
     myPort.write( '\r' );
   }
 }
}


Thanks in advance!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy