Go Down

Topic: I want to make a video play when someone walks past (Read 1 time) previous topic - next topic

Grumpy_Mike

Quote
processing isn't registering arduino

Do you mean that it is not opening up the correct port?

This has to be changed
Code: [Select]
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);

It will open the first port in the list. This isn't necessarily your arduino.

To do this correctly use this:-

Code: [Select]

String adaptor= "/dev/tty.usbmodem1a21";  // change this to your arduino's port name

void portConnect(){
    int portNumber = 99;
    String [] ports;
    println(Serial.list());
    ports = Serial.list();
      for(int j = 0; j< ports.length; j++) {
    if(adaptor.equals(Serial.list()[j])) portNumber = j;         
    }
    if(portNumber == 99) portNumber = 0;
    String portName = Serial.list()[portNumber];
    println("Connected to "+portName);
    scope = new Serial(this, portName, 57600);
}

Mossi

Ok I've changed that and it says unexpected token: void

Mossi

I added a } above void portConnect(){ which got rid of that error but I now have 'cannot find anything named "adaptor". Do I need to declare this somewhere outside void setup?

Mossi

I changed adaptor to the portname and the error went away however it now says cannot find anything named scope. This I am stuck with. The code is now as follows

Code: [Select]
/**
* Serial Call-Response
* by Tom Igoe.
*
* Sends a byte out the serial port, and reads 3 bytes in.
* Sets foregound color, xpos, and ypos of a circle onstage
* using the values returned from the serial port.
* Thanks to Daniel Shiffman  and Greg Shakar for the improvements.
*
* Note: This sketch assumes that the device on the other end of the serial
* port is going to send a single byte of value 65 (ASCII A) on startup.
* The sketch waits for that byte, then sends an ASCII A whenever
* it wants more data.
*/
import codeanticode.gsvideo.*;

GSMovie movie;

import processing.serial.*;

int bgcolor;      // Background color
int fgcolor;      // Fill color
Serial myPort;                       // The serial port
int[] serialInArray = new int[1];    // Where we'll put what we receive
int serialCount = 0;                 // A count of how many bytes we receive
int xpos, ypos;              // Starting position of the ball
boolean firstContact = false;        // Whether we've heard from the microcontroller

void setup() {
  size(640, 480);  // Stage size
  noStroke();      // No border on the next thing drawn
   movie = new GSMovie(this, "MajorProjectVid.mov");
  movie.loop();
  // Set the starting position of the ball (middle of the stage)
  xpos = width/2;
  ypos = height/2;

  // Print a list of the serial ports, for debugging purposes:
  println(Serial.list());

  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String adaptor = "/dev/tty.usbmodemfd121";  // change this to your arduino's port name

}

void portConnect(){
    int portNumber = 99;
    String [] ports;
    println(Serial.list());
    ports = Serial.list();
      for(int j = 0; j< ports.length; j++) {
    if("/dev/tty.usbmodemfd121".equals(Serial.list()[j])) portNumber = j;         
    }
    if(portNumber == 99) portNumber = 0;
    String portName = Serial.list()[portNumber];
    println("Connected to "+portName);
    scope = new Serial(this, portName, 57600);
}


void movieEvent(GSMovie movie) {
  movie.read();
}

void draw() {
  //background(255);
  //fill(fgcolor);
  // Draw the shape
  //ellipse(xpos, height/2, 20, 20);
  if(xpos > 190){
    image(movie,0,0,width, height);
  }else background(0);

}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller.
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') {
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  }
  else {
    // Add the latest byte from the serial port to array:
    serialInArray[serialCount] = inByte;
    serialCount++;

    // If we have 3 bytes:
    if (serialCount > 2 ) {
      xpos = serialInArray[0];
      ypos = serialInArray[1];
      fgcolor = serialInArray[2];

      // print the values (for debugging purposes only):
      println(xpos + "\t" + ypos + "\t" + fgcolor);

      // Send a capital A to request new sensor readings:
      myPort.write('A');
      // Reset serialCount:
      serialCount = 0;
    }
  }
}


/*

//  Serial Call and Response
//  by Tom Igoe
//  Language: Wiring/Arduino
 
//  This program sends an ASCII A (byte of value 65) on startup
//  and repeats that until it gets some data in.
//  Then it waits for a byte in the serial port, and
//  sends three sensor values whenever it gets a byte in.
 
//  Thanks to Greg Shakar for the improvements
 
//  Created 26 Sept. 2005
//  Updated 18 April 2008


int firstSensor = 0;    // first analog sensor
int secondSensor = 0;   // second analog sensor
int thirdSensor = 0;    // digital sensor
int inByte = 0;         // incoming serial byte

void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);
  pinMode(2, INPUT);   // digital sensor is on digital pin 2
  establishContact();  // send a byte to establish contact until Processing responds
}

void loop()
{
  // if we get a valid byte, read analog ins:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    // read first analog input, divide by 4 to make the range 0-255:
    firstSensor = analogRead(0)/4;
    // delay 10ms to let the ADC recover:
    delay(10);
    // read second analog input, divide by 4 to make the range 0-255:
    secondSensor = analogRead(1)/4;
    // read  switch, multiply by 155 and add 100
    // so that you're sending 100 or 255:
    thirdSensor = 100 + (155 * digitalRead(2));
    // send sensor values:
    Serial.write(byte(firstSensor));
    Serial.write(byte(secondSensor));
    Serial.write(byte(thirdSensor));                             
  }
}

void establishContact() {
while (Serial.available() <= 0) {
      Serial.print('A', BYTE);   // send a capital A
      delay(300);
  }
}


*/

Grumpy_Mike

You don't understand programming at all do you. You just put lots of errors in the code I sent.
I have not got the libraries so I don't know if there is something else wrong but try this:-
Code: [Select]

