Pages: 1 [2]   Go Down
Author Topic: I want to make a video play when someone walks past  (Read 1592 times)
0 Members and 1 Guest are viewing this topic.
Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 627
Posts: 34222
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
processing isn't registering arduino
Do you mean that it is not opening up the correct port?

This has to be changed
Code:
  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:
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);
 }
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/**
 * 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);
  }
}


*/
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 627
Posts: 34222
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/**
 * 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;
    }
  }
}


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 627
Posts: 34222
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
//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;
    }
  }
}
Logged

Pages: 1 [2]   Go Up
Jump to: