164 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //Video2Minitel
 | |
| //by Renaud, Fabrice & Phil
 | |
| //Inspired from Video2ledwallHarpSerial V1.0 by Fabrice Fourc
 | |
| // http://www.tetalab.org
 | |
| 
 | |
| 
 | |
| import processing.video.*;
 | |
| import processing.net.*;
 | |
| int plage=44;//256;
 | |
| int MINITEL_CHAR_WIDTH = 40;//*2;
 | |
| int MINITEL_CHAR_HEIGHT = 24;//*4;
 | |
| 	// en fait ce n'est pas vraiment un pixel par pixel char...
 | |
| int PIXEL_CHAR_WIDTH = 2;
 | |
| int PIXEL_CHAR_HEIGHT = 3;
 | |
| 	
 | |
| // Size of each cell in the grid, ratio of window size to video size
 | |
| int videoScale = 10;
 | |
| int videoScalex = 8;
 | |
| int videoScaley = 6;
 | |
| 
 | |
| 
 | |
| 
 | |
| // Number of columns and rows in our system
 | |
| int cols, rows;
 | |
| // Variable to hold onto Capture object
 | |
| public int s = 50;
 | |
| import processing.serial.*;
 | |
| 
 | |
| // The serial port:
 | |
| Serial myPort;
 | |
| 
 | |
| //luminosite globale de la colone pour le son
 | |
| int colValue;
 | |
| String ledCol;
 | |
| String ledWallMsg;
 | |
| 
 | |
| //Client myClient;
 | |
| Capture video;
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| void setup() 
 | |
| {
 | |
|   size(MINITEL_CHAR_WIDTH*PIXEL_CHAR_WIDTH*videoScalex,MINITEL_CHAR_HEIGHT*PIXEL_CHAR_HEIGHT*videoScaley);
 | |
|   frameRate(25);
 | |
|   
 | |
|   // List all the available serial ports:
 | |
|   println(Serial.list());
 | |
| 
 | |
|   // I know that the first port in the serial list on my mac
 | |
|   // is always my  Keyspan adaptor, so I open Serial.list()[0].
 | |
|   // Open whatever port is the one you're using.
 | |
|   myPort = new Serial(this, Serial.list()[1], 1200);
 | |
| 
 | |
|   //myClient = new Client(this, "127.0.0.1", 5204);
 | |
|   // Initialize columns and rows
 | |
|   cols = width/videoScalex;
 | |
|   rows = height/videoScaley;
 | |
|   video = new Capture(this,cols,rows,30);
 | |
| }
 | |
| 
 | |
| 
 | |
| //----------------------------------------------------------
 | |
| 
 | |
| void displayPixelChar2(int x, int y)
 | |
| {
 | |
|   x= x *2;
 | |
|   y = y * 3;
 | |
|   byte carac=0; // caractère pixel
 | |
|   carac+=(Math.pow(2,0))*getG2(x+0,y+0);
 | |
|   carac+=(Math.pow(2,1))*getG2(x+1,y+0);
 | |
|   carac+=(Math.pow(2,2))*getG2(x+0,y+1);
 | |
|   carac+=(Math.pow(2,3))*getG2(x+1,y+1);
 | |
|   carac+=(Math.pow(2,4))*getG2(x+0,y+2);
 | |
|   carac+=(Math.pow(2,5))*1;
 | |
|   carac+=(Math.pow(2,6))*getG2(x+1,y+2);
 | |
|   myPort.write(carac);
 | |
|   println("carac= "+carac);
 | |
| }
 | |
| 
 | |
| int getG2(int x,int y)
 | |
| {
 | |
|   println("x + y*video.width" + (x + y*video.width));
 | |
|   color c = video.pixels[x + y*video.width];
 | |
|   int value = (int)brightness(c);  // get the brightness
 | |
|   if (value<s)
 | |
|   {
 | |
|     return(0);
 | |
|   }
 | |
|   else 
 | |
|   {
 | |
|     return(1);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void draw() {
 | |
|   // Read image from the camera
 | |
|   noStroke();
 | |
| 
 | |
|   if (video.available()) 
 | |
|   {
 | |
|     video.read();
 | |
|   }
 | |
|   video.loadPixels();
 | |
|   
 | |
|   if(!mousePressed) //si je ne clique pas, j'affiche le preview
 | |
|   {
 | |
|     image(video,0,0);
 | |
|     // Begin loop for columns
 | |
|     for (int i = 0; i < cols; i++) 
 | |
|     {
 | |
|       // Begin loop for rows
 | |
|       for (int j = 0; j < rows; j++) 
 | |
|       {
 | |
|         // Where are we, pixel-wise?
 | |
|         int x = i*videoScalex;
 | |
|         int y = j*videoScaley;
 | |
|         // Looking up the appropriate color in the pixel array
 | |
|         color c = video.pixels[i + j*video.width];
 | |
|         int value = (int)brightness(c);  // get the brightness
 | |
|         if (value<s)
 | |
|         {
 | |
|           fill(0);
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           fill(255);
 | |
|         }
 | |
|         rect(x,y,videoScalex,videoScaley);
 | |
|       }
 | |
|       ledWallMsg += ledCol;
 | |
|     }
 | |
|   }
 | |
|   else //si je clique sur l'image j'envoi sur le port serie
 | |
|   {
 | |
|     myPort.write(12);
 | |
|     myPort.write(14);
 | |
|     for (int y=0;y<MINITEL_CHAR_HEIGHT;y++) 
 | |
|     {
 | |
|       for (int x=0;x<MINITEL_CHAR_WIDTH;x++) 
 | |
|       {
 | |
|         displayPixelChar2(x,y);
 | |
|         println("x= "+x+"y= "+y);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void keyPressed() //reglage du seuil (a-, z+)
 | |
| {
 | |
|  if( key == 'a') 
 | |
|  {
 | |
|    s = s - 1;
 | |
|    println("s " + s);
 | |
|  }
 | |
|  if ( key == 'z')
 | |
|  {
 | |
|    s = s + 1;
 | |
|    println("s " + s);
 | |
|  }
 | |
| }
 | |
| 
 | 