/**
* Serial Call-Response
* by Tom Igoe.
*
* Sends a byte out the serial port, and reads 3 bytes in.
* Sets foregound color, xpos, and ypos of a circle onstage
* using the values returned from the serial port.
* Thanks to Daniel Shiffman  and Greg Shakar for the improvements.
*
* Note: This sketch assumes that the device on the other end of the serial
* port is going to send a single byte of value 65 (ASCII A) on startup.
* The sketch waits for that byte, then sends an ASCII A whenever
* it wants more data.
*/
import codeanticode.gsvideo.*;

GSMovie movie;

import processing.serial.*;

int bgcolor;      // Background color
int fgcolor;      // Fill color
Serial myPort;                       // The serial port
int[] serialInArray = new int[1];    // Where we'll put what we receive
int serialCount = 0;                 // A count of how many bytes we receive
int xpos, ypos;              // Starting position of the ball
boolean firstContact = false;        // Whether we've heard from the microcontroller
String adaptor = "/dev/tty.usbmodemfd121";  // change this to your arduino's port name

void setup() {
  size(640, 480);  // Stage size
  noStroke();      // No border on the next thing drawn
   movie = new GSMovie(this, "MajorProjectVid.mov");
  movie.loop();
  // Set the starting position of the ball (middle of the stage)
  xpos = width/2;
  ypos = height/2;

  // Print a list of the serial ports, for debugging purposes:
    portConnect();

  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
}

void portConnect(){
    int portNumber = 99;
    String [] ports;
    println(Serial.list());
    ports = Serial.list();
      for(int j = 0; j< ports.length; j++) {
    if("/dev/tty.usbmodemfd121".equals(Serial.list()[j])) portNumber = j;         
    }
    if(portNumber == 99) portNumber = 0;
    String portName = Serial.list()[portNumber];
    println("Connected to "+portName);
    myPort = new Serial(this, portName, 57600);
}


void movieEvent(GSMovie movie) {
  movie.read();
}

void draw() {
  //background(255);
  //fill(fgcolor);
  // Draw the shape
  //ellipse(xpos, height/2, 20, 20);
  if(xpos > 190){
    image(movie,0,0,width, height);
  }else background(0);

}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller.
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') {
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  }
  else {
    // Add the latest byte from the serial port to array:
    serialInArray[serialCount] = inByte;
    serialCount++;

    // If we have 3 bytes:
    if (serialCount > 2 ) {
      xpos = serialInArray[0];
      ypos = serialInArray[1];
      fgcolor = serialInArray[2];

      // print the values (for debugging purposes only):
      println(xpos + "\t" + ypos + "\t" + fgcolor);

      // Send a capital A to request new sensor readings:
      myPort.write('A');
      // Reset serialCount:
      serialCount = 0;
    }
  }
}



Mossi

No I don't sorry, rather new to this. The library was from here - http://gsvideo.sourceforge.net/ it was suggested so that I could see the footage of the video. Thanks for you help, it is now connected to the arduino port. Now I just need to figure out how to make the video only play when someone walks past the IR Sensor instead of just on a loop. I really do appreciate your help!

Grumpy_Mike

As I said before change this:-
Code: [Select]
if(xpos > 190){
    image(movie,0,0,width, height);
  }else background(0);

to:-
Code: [Select]
if(xpos > 190){
    image(movie,0,0,width, height);
    xpos = 0;
  }else background(0); 

Mossi

Thanks, I changed your code but it still didn't work. I managed to catch up with the person who first helped me with the code and he came up with this code which now works as a pushbutton so on wednesday we hope to figure out how to do it as an IR Sensor.

Code: [Select]
//Processing sketch to run with this example:

// This example code is in the public domain.
import codeanticode.gsvideo.*;

GSMovie movie;
import processing.serial.*;

int bgcolor;      // Background color
int fgcolor;      // Fill color
Serial myPort;                       // The serial port
int[] serialInArray = new int[3];    // Where we'll put what we receive
int serialCount = 0;                 // A count of how many bytes we receive
int xpos, ypos = 0;              // Starting position of the ball
boolean firstContact = false;        // Whether we've heard from the microcontroller
long movLength = 0;
void setup() {
  size(640, 480);  // Stage size
  noStroke();      // No border on the next thing drawn
  movie = new GSMovie(this, "MajorProjectVid.mov");
  // Set the starting position of the ball (middle of the stage)
  xpos = width/2;
  ypos = height/2;

  // Print a list of the serial ports, for debugging purposes:
  println(Serial.list());

  // I know that the first port in the serial list on my mac
  // is always my  FTDI adaptor, so I open Serial.list()[0].
  // On Windows machines, this generally opens COM1.
  // Open whatever port is the one you're using.
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
}

void movieEvent(GSMovie movie) {
  movie.read();
}

void draw() {
  movLength = movie.frame(); // 1758 total frames
  println(movLength);
  if (fgcolor > 120) {
    movie.play();
  }
  else {
    background(0);
  }
  image(movie, 0, 0, width, height);
  if (movie.frame() == 1757.0) {
    movie.goToBeginning();
    movie.pause();
  }
}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller.
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') {
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  }
  else {
    // Add the latest byte from the serial port to array:
    serialInArray[serialCount] = inByte;
    serialCount++;

    // If we have 3 bytes:
    if (serialCount > 2 ) {
      xpos = serialInArray[0];
      ypos = serialInArray[1];
      fgcolor = serialInArray[2];

      // print the values (for debugging purposes only):
      //  println(xpos + "\t" + ypos + "\t" + fgcolor);

      // Send a capital A to request new sensor readings:
      myPort.write('A');
      // Reset serialCount:
      serialCount = 0;
    }
  }
}

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview