topical media & game development

talk show tell print

graphic-processing-site-examples-Libraries-Serial-SerialMultiple-SerialMultiple.pde / pde



  
Many Serial Ports Read data from the multiple Serial Ports

  
  
  import processing.serial.*;
  
  Serial[] myPorts = new Serial[2];  // Create a list of objects from Serial class
  int[] dataIn = new int[2];         // a list to hold data from the serial ports
  
  void setup()  {
    size(400, 300);
    // print a list of the serial ports:
    println(Serial.list());
    // On my machine, the first and third ports in the list
    // were the serial ports that my microcontrollers were 
    // attached to.
    // Open whatever ports ares the ones you're using.
  
  // get the ports' names:
    String portOne = Serial.list()[0];
    String portTwo = Serial.list()[2];
    // open the ports:
    myPorts[0] = new Serial(this, portOne, 9600);
    myPorts[1] = new Serial(this, portTwo, 9600);
  }
  
  void draw() {
    // clear the screen:
    background(0);
    // use the latest byte from port 0 for the first circle
    fill(dataIn[0]);
    ellipse(width/3, height/2, 40, 40);
      // use the latest byte from port 1 for the second circle
     fill(dataIn[1]);
    ellipse(2*width/3, height/2, 40, 40);
  }
  
  
When SerialEvent is generated, it'll also give you the port that generated it. Check that against a list of the ports you know you opened to find out where the data came from

  
  void serialEvent(Serial thisPort) {
    // variable to hold the number of the port:
    int portNumber = -1;
    
    // iterate over the list of ports opened, and match the 
    // one that generated this event:
    for (int p = 0; p < myPorts.length; p++) {
      if (thisPort == myPorts[p]) {
        portNumber = p;
      }
    }
    // read a byte from the port:
    int inByte = thisPort.read();
    // put it in the list that holds the latest data from each port:
    dataIn[portNumber] = inByte;
    // tell us who sent what:
    println("Got " + inByte + " from serial port " + portNumber);
  }
  
  /*
  The following Wiring/Arduino code runs on both microcontrollers that
  were used to send data to this sketch:
  
  void setup()
  {
    // start serial port at 9600 bps:
    Serial.begin(9600);
  }
  
  void loop() {
    // read analog input, divide by 4 to make the range 0-255:
    int analogValue = analogRead(0)/4; 
    Serial.print(analogValue, BYTE);
    // pause for 10 milliseconds:
    delay(10);                 
  }
  
  */
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.