Hetanshu Bharadiya
Hetanshu Bharadiya

Reputation: 21

How to merge two programs on processing ide in order to run them sequentially?

I am trying to merge two programs. One is for a video player that plays the intro video, and the other is for displaying a radar (I found the coding online). What I want to do is, play the video first, which is an introduction to the Radar, and then have the radar displayed. The radar display is linked with Arduino Mega 2560 and that has its own coding. Here are the two codes.

import processing.video.*;

String PATH = "D:\\FullZord.mp4";
Movie mov;

void setup()
  {
   size(1920, 1080);
   frameRate(30);
   mov = new Movie(this, PATH);
   mov.play();
   mov.speed(1);
   mov.volume(10);
  }

void movieEvent(Movie m) 
  {
   m.read();
  }

void draw() 
  {
   image(mov, 0, 0, width, height);
  }

and

import processing.serial.*; // imports library for serial communication
import java.awt.event.KeyEvent; // imports library for reading the data from the serial port
import java.io.IOException;
Serial myPort; // defines Object Serial
// defubes variables
String angle="";
String distance="";
String data="";
String noObject;
float pixsDistance;
int iAngle, iDistance;
int index1=0;
int index2=0;
PFont orcFont;

void setup() 
  {

    size (1920, 1080);
    smooth();
    myPort = new Serial(this,"COM4", 9600); // starts the serial communication
    myPort.bufferUntil('.'); // reads the data from the serial port up to the character '.'. So actually it reads this: angle,distance.
    orcFont = loadFont("OCRAExtended-30.vlw");
  }

void draw() 
  {

   fill(98,245,31);
   textFont(orcFont);
   // simulating motion blur and slow fade of the moving line
   noStroke();
   fill(0,4); 
   rect(0, 0, width, 1010); 

   fill(98,245,31); // green color
   // calls the functions for drawing the radar
   drawRadar(); 
   drawLine();
   drawObject();
   drawText(); 
  }

void serialEvent (Serial myPort) 
  { // starts reading data from the Serial Port
// reads the data from the Serial Port up to the character '.' and puts it into the String variable "data".
   data = myPort.readStringUntil('.');
   data = data.substring(0,data.length()-1);

   index1 = data.indexOf(","); // find the character ',' and puts it into 
   the 
   variable "index1"
   angle= data.substring(0, index1); // read the data from position "0" to position of the variable index1 or thats the value of the angle the Arduino Board sent into the Serial Port
   distance= data.substring(index1+1, data.length()); // read the data from position "index1" to the end of the data pr thats the value of the distance

// converts the String variables into Integer
   iAngle = int(angle);
   iDistance = int(distance);   
  }

void drawRadar() 
  {
   pushMatrix();
   translate(960,1000); // moves the starting coordinats to new location
   noFill();
   strokeWeight(2);
   stroke(98,245,31);
// draws the arc lines
   arc(0,0,1800,1800,PI,TWO_PI);
   arc(0,0,1400,1400,PI,TWO_PI);
   arc(0,0,1000,1000,PI,TWO_PI);
   arc(0,0,600,600,PI,TWO_PI);
// draws the angle lines
   line(-960,0,960,0);
   line(0,0,-960*cos(radians(30)),-960*sin(radians(30)));
   line(0,0,-960*cos(radians(60)),-960*sin(radians(60)));
   line(0,0,-960*cos(radians(90)),-960*sin(radians(90)));
   line(0,0,-960*cos(radians(120)),-960*sin(radians(120)));
   line(0,0,-960*cos(radians(150)),-960*sin(radians(150)));
   line(-960*cos(radians(30)),0,960,0);
   popMatrix();  
  } 

void drawObject() 
  {
   pushMatrix();
   translate(960,1000); // moves the starting coordinats to new location
   strokeWeight(9);
   stroke(255,10,10); // red color
   pixsDistance = iDistance*22.5; // covers the distance from the sensor from cm to pixels
// limiting the range to 40 cms
   if(iDistance<40){
// draws the object according to the angle and the distance
   line(pixsDistance*cos(radians(iAngle)),-pixsDistance*sin(radians(iAngle)),950*cos(radians(iAngle)),-950*sin(radians(iAn
 gle)));
   }
    popMatrix(); 
   }
 void drawLine() 
   {
    pushMatrix();
    strokeWeight(9);
    stroke(30,250,60);
    translate(960,1000); // moves the starting coordinats to new location
    line(0,0,950*cos(radians(iAngle)),-950*sin(radians(iAngle))); // draws the line according to the angle
    popMatrix();
   }

 void drawText() 
   { // draws the texts on the screen

     pushMatrix();
     if(iDistance>40) 
       {
        noObject = "Out of Range";
       }
     else 
         {
          noObject = "In Range";
         }
     fill(0,0,0);
     noStroke();
     rect(0, 1010, width, 1080);
     fill(98,245,31);
     textSize(25);
     text("10cm",1180,990);
     text("20cm",1380,990);
     text("30cm",1580,990);
     text("40cm",1780,990);
     textSize(40);
     text("Object: " + noObject, 240, 1050);
     text("Angle: " + iAngle +" °", 1050, 1050);
     text("Distance: ", 1380, 1050);

     if(iDistance<40) 
       {
        text("        " + iDistance +" cm", 1400, 1050);
       }
     textSize(25);
     fill(98,245,60);
     translate(961+960*cos(radians(30)),982-960*sin(radians(30)));
     rotate(-radians(-60));
     text("30°",0,0);
     resetMatrix();
     translate(954+960*cos(radians(60)),984-960*sin(radians(60)));
     rotate(-radians(-30));
     text("60°",0,0);
     resetMatrix();
     translate(945+960*cos(radians(90)),990-960*sin(radians(90)));
     rotate(radians(0));
     text("90°",0,0);
     resetMatrix();
     translate(935+960*cos(radians(120)),1003-960*sin(radians(120)));
     rotate(radians(-30));
     text("120°",0,0);
     resetMatrix();
     translate(940+960*cos(radians(150)),1018-960*sin(radians(150)));
     rotate(radians(-60));
     text("150°",0,0);
     popMatrix();  
    }

Upvotes: 0

Views: 128

Answers (2)

Hetanshu Bharadiya
Hetanshu Bharadiya

Reputation: 21

Solved it! I just used a time-delay function. This one.

if (millis() > 1000) {
  // do something
   }

Upvotes: 0

Kevin Workman
Kevin Workman

Reputation: 42174

You're going to have to read the reference material for the video library. You're looking for a way to detect when the movie is playing, or when it's stopped. It's probably something like an isPlaying() function in the Movie class.

When you have that, you can call that in the draw() function to detect whether the movie is still playing. If so, draw it. If not, then show the radar.

But start smaller. First off, can you just print something to the console when the movie is done playing? Build off of that.

Also, I highly recommend that you don't just use code that you copy-pasted from the internet. That's only going to give you a ton of headaches. Instead, try to understand exactly what the code is doing. Otherwise it's going to be impossible to debug or make changes. You need to really understand the code before you can use it.

Upvotes: 1

Related Questions