<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.roberttwomey.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joeny+Thipsidakhom</id>
		<title>Robert-Depot - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.roberttwomey.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joeny+Thipsidakhom"/>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/Special:Contributions/Joeny_Thipsidakhom"/>
		<updated>2026-07-05T06:38:29Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.1</generator>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4071</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4071"/>
				<updated>2010-06-10T06:08:35Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Web Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Video Documentation Link&lt;br /&gt;
http://www.youtube.com/watch?v=o8rH-DeW0BI&lt;br /&gt;
&lt;br /&gt;
*Video Image&lt;br /&gt;
[[Image:Video.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Snake Game&lt;br /&gt;
[[Image:Snake.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Green Light Source&lt;br /&gt;
[[Image:Green.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Red Light Source&lt;br /&gt;
[[Image:Red.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=4052</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=4052"/>
				<updated>2010-06-06T04:04:27Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Statement ==&lt;br /&gt;
&lt;br /&gt;
Joeny Thipsidakhom. Fourth Year: Visual Arts Computing Major.&lt;br /&gt;
&lt;br /&gt;
Interests: Film, Photography, 3D, Animation, Video games, and many more....&lt;br /&gt;
&lt;br /&gt;
== Midterm ==&lt;br /&gt;
Virtual Walk&lt;br /&gt;
&lt;br /&gt;
== Final ==&lt;br /&gt;
Virtual/Camera Keyboard&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Video.jpg&amp;diff=4051</id>
		<title>File:Video.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Video.jpg&amp;diff=4051"/>
				<updated>2010-06-06T03:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4050</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4050"/>
				<updated>2010-06-06T03:35:50Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Web Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Video Coming Soon...&lt;br /&gt;
&lt;br /&gt;
*Video Image&lt;br /&gt;
[[Image:Video.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Snake Game&lt;br /&gt;
[[Image:Snake.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Green Light Source&lt;br /&gt;
[[Image:Green.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Red Light Source&lt;br /&gt;
[[Image:Red.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4049</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4049"/>
				<updated>2010-06-06T01:40:49Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Web Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Video Coming Soon...&lt;br /&gt;
&lt;br /&gt;
*Snake Game&lt;br /&gt;
[[Image:Snake.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Green Light Source&lt;br /&gt;
[[Image:Green.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Red Light Source&lt;br /&gt;
[[Image:Red.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4048</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4048"/>
				<updated>2010-06-06T01:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Video Coming Soon...&lt;br /&gt;
&lt;br /&gt;
*Snake Game&lt;br /&gt;
[[Image:Snake.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Green Light Source&lt;br /&gt;
[[Image:Green.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Red Light Source&lt;br /&gt;
[[Image:Red.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Red.jpg&amp;diff=4047</id>
		<title>File:Red.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Red.jpg&amp;diff=4047"/>
				<updated>2010-06-06T01:39:16Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Green.jpg&amp;diff=4046</id>
		<title>File:Green.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Green.jpg&amp;diff=4046"/>
				<updated>2010-06-06T01:38:35Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Snake.jpg&amp;diff=4045</id>
		<title>File:Snake.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Snake.jpg&amp;diff=4045"/>
				<updated>2010-06-06T01:36:33Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4044</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4044"/>
				<updated>2010-06-06T01:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
*Snake Game&lt;br /&gt;
[[Image:Snake.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Green Light Source&lt;br /&gt;
[[Image:Green.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Red Light Source&lt;br /&gt;
[[Image:Red.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4031</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=4031"/>
				<updated>2010-06-05T07:37:31Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Virtual Keyboard Code ==&lt;br /&gt;
//KEYS&lt;br /&gt;
final int VK_A = 65;&lt;br /&gt;
final int VK_S = 83;&lt;br /&gt;
final int VK_D = 68;&lt;br /&gt;
final int VK_W = 87;&lt;br /&gt;
final int VK_RIGHT = 39;&lt;br /&gt;
final int VK_LEFT = 37;&lt;br /&gt;
final int VK_UP = 38;&lt;br /&gt;
final int VK_DOWN = 40;&lt;br /&gt;
final int VK_SHIFT = 16;&lt;br /&gt;
final int VK_SPACE = 32;&lt;br /&gt;
&lt;br /&gt;
//FONT&lt;br /&gt;
PFont font;&lt;br /&gt;
&lt;br /&gt;
//Press Character Once&lt;br /&gt;
String lastButton = &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Robot r;&lt;br /&gt;
&lt;br /&gt;
//VIDEO&lt;br /&gt;
import processing.video.*;&lt;br /&gt;
Capture video;&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  size(633,480);&lt;br /&gt;
  background(10);&lt;br /&gt;
  noFill();&lt;br /&gt;
  smooth();&lt;br /&gt;
&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  video = new Capture(this, width, height, 30);&lt;br /&gt;
&lt;br /&gt;
  //TEXT&lt;br /&gt;
  font = loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(font, 25);&lt;br /&gt;
&lt;br /&gt;
  //BOUNDARY LINES.&lt;br /&gt;
  //UPPER LEFT&lt;br /&gt;
  rect(0,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //UPPER RIGHT&lt;br /&gt;
  rect(320,0,320,200);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER LEFT&lt;br /&gt;
  rect(0,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
  //LOWER RIGHT&lt;br /&gt;
  rect(320,280,320,240);&lt;br /&gt;
  noFill();&lt;br /&gt;
&lt;br /&gt;
  //TEXT  &lt;br /&gt;
  text(&amp;quot;UPPER Left&amp;quot;,100,50);&lt;br /&gt;
  text(&amp;quot;UPPER Right&amp;quot;,390,50);&lt;br /&gt;
  text(&amp;quot;LOWER Left&amp;quot;,100,330);&lt;br /&gt;
  text(&amp;quot;LOWER Right&amp;quot;,390,330);&lt;br /&gt;
  text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  try{&lt;br /&gt;
    r = new Robot();&lt;br /&gt;
  }&lt;br /&gt;
  catch(AWTException a){&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  //VIDEO&lt;br /&gt;
  if (video.available()) {&lt;br /&gt;
    video.read();&lt;br /&gt;
    image(video, 0, 0, width, height); // Draw the webcam video onto the screen&lt;br /&gt;
    int brightestRX = 0; // X-coordinate of the brightest video pixel&lt;br /&gt;
    int brightestRY = 0; // Y-coordinate of the brightest video pixel&lt;br /&gt;
    &lt;br /&gt;
    int brightestLX = 0;&lt;br /&gt;
    int brightestLY = 0;&lt;br /&gt;
    &lt;br /&gt;
    float brightestValueL = 0;&lt;br /&gt;
    float brightestValueR = 0; // Brightness of the brightest video pixel&lt;br /&gt;
    // Search for the brightest pixel: For each row of pixels in the video image and&lt;br /&gt;
    // for each pixel in the yth row, compute each pixel&amp;#039;s index in the video&lt;br /&gt;
    video.loadPixels();&lt;br /&gt;
    int index = 0;&lt;br /&gt;
    for (int y = 0; y &amp;lt; video.height; y++) {&lt;br /&gt;
      for (int x = 0; x &amp;lt; video.width; x++) {&lt;br /&gt;
        // Get the color stored in the pixel&lt;br /&gt;
        int pixelValue = video.pixels[index];&lt;br /&gt;
        // Determine the brightness of the pixel&lt;br /&gt;
        float pixelBrightnessR = green(pixelValue);&lt;br /&gt;
        float pixelBrightnessL = red(pixelValue);&lt;br /&gt;
        // If that value is brighter than any previous, then store the&lt;br /&gt;
        // brightness of that pixel, as well as its (x,y) location&lt;br /&gt;
        if (pixelBrightnessR &amp;gt; brightestValueR) {&lt;br /&gt;
          brightestValueR = pixelBrightnessR;&lt;br /&gt;
          brightestRY = y;&lt;br /&gt;
          brightestRX = x;&lt;br /&gt;
        }&lt;br /&gt;
        //Follows RED&lt;br /&gt;
        if (pixelBrightnessL &amp;gt; brightestValueL) {&lt;br /&gt;
          brightestValueL = pixelBrightnessL;&lt;br /&gt;
          brightestLY = y;&lt;br /&gt;
          brightestLX = x;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        index++;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // Draw a large, yellow circle at the brightest pixel&lt;br /&gt;
    fill(0, 75, 255, 128);&lt;br /&gt;
    ellipse(brightestRX, brightestRY, 50, 50);&lt;br /&gt;
    fill(0, 75, 100, 128);&lt;br /&gt;
    rect(brightestLX, brightestLY, 100 ,100);&lt;br /&gt;
&lt;br /&gt;
    //TYPING WASD&lt;br /&gt;
//    //UPPER LEFT = A&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
//        r.keyPress(VK_A);&lt;br /&gt;
//        r.keyRelease(VK_A);&lt;br /&gt;
////        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //UPPER RIGHT = D&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
////     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
//      r.keyPress(VK_D);&lt;br /&gt;
//      r.keyRelease(VK_D);&lt;br /&gt;
////      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
////      }&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER LEFT = W&lt;br /&gt;
//    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_W);&lt;br /&gt;
//      r.keyRelease(VK_W);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }&lt;br /&gt;
//    //LOWER RIGHT = S&lt;br /&gt;
//    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
//      r.keyPress(VK_S);&lt;br /&gt;
//      r.keyRelease(VK_S);&lt;br /&gt;
//      delay(500);&lt;br /&gt;
//    }  &lt;br /&gt;
&lt;br /&gt;
// TYPING ARROWS&lt;br /&gt;
    //UPPER LEFT = UP&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//      if(lastButton!=&amp;quot;a&amp;quot;) {&lt;br /&gt;
        r.keyPress(VK_UP);&lt;br /&gt;
        r.keyRelease(VK_UP);&lt;br /&gt;
//        lastButton=&amp;quot;a&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //UPPER RIGHT = DOWN&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;lt;= 200) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;lt;= 200)){&lt;br /&gt;
//     if(lastButton!=&amp;quot;d&amp;quot;) {&lt;br /&gt;
      r.keyPress(VK_DOWN);&lt;br /&gt;
      r.keyRelease(VK_DOWN);&lt;br /&gt;
//      lastButton=&amp;quot;d&amp;quot;;&lt;br /&gt;
//      }&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER LEFT = LEFT&lt;br /&gt;
    if ((brightestRX &amp;lt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;lt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_LEFT);&lt;br /&gt;
      r.keyRelease(VK_LEFT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    }&lt;br /&gt;
    //LOWER RIGHT = RIGHT&lt;br /&gt;
    if ((brightestRX &amp;gt;= 320 &amp;amp;&amp;amp; brightestRY &amp;gt;= 280) || (brightestLX &amp;gt;= 320 &amp;amp;&amp;amp; brightestLY &amp;gt;= 280)){&lt;br /&gt;
      r.keyPress(VK_RIGHT);&lt;br /&gt;
      r.keyRelease(VK_RIGHT);&lt;br /&gt;
      delay(500);&lt;br /&gt;
    } &lt;br /&gt;
    &lt;br /&gt;
    //BOUNDARY LINES.&lt;br /&gt;
    //UPPER LEFT&lt;br /&gt;
    rect(0,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    rect(320,0,320,200);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    rect(0,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    rect(320,280,320,240);&lt;br /&gt;
    noFill();&lt;br /&gt;
&lt;br /&gt;
    //TEXT &lt;br /&gt;
    //UPPER LEFT &lt;br /&gt;
    text(&amp;quot;UP&amp;quot;,100,50);&lt;br /&gt;
    //UPPER RIGHT&lt;br /&gt;
    text(&amp;quot;DOWN&amp;quot;,390,50);&lt;br /&gt;
    //LOWER LEFT&lt;br /&gt;
    text(&amp;quot;LEFT&amp;quot;,100,330);&lt;br /&gt;
    //LOWER RIGHT&lt;br /&gt;
    text(&amp;quot;RIGHT&amp;quot;,390,330);&lt;br /&gt;
    //CENTER&lt;br /&gt;
    text(&amp;quot;VOID&amp;quot;, 285,250);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
== Snake Game Code ==&lt;br /&gt;
&lt;br /&gt;
ArrayList ellipseList;&lt;br /&gt;
Ellipse head;&lt;br /&gt;
int SEGMENT_SIZE = 10;&lt;br /&gt;
int dir;&lt;br /&gt;
int prevPosX, prevPosY;&lt;br /&gt;
PFont f;&lt;br /&gt;
String mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
boolean ok=false;&lt;br /&gt;
Ellipse food;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(400, 400);&lt;br /&gt;
  f=loadFont(&amp;quot;Univers66.vlw&amp;quot;);&lt;br /&gt;
  textFont(f);&lt;br /&gt;
  ellipseList = new ArrayList();&lt;br /&gt;
  head = new Ellipse(width/2, height/2);&lt;br /&gt;
  ellipseList.add(head);&lt;br /&gt;
  dir=2;&lt;br /&gt;
  // Start with head and small body&lt;br /&gt;
  ellipseList.add(new Ellipse(width/2 - 2 * SEGMENT_SIZE, height/2));&lt;br /&gt;
  addFood();&lt;br /&gt;
  mesaj=&amp;quot;MOUSE&amp;quot;;&lt;br /&gt;
  frameRate(10);&lt;br /&gt;
}&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  background(100);&lt;br /&gt;
  text(mesaj,width/2-100,height/2);&lt;br /&gt;
  if(ok)&lt;br /&gt;
  {&lt;br /&gt;
    food.createEllipse();&lt;br /&gt;
    tryToEatAndMove(ellipseList.size());&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean tryToEatAndMove(int p)&lt;br /&gt;
{&lt;br /&gt;
  int x = head.getX();&lt;br /&gt;
  int y = head.getY();&lt;br /&gt;
  if (dist(x, y, food.getX(), food.getY()) &amp;lt; 6)&lt;br /&gt;
  {&lt;br /&gt;
    // Move the body&lt;br /&gt;
    move();&lt;br /&gt;
    // Get last two segments&lt;br /&gt;
    Ellipse e1 = (Ellipse) ellipseList.get(ellipseList.size() - 1);&lt;br /&gt;
    Ellipse e2 = (Ellipse) ellipseList.get(ellipseList.size() - 2);&lt;br /&gt;
    int dX = e1.getX() - e2.getX();&lt;br /&gt;
    int dY = e1.getY() - e2.getY();&lt;br /&gt;
    // Add another segment at the end&lt;br /&gt;
    ellipseList.add(new Ellipse(e1.getX() + dX, e1.getY() + dY));&lt;br /&gt;
    // Add food to replace the one being eat&lt;br /&gt;
    addFood();&lt;br /&gt;
    println(&amp;quot;Length: &amp;quot; + ellipseList.size());&lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  move();&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
void addFood()&lt;br /&gt;
{&lt;br /&gt;
  food = new Ellipse(int(random(10, 390)), int(random(10, 390)),6);&lt;br /&gt;
}&lt;br /&gt;
void move()&lt;br /&gt;
{&lt;br /&gt;
  prevPosX = head.getX();&lt;br /&gt;
  prevPosY = head.getY();&lt;br /&gt;
  switch(dir)&lt;br /&gt;
  {&lt;br /&gt;
    case 0:&lt;br /&gt;
	head.moveUp();&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	head.moveDown();&lt;br /&gt;
	break;&lt;br /&gt;
    case 2:&lt;br /&gt;
	head.moveRight();&lt;br /&gt;
	break;&lt;br /&gt;
    case 3:&lt;br /&gt;
	head.moveLeft();&lt;br /&gt;
	break;&lt;br /&gt;
  }&lt;br /&gt;
  followHead();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void followHead()&lt;br /&gt;
{&lt;br /&gt;
  fill(0);&lt;br /&gt;
  head.createEllipse();&lt;br /&gt;
  fill(255);&lt;br /&gt;
  for (int i = 1; i &amp;lt; ellipseList.size(); i++)&lt;br /&gt;
  {&lt;br /&gt;
     Ellipse e = (Ellipse) ellipseList.get(i);&lt;br /&gt;
     int ppX = e.getX();&lt;br /&gt;
     int ppY = e.getY();&lt;br /&gt;
     // Move the segment where the previous one was&lt;br /&gt;
     e.x = prevPosX; e.y = prevPosY;&lt;br /&gt;
     prevPosX = ppX;&lt;br /&gt;
     prevPosY = ppY;&lt;br /&gt;
     e.createEllipse();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void mousePressed()&lt;br /&gt;
{&lt;br /&gt;
  mesaj=&amp;quot;&amp;quot;;&lt;br /&gt;
  ok=true;&lt;br /&gt;
  dir=2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void keyPressed()&lt;br /&gt;
{&lt;br /&gt;
  if(key==CODED)&lt;br /&gt;
  {&lt;br /&gt;
    if(keyCode==UP)&lt;br /&gt;
    {&lt;br /&gt;
	dir=0;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==DOWN)&lt;br /&gt;
    {&lt;br /&gt;
	dir=1;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==RIGHT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=2;&lt;br /&gt;
    }&lt;br /&gt;
    if(keyCode==LEFT)&lt;br /&gt;
    {&lt;br /&gt;
	dir=3;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Ellipse&lt;br /&gt;
{&lt;br /&gt;
  int x; int y; int l; &lt;br /&gt;
  Ellipse(int _x, int _y)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=10;&lt;br /&gt;
  }&lt;br /&gt;
  Ellipse(int _x, int _y, int _l)&lt;br /&gt;
  {&lt;br /&gt;
    x=_x; y=_y; l=_l;&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse()&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(x,y,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  void createEllipse(int a,int b)&lt;br /&gt;
  {&lt;br /&gt;
    ellipse(a,b,l,l);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  void moveUp()&lt;br /&gt;
  {&lt;br /&gt;
    y-=l;&lt;br /&gt;
    if(y&amp;lt;0) y=height;&lt;br /&gt;
  }&lt;br /&gt;
  void moveDown()&lt;br /&gt;
  {&lt;br /&gt;
    y+=l;&lt;br /&gt;
    if(y&amp;gt;height) y=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveRight()&lt;br /&gt;
  {&lt;br /&gt;
    x+=l;&lt;br /&gt;
    if(x&amp;gt;width) x=0;&lt;br /&gt;
  }&lt;br /&gt;
  void moveLeft()&lt;br /&gt;
  {&lt;br /&gt;
    x-=l;&lt;br /&gt;
    if(x&amp;lt;0) x=width;&lt;br /&gt;
  }&lt;br /&gt;
  int getX()&lt;br /&gt;
  {&lt;br /&gt;
    return x;&lt;br /&gt;
  }&lt;br /&gt;
  int getY()&lt;br /&gt;
  {&lt;br /&gt;
    return y;&lt;br /&gt;
  }&lt;br /&gt;
  int getL()&lt;br /&gt;
  {&lt;br /&gt;
    return l;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=4030</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=4030"/>
				<updated>2010-06-05T07:32:51Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
*Description&lt;br /&gt;
The project ended up being a combination of virtual space and real world space where two people would navigate the virtual space together. The first person with the wiimotes attached to them would navigate real world space and virtual space, however without really knowing their position in virtual space, the second would be at a computer screen relaying directions to the first person to where to go in the virtual space while the first person would have to troubleshoot ways to navigate both spaces, avoiding real world and virtual obstacles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Maze Layout&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze Layout.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Maze&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Unreal Engine&lt;br /&gt;
&lt;br /&gt;
[[Image:Unreal.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
== GlovePIE Code/Wiimote Code ==&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    A = Left-Click, + = Right-Click, Down = Middle-Click&lt;br /&gt;
    If var.HoldToMove is true, Hold B to move&lt;br /&gt;
    If var.HoldToMove is false, Hold B to stop ...&lt;br /&gt;
    ...and you can flip Wiimote upside-down to use normal mouse&lt;br /&gt;
    Home = Battery Test&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// ==== Buttons ================================================================&lt;br /&gt;
var.MoveButton = wiimote1.B&lt;br /&gt;
mouse.LeftButton = wiimote1.A&lt;br /&gt;
mouse.RightButton = wiimote1.Down&lt;br /&gt;
//mouse.MiddleButton = wiimote.Plus&lt;br /&gt;
var.BatteryTestButton = wiimote1.Home&lt;br /&gt;
keyboard.W = var.updir&lt;br /&gt;
keyboard.W = var.downdir&lt;br /&gt;
keyboard.D = var.right&lt;br /&gt;
keyboard.A = var.left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keyboard.W = var.forward&lt;br /&gt;
//keyboard.S = var.backward&lt;br /&gt;
/*&lt;br /&gt;
keyboard.G = wiimote.Plus&lt;br /&gt;
keyboard.H = wiimote.Minus&lt;br /&gt;
keyboard.I = wiimote.One&lt;br /&gt;
keyboard.J = wiimote.Two&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
//Y Axis&lt;br /&gt;
&lt;br /&gt;
if (not var.updir) &amp;amp;&amp;amp; (not var.downdir) {&lt;br /&gt;
   var.updir = wiimote2.RelAccY &amp;gt; 20&lt;br /&gt;
   if var.updir {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.updir = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.downdir) &amp;amp;&amp;amp; (not var.updir) {&lt;br /&gt;
   var.downdir = wiimote2.RelAccY &amp;lt; -20&lt;br /&gt;
   if var.downdir {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.downdir = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//X Axis&lt;br /&gt;
if (not var.right) &amp;amp;&amp;amp; (not var.left){&lt;br /&gt;
   var.right = wiimote2.RelAccX &amp;gt; 20&lt;br /&gt;
   if var.right {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.right = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.left) &amp;amp;&amp;amp; (not var.right){&lt;br /&gt;
   var.left = wiimote2.RelAccX &amp;lt; -20&lt;br /&gt;
   if var.left{&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.left = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//Z Axis&lt;br /&gt;
if (not var.forward) &amp;amp;&amp;amp; (not var.backward){&lt;br /&gt;
   var.forward = wiimote2.RelAccZ &amp;gt; 10&lt;br /&gt;
   if var.forward {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.forward = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.backward) &amp;amp;&amp;amp; (not var.forward){&lt;br /&gt;
   var.backward = wiimote2.RelAccZ &amp;lt; -10&lt;br /&gt;
   if var.backward{&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.backward = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ==== Options ================================================================&lt;br /&gt;
var.HoldToMove = true&lt;br /&gt;
// true = Hold MoveButton to move&lt;br /&gt;
// false = Hold MoveButton to stop, flip Wiimote upside-down to use normal mouse&lt;br /&gt;
&lt;br /&gt;
var.EdgeStop = true&lt;br /&gt;
// Stops movement at the edge of the screen&lt;br /&gt;
&lt;br /&gt;
var.Speed = 1  // 0 to 100&lt;br /&gt;
// Overall speed of movement&lt;br /&gt;
&lt;br /&gt;
var.Mouse_Precision = 0 // 0 to 15&lt;br /&gt;
// Low values smooth the movement of the cursor&lt;br /&gt;
&lt;br /&gt;
PIE.FrameRate = 15hz  // Wii MotionPlus has a refresh rate of 100hz&lt;br /&gt;
// ==== Wii MotionPlus =========================================================&lt;br /&gt;
// Start of Wii Motion Plus script&lt;br /&gt;
IF HeldDown(abs(wiimote1.SmoothRoll)&amp;gt;135, 1 second) THEN var.WiimoteUpsideDown = true ELSE var.WiimoteUpsideDown = false&lt;br /&gt;
IF var.HoldToMove = true {&lt;br /&gt;
   var.Move = var.MoveButton&lt;br /&gt;
ELSE&lt;br /&gt;
   IF var.MoveButton = false AND var.WiimoteUpsideDown = false THEN var.Move = true ELSE var.Move = false&lt;br /&gt;
}&lt;br /&gt;
IF wiimote1.HasMotionPlus = false THEN var.CalibDebug = &amp;quot;[ WiiMotion Plus NOT DETECTED! ]&amp;quot; ELSE var.CalibDebug = &amp;quot;&amp;quot;&lt;br /&gt;
IF wiimote1.HasMotionPlus = true AND var.Move = true {&lt;br /&gt;
   var.YawSpeed = wiimote1.MotionPlus.YawSpeed&lt;br /&gt;
   var.PitchSpeed = wiimote1.MotionPlus.PitchSpeed&lt;br /&gt;
   IF SameValue( Smooth(wiimote1.Roll, 30), wiimote1.Roll, 50) THEN var.Roll = Smooth(wiimote1.Roll, 30) ELSE var.Roll = wiimote1.Roll&lt;br /&gt;
   IF var.Roll &amp;lt; 0 AND var.Roll &amp;gt;= -90 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, -90, 0, 0, 1)&lt;br /&gt;
      var.RightDown = -1&lt;br /&gt;
      var.TopUp = 1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;lt;= 90 AND var.Roll &amp;gt;= 0 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 0, 0, 1)&lt;br /&gt;
      var.RightDown = 1&lt;br /&gt;
      var.TopUp = 1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;gt; 90 AND var.Roll &amp;lt;= 180 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 180, 0, 1)&lt;br /&gt;
      var.RightDown = 1&lt;br /&gt;
      var.TopUp = -1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;lt; -90 AND var.Roll &amp;gt;= -180 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, -90, -180, 0, 1)&lt;br /&gt;
      var.RightDown = -1&lt;br /&gt;
      var.TopUp = -1&lt;br /&gt;
   }&lt;br /&gt;
   var.TopUpFix = Smooth(var.TopUp,30) / abs(Smooth(var.TopUp,30))&lt;br /&gt;
   var.RightDownFix = Smooth(var.RightDown,30) / abs(Smooth(var.RightDown,30))&lt;br /&gt;
   var.SpeedX = var.TopUpFix * var.YawSpeed - ( var.TopUpFix * var.YawSpeed * var.XYswap ) + ( var.RightDownFix * var.PitchSpeed * var.XYswap )&lt;br /&gt;
   var.SpeedY = var.TopUpFix * var.PitchSpeed - ( var.TopUpFix * var.PitchSpeed * var.XYswap) + ( -var.RightDownFix * var.YawSpeed * var.XYswap )&lt;br /&gt;
   var.Mouse_X = var.Mouse_X + ( var.SpeedX / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )&lt;br /&gt;
   var.Mouse_Y = var.Mouse_Y - ( var.SpeedY / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )&lt;br /&gt;
}&lt;br /&gt;
IF var.Move = false {&lt;br /&gt;
   IF delta(var.Move) = true {&lt;br /&gt;
      var.Mouse_X = var.CursorX&lt;br /&gt;
      var.Mouse_Y = var.CursorY&lt;br /&gt;
   }&lt;br /&gt;
   var.Mouse_X = mouse.x&lt;br /&gt;
   var.Mouse_Y = mouse.y&lt;br /&gt;
ELSE&lt;br /&gt;
   IF var.EdgeStop = true {&lt;br /&gt;
      var.Mouse_X = EnsureRange(var.Mouse_X, 0, 1)&lt;br /&gt;
      var.Mouse_Y = EnsureRange(var.Mouse_Y, 0, 1)&lt;br /&gt;
   }&lt;br /&gt;
   mouse.x = var.CursorX&lt;br /&gt;
   mouse.y = var.CursorY&lt;br /&gt;
   IF delta(var.Move) = true {&lt;br /&gt;
      var.Mouse_X = var.CursorX&lt;br /&gt;
      var.Mouse_Y = var.CursorY&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ==== Dynamic Motion Smoothing ===============================================&lt;br /&gt;
//  This automatically adjusts the smoothness&lt;br /&gt;
//  of the movement based on the cursor&amp;#039;s speed.&lt;br /&gt;
var.Mouse_Speed_X = int(abs(delta(var.Mouse_X))*1000)&lt;br /&gt;
var.Mouse_Speed_Y = int(abs(delta(var.Mouse_Y))*1000)&lt;br /&gt;
var.Mouse_Speed_XY = int(sqrt(var.Mouse_Speed_X + var.Mouse_Speed_Y) * var.Mouse_Precision)&lt;br /&gt;
IF var.Mouse_Speed_XY &amp;gt;= 30 THEN var.Mouse_SmoothHold = 0 ELSE var.Mouse_SmoothHold = 30 - var.Mouse_Speed_XY&lt;br /&gt;
var.Mouse_SmoothLimit = 30 - EnsureRange(var.Mouse_Precision*2, 0, 30)&lt;br /&gt;
IF var.Mouse_SmoothHold &amp;lt; var.Mouse_Smooth THEN var.Mouse_Smooth = var.Mouse_Smooth - (1 + int(EnsureMapRange(var.Mouse_SmoothHold, 0, 30, 30, 0)))&lt;br /&gt;
IF var.Mouse_SmoothHold &amp;gt; var.Mouse_Smooth OR (var.Mouse_SmoothHold = 30 AND var.Mouse_Smooth &amp;lt;= 29) {&lt;br /&gt;
   wait EnsureMapRange(var.Mouse_Smooth, 0, 29, 0, 100)ms&lt;br /&gt;
   IF var.Mouse_Smooth &amp;lt; var.Mouse_SmoothLimit THEN var.Mouse_Smooth++&lt;br /&gt;
}&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.Mouse_Smooth = 0&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.CursorX = var.Mouse_X&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.CursorY = var.Mouse_Y&lt;br /&gt;
IF var.Mouse_Smooth = 1 THEN var.CursorX = Smooth(var.Mouse_X, 1)&lt;br /&gt;
IF var.Mouse_Smooth = 1 THEN var.CursorY = Smooth(var.Mouse_Y, 1)&lt;br /&gt;
IF var.Mouse_Smooth = 2 THEN var.CursorX = Smooth(var.Mouse_X, 2)&lt;br /&gt;
IF var.Mouse_Smooth = 2 THEN var.CursorY = Smooth(var.Mouse_Y, 2)&lt;br /&gt;
IF var.Mouse_Smooth = 3 THEN var.CursorX = Smooth(var.Mouse_X, 3)&lt;br /&gt;
IF var.Mouse_Smooth = 3 THEN var.CursorY = Smooth(var.Mouse_Y, 3)&lt;br /&gt;
IF var.Mouse_Smooth = 4 THEN var.CursorX = Smooth(var.Mouse_X, 4)&lt;br /&gt;
IF var.Mouse_Smooth = 4 THEN var.CursorY = Smooth(var.Mouse_Y, 4)&lt;br /&gt;
IF var.Mouse_Smooth = 5 THEN var.CursorX = Smooth(var.Mouse_X, 5)&lt;br /&gt;
IF var.Mouse_Smooth = 5 THEN var.CursorY = Smooth(var.Mouse_Y, 5)&lt;br /&gt;
IF var.Mouse_Smooth = 6 THEN var.CursorX = Smooth(var.Mouse_X, 6)&lt;br /&gt;
IF var.Mouse_Smooth = 6 THEN var.CursorY = Smooth(var.Mouse_Y, 6)&lt;br /&gt;
IF var.Mouse_Smooth = 7 THEN var.CursorX = Smooth(var.Mouse_X, 7)&lt;br /&gt;
IF var.Mouse_Smooth = 7 THEN var.CursorY = Smooth(var.Mouse_Y, 7)&lt;br /&gt;
IF var.Mouse_Smooth = 8 THEN var.CursorX = Smooth(var.Mouse_X, 8)&lt;br /&gt;
IF var.Mouse_Smooth = 8 THEN var.CursorY = Smooth(var.Mouse_Y, 8)&lt;br /&gt;
IF var.Mouse_Smooth = 9 THEN var.CursorX = Smooth(var.Mouse_X, 9)&lt;br /&gt;
IF var.Mouse_Smooth = 9 THEN var.CursorY = Smooth(var.Mouse_Y, 9)&lt;br /&gt;
IF var.Mouse_Smooth = 10 THEN var.CursorX = Smooth(var.Mouse_X, 10)&lt;br /&gt;
IF var.Mouse_Smooth = 10 THEN var.CursorY = Smooth(var.Mouse_Y, 10)&lt;br /&gt;
IF var.Mouse_Smooth = 11 THEN var.CursorX = Smooth(var.Mouse_X, 11)&lt;br /&gt;
IF var.Mouse_Smooth = 11 THEN var.CursorY = Smooth(var.Mouse_Y, 11)&lt;br /&gt;
IF var.Mouse_Smooth = 12 THEN var.CursorX = Smooth(var.Mouse_X, 12)&lt;br /&gt;
IF var.Mouse_Smooth = 12 THEN var.CursorY = Smooth(var.Mouse_Y, 12)&lt;br /&gt;
IF var.Mouse_Smooth = 13 THEN var.CursorX = Smooth(var.Mouse_X, 13)&lt;br /&gt;
IF var.Mouse_Smooth = 13 THEN var.CursorY = Smooth(var.Mouse_Y, 13)&lt;br /&gt;
IF var.Mouse_Smooth = 14 THEN var.CursorX = Smooth(var.Mouse_X, 14)&lt;br /&gt;
IF var.Mouse_Smooth = 14 THEN var.CursorY = Smooth(var.Mouse_Y, 14)&lt;br /&gt;
IF var.Mouse_Smooth = 15 THEN var.CursorX = Smooth(var.Mouse_X, 15)&lt;br /&gt;
IF var.Mouse_Smooth = 15 THEN var.CursorY = Smooth(var.Mouse_Y, 15)&lt;br /&gt;
IF var.Mouse_Smooth = 16 THEN var.CursorX = Smooth(var.Mouse_X, 16)&lt;br /&gt;
IF var.Mouse_Smooth = 16 THEN var.CursorY = Smooth(var.Mouse_Y, 16)&lt;br /&gt;
IF var.Mouse_Smooth = 17 THEN var.CursorX = Smooth(var.Mouse_X, 17)&lt;br /&gt;
IF var.Mouse_Smooth = 17 THEN var.CursorY = Smooth(var.Mouse_Y, 17)&lt;br /&gt;
IF var.Mouse_Smooth = 18 THEN var.CursorX = Smooth(var.Mouse_X, 18)&lt;br /&gt;
IF var.Mouse_Smooth = 18 THEN var.CursorY = Smooth(var.Mouse_Y, 18)&lt;br /&gt;
IF var.Mouse_Smooth = 19 THEN var.CursorX = Smooth(var.Mouse_X, 19)&lt;br /&gt;
IF var.Mouse_Smooth = 19 THEN var.CursorY = Smooth(var.Mouse_Y, 19)&lt;br /&gt;
IF var.Mouse_Smooth = 20 THEN var.CursorX = Smooth(var.Mouse_X, 20)&lt;br /&gt;
IF var.Mouse_Smooth = 20 THEN var.CursorY = Smooth(var.Mouse_Y, 20)&lt;br /&gt;
IF var.Mouse_Smooth = 21 THEN var.CursorX = Smooth(var.Mouse_X, 21)&lt;br /&gt;
IF var.Mouse_Smooth = 21 THEN var.CursorY = Smooth(var.Mouse_Y, 21)&lt;br /&gt;
IF var.Mouse_Smooth = 22 THEN var.CursorX = Smooth(var.Mouse_X, 22)&lt;br /&gt;
IF var.Mouse_Smooth = 22 THEN var.CursorY = Smooth(var.Mouse_Y, 22)&lt;br /&gt;
IF var.Mouse_Smooth = 23 THEN var.CursorX = Smooth(var.Mouse_X, 23)&lt;br /&gt;
IF var.Mouse_Smooth = 23 THEN var.CursorY = Smooth(var.Mouse_Y, 23)&lt;br /&gt;
IF var.Mouse_Smooth = 24 THEN var.CursorX = Smooth(var.Mouse_X, 24)&lt;br /&gt;
IF var.Mouse_Smooth = 24 THEN var.CursorY = Smooth(var.Mouse_Y, 24)&lt;br /&gt;
IF var.Mouse_Smooth = 25 THEN var.CursorX = Smooth(var.Mouse_X, 25)&lt;br /&gt;
IF var.Mouse_Smooth = 25 THEN var.CursorY = Smooth(var.Mouse_Y, 25)&lt;br /&gt;
IF var.Mouse_Smooth = 26 THEN var.CursorX = Smooth(var.Mouse_X, 26)&lt;br /&gt;
IF var.Mouse_Smooth = 26 THEN var.CursorY = Smooth(var.Mouse_Y, 26)&lt;br /&gt;
IF var.Mouse_Smooth = 27 THEN var.CursorX = Smooth(var.Mouse_X, 27)&lt;br /&gt;
IF var.Mouse_Smooth = 27 THEN var.CursorY = Smooth(var.Mouse_Y, 27)&lt;br /&gt;
IF var.Mouse_Smooth = 28 THEN var.CursorX = Smooth(var.Mouse_X, 28)&lt;br /&gt;
IF var.Mouse_Smooth = 28 THEN var.CursorY = Smooth(var.Mouse_Y, 28)&lt;br /&gt;
IF var.Mouse_Smooth = 29 THEN var.CursorX = Smooth(var.Mouse_X, 29)&lt;br /&gt;
IF var.Mouse_Smooth = 29 THEN var.CursorY = Smooth(var.Mouse_Y, 29)&lt;br /&gt;
IF var.Mouse_Smooth &amp;gt;= 30 THEN var.CursorX = Smooth(var.Mouse_X, 30)&lt;br /&gt;
IF var.Mouse_Smooth &amp;gt;= 30 THEN var.CursorY = Smooth(var.Mouse_Y, 30)&lt;br /&gt;
&lt;br /&gt;
// ==== Wiimote Battery Test  =================================================&lt;br /&gt;
// Fills up with blinking LEDs to 50%&lt;br /&gt;
// then fills with solid LEDs to 100%&lt;br /&gt;
if var.BatteryDebug = false then var.BatteryDebug = &amp;quot;&amp;quot;&lt;br /&gt;
if var.BatteryTestButton = true and var.BatteryDisplayOn != true {&lt;br /&gt;
   wiimote1.Report15 = 0x80 | int(wiimote1.Rumble)&lt;br /&gt;
   var.BatteryLevel = wiimote1.Battery&lt;br /&gt;
   var.BatteryDebug = &amp;quot; [ Battery : &amp;quot;+(int(var.BatteryLevel/1.92))+&amp;quot;% ] &amp;quot;&lt;br /&gt;
   var.BatteryLEDs = 0&lt;br /&gt;
   var.BatteryLEDbefore = wiimote1.LEDs&lt;br /&gt;
   var.BatteryDisplayOn = true&lt;br /&gt;
}&lt;br /&gt;
if var.BatteryDisplayOn = true {&lt;br /&gt;
   if var.BatteryLEDs &amp;lt;= var.BatteryLevel {&lt;br /&gt;
      var.BatteryLEDs = var.BatteryLEDs + 12&lt;br /&gt;
      wait 60ms&lt;br /&gt;
   else&lt;br /&gt;
      wait 1000ms&lt;br /&gt;
      var.BatteryDisplayOn = &amp;quot;done&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   if var.BatteryLEDs &amp;lt;= 96 {&lt;br /&gt;
      var.BatteryLED_A = 0&lt;br /&gt;
      if var.BatteryLEDs &amp;lt;= 24 then var.BatteryLED_B = 1&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 24 and var.BatteryLEDs &amp;lt;= 48 then var.BatteryLED_B = 3&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 48 and var.BatteryLEDs &amp;lt;= 72 then var.BatteryLED_B = 7&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 72 then var.BatteryLED_B = 15&lt;br /&gt;
   else&lt;br /&gt;
      if var.BatteryLEDs &amp;lt;= 120 then var.BatteryLED_A = 1&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 120 and var.BatteryLEDs &amp;lt;= 144 then var.BatteryLED_A = 3&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 144 and var.BatteryLEDs &amp;lt;= 168 then var.BatteryLED_A = 7&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 168 then var.BatteryLED_A = 15&lt;br /&gt;
   }&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLED_A&lt;br /&gt;
   wait 40ms&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLED_B&lt;br /&gt;
   wait 20ms&lt;br /&gt;
elseif var.BatteryDisplayOn = &amp;quot;done&amp;quot;&lt;br /&gt;
   wiimote1.LEDs = 0&lt;br /&gt;
   wait 2 seconds&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLEDbefore&lt;br /&gt;
   var.BatteryDisplayOn = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug = var.CalibDebug + var.DebugPrecision + var.DebugSmooth + var.BatteryDebug&lt;br /&gt;
var.DebugPrecision = &amp;quot; [ Precision: &amp;quot;+ var.Mouse_Precision +&amp;quot; ]&amp;quot;&lt;br /&gt;
var.DebugSmooth = &amp;quot; [ Smooth: &amp;quot;+ int(var.Mouse_Smooth) +&amp;quot; ]&amp;quot;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=4029</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=4029"/>
				<updated>2010-06-05T07:31:11Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
*Description&lt;br /&gt;
The project ended up being a combination of virtual space and real world space where two people would navigate the virtual space together. The first person with the wiimotes attached to them would navigate real world space and virtual space, however without really knowing their position in virtual space, the second would be at a computer screen relaying directions to the first person to where to go in the virtual space while the first person would have to troubleshoot ways to navigate both spaces, avoiding real world and virtual obstacles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Maze Layout&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze Layout.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Maze&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*Unreal Engine&lt;br /&gt;
&lt;br /&gt;
[[Image:Unreal.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
*GlovePIE Code/Wiimote Code&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    A = Left-Click, + = Right-Click, Down = Middle-Click&lt;br /&gt;
    If var.HoldToMove is true, Hold B to move&lt;br /&gt;
    If var.HoldToMove is false, Hold B to stop ...&lt;br /&gt;
    ...and you can flip Wiimote upside-down to use normal mouse&lt;br /&gt;
    Home = Battery Test&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// ==== Buttons ================================================================&lt;br /&gt;
var.MoveButton = wiimote1.B&lt;br /&gt;
mouse.LeftButton = wiimote1.A&lt;br /&gt;
mouse.RightButton = wiimote1.Down&lt;br /&gt;
//mouse.MiddleButton = wiimote.Plus&lt;br /&gt;
var.BatteryTestButton = wiimote1.Home&lt;br /&gt;
keyboard.W = var.updir&lt;br /&gt;
keyboard.W = var.downdir&lt;br /&gt;
keyboard.D = var.right&lt;br /&gt;
keyboard.A = var.left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keyboard.W = var.forward&lt;br /&gt;
//keyboard.S = var.backward&lt;br /&gt;
/*&lt;br /&gt;
keyboard.G = wiimote.Plus&lt;br /&gt;
keyboard.H = wiimote.Minus&lt;br /&gt;
keyboard.I = wiimote.One&lt;br /&gt;
keyboard.J = wiimote.Two&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
//Y Axis&lt;br /&gt;
&lt;br /&gt;
if (not var.updir) &amp;amp;&amp;amp; (not var.downdir) {&lt;br /&gt;
   var.updir = wiimote2.RelAccY &amp;gt; 20&lt;br /&gt;
   if var.updir {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.updir = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.downdir) &amp;amp;&amp;amp; (not var.updir) {&lt;br /&gt;
   var.downdir = wiimote2.RelAccY &amp;lt; -20&lt;br /&gt;
   if var.downdir {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.downdir = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//X Axis&lt;br /&gt;
if (not var.right) &amp;amp;&amp;amp; (not var.left){&lt;br /&gt;
   var.right = wiimote2.RelAccX &amp;gt; 20&lt;br /&gt;
   if var.right {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.right = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.left) &amp;amp;&amp;amp; (not var.right){&lt;br /&gt;
   var.left = wiimote2.RelAccX &amp;lt; -20&lt;br /&gt;
   if var.left{&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.left = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//Z Axis&lt;br /&gt;
if (not var.forward) &amp;amp;&amp;amp; (not var.backward){&lt;br /&gt;
   var.forward = wiimote2.RelAccZ &amp;gt; 10&lt;br /&gt;
   if var.forward {&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.forward = false&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
if (not var.backward) &amp;amp;&amp;amp; (not var.forward){&lt;br /&gt;
   var.backward = wiimote2.RelAccZ &amp;lt; -10&lt;br /&gt;
   if var.backward{&lt;br /&gt;
      wait 100ms&lt;br /&gt;
      var.backward = false&lt;br /&gt;
      }&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// ==== Options ================================================================&lt;br /&gt;
var.HoldToMove = true&lt;br /&gt;
// true = Hold MoveButton to move&lt;br /&gt;
// false = Hold MoveButton to stop, flip Wiimote upside-down to use normal mouse&lt;br /&gt;
&lt;br /&gt;
var.EdgeStop = true&lt;br /&gt;
// Stops movement at the edge of the screen&lt;br /&gt;
&lt;br /&gt;
var.Speed = 1  // 0 to 100&lt;br /&gt;
// Overall speed of movement&lt;br /&gt;
&lt;br /&gt;
var.Mouse_Precision = 0 // 0 to 15&lt;br /&gt;
// Low values smooth the movement of the cursor&lt;br /&gt;
&lt;br /&gt;
PIE.FrameRate = 15hz  // Wii MotionPlus has a refresh rate of 100hz&lt;br /&gt;
// ==== Wii MotionPlus =========================================================&lt;br /&gt;
// Start of Wii Motion Plus script&lt;br /&gt;
IF HeldDown(abs(wiimote1.SmoothRoll)&amp;gt;135, 1 second) THEN var.WiimoteUpsideDown = true ELSE var.WiimoteUpsideDown = false&lt;br /&gt;
IF var.HoldToMove = true {&lt;br /&gt;
   var.Move = var.MoveButton&lt;br /&gt;
ELSE&lt;br /&gt;
   IF var.MoveButton = false AND var.WiimoteUpsideDown = false THEN var.Move = true ELSE var.Move = false&lt;br /&gt;
}&lt;br /&gt;
IF wiimote1.HasMotionPlus = false THEN var.CalibDebug = &amp;quot;[ WiiMotion Plus NOT DETECTED! ]&amp;quot; ELSE var.CalibDebug = &amp;quot;&amp;quot;&lt;br /&gt;
IF wiimote1.HasMotionPlus = true AND var.Move = true {&lt;br /&gt;
   var.YawSpeed = wiimote1.MotionPlus.YawSpeed&lt;br /&gt;
   var.PitchSpeed = wiimote1.MotionPlus.PitchSpeed&lt;br /&gt;
   IF SameValue( Smooth(wiimote1.Roll, 30), wiimote1.Roll, 50) THEN var.Roll = Smooth(wiimote1.Roll, 30) ELSE var.Roll = wiimote1.Roll&lt;br /&gt;
   IF var.Roll &amp;lt; 0 AND var.Roll &amp;gt;= -90 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, -90, 0, 0, 1)&lt;br /&gt;
      var.RightDown = -1&lt;br /&gt;
      var.TopUp = 1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;lt;= 90 AND var.Roll &amp;gt;= 0 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 0, 0, 1)&lt;br /&gt;
      var.RightDown = 1&lt;br /&gt;
      var.TopUp = 1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;gt; 90 AND var.Roll &amp;lt;= 180 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, 90, 180, 0, 1)&lt;br /&gt;
      var.RightDown = 1&lt;br /&gt;
      var.TopUp = -1&lt;br /&gt;
   }&lt;br /&gt;
   IF var.Roll &amp;lt; -90 AND var.Roll &amp;gt;= -180 {&lt;br /&gt;
      var.XYswap = 1 - EnsureMapRange(var.Roll, -90, -180, 0, 1)&lt;br /&gt;
      var.RightDown = -1&lt;br /&gt;
      var.TopUp = -1&lt;br /&gt;
   }&lt;br /&gt;
   var.TopUpFix = Smooth(var.TopUp,30) / abs(Smooth(var.TopUp,30))&lt;br /&gt;
   var.RightDownFix = Smooth(var.RightDown,30) / abs(Smooth(var.RightDown,30))&lt;br /&gt;
   var.SpeedX = var.TopUpFix * var.YawSpeed - ( var.TopUpFix * var.YawSpeed * var.XYswap ) + ( var.RightDownFix * var.PitchSpeed * var.XYswap )&lt;br /&gt;
   var.SpeedY = var.TopUpFix * var.PitchSpeed - ( var.TopUpFix * var.PitchSpeed * var.XYswap) + ( -var.RightDownFix * var.YawSpeed * var.XYswap )&lt;br /&gt;
   var.Mouse_X = var.Mouse_X + ( var.SpeedX / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )&lt;br /&gt;
   var.Mouse_Y = var.Mouse_Y - ( var.SpeedY / (20500 - EnsureMapRange(var.Speed, 0, 100, 0, 20000) ) )&lt;br /&gt;
}&lt;br /&gt;
IF var.Move = false {&lt;br /&gt;
   IF delta(var.Move) = true {&lt;br /&gt;
      var.Mouse_X = var.CursorX&lt;br /&gt;
      var.Mouse_Y = var.CursorY&lt;br /&gt;
   }&lt;br /&gt;
   var.Mouse_X = mouse.x&lt;br /&gt;
   var.Mouse_Y = mouse.y&lt;br /&gt;
ELSE&lt;br /&gt;
   IF var.EdgeStop = true {&lt;br /&gt;
      var.Mouse_X = EnsureRange(var.Mouse_X, 0, 1)&lt;br /&gt;
      var.Mouse_Y = EnsureRange(var.Mouse_Y, 0, 1)&lt;br /&gt;
   }&lt;br /&gt;
   mouse.x = var.CursorX&lt;br /&gt;
   mouse.y = var.CursorY&lt;br /&gt;
   IF delta(var.Move) = true {&lt;br /&gt;
      var.Mouse_X = var.CursorX&lt;br /&gt;
      var.Mouse_Y = var.CursorY&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// ==== Dynamic Motion Smoothing ===============================================&lt;br /&gt;
//  This automatically adjusts the smoothness&lt;br /&gt;
//  of the movement based on the cursor&amp;#039;s speed.&lt;br /&gt;
var.Mouse_Speed_X = int(abs(delta(var.Mouse_X))*1000)&lt;br /&gt;
var.Mouse_Speed_Y = int(abs(delta(var.Mouse_Y))*1000)&lt;br /&gt;
var.Mouse_Speed_XY = int(sqrt(var.Mouse_Speed_X + var.Mouse_Speed_Y) * var.Mouse_Precision)&lt;br /&gt;
IF var.Mouse_Speed_XY &amp;gt;= 30 THEN var.Mouse_SmoothHold = 0 ELSE var.Mouse_SmoothHold = 30 - var.Mouse_Speed_XY&lt;br /&gt;
var.Mouse_SmoothLimit = 30 - EnsureRange(var.Mouse_Precision*2, 0, 30)&lt;br /&gt;
IF var.Mouse_SmoothHold &amp;lt; var.Mouse_Smooth THEN var.Mouse_Smooth = var.Mouse_Smooth - (1 + int(EnsureMapRange(var.Mouse_SmoothHold, 0, 30, 30, 0)))&lt;br /&gt;
IF var.Mouse_SmoothHold &amp;gt; var.Mouse_Smooth OR (var.Mouse_SmoothHold = 30 AND var.Mouse_Smooth &amp;lt;= 29) {&lt;br /&gt;
   wait EnsureMapRange(var.Mouse_Smooth, 0, 29, 0, 100)ms&lt;br /&gt;
   IF var.Mouse_Smooth &amp;lt; var.Mouse_SmoothLimit THEN var.Mouse_Smooth++&lt;br /&gt;
}&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.Mouse_Smooth = 0&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.CursorX = var.Mouse_X&lt;br /&gt;
IF var.Mouse_Smooth &amp;lt;= 0 THEN var.CursorY = var.Mouse_Y&lt;br /&gt;
IF var.Mouse_Smooth = 1 THEN var.CursorX = Smooth(var.Mouse_X, 1)&lt;br /&gt;
IF var.Mouse_Smooth = 1 THEN var.CursorY = Smooth(var.Mouse_Y, 1)&lt;br /&gt;
IF var.Mouse_Smooth = 2 THEN var.CursorX = Smooth(var.Mouse_X, 2)&lt;br /&gt;
IF var.Mouse_Smooth = 2 THEN var.CursorY = Smooth(var.Mouse_Y, 2)&lt;br /&gt;
IF var.Mouse_Smooth = 3 THEN var.CursorX = Smooth(var.Mouse_X, 3)&lt;br /&gt;
IF var.Mouse_Smooth = 3 THEN var.CursorY = Smooth(var.Mouse_Y, 3)&lt;br /&gt;
IF var.Mouse_Smooth = 4 THEN var.CursorX = Smooth(var.Mouse_X, 4)&lt;br /&gt;
IF var.Mouse_Smooth = 4 THEN var.CursorY = Smooth(var.Mouse_Y, 4)&lt;br /&gt;
IF var.Mouse_Smooth = 5 THEN var.CursorX = Smooth(var.Mouse_X, 5)&lt;br /&gt;
IF var.Mouse_Smooth = 5 THEN var.CursorY = Smooth(var.Mouse_Y, 5)&lt;br /&gt;
IF var.Mouse_Smooth = 6 THEN var.CursorX = Smooth(var.Mouse_X, 6)&lt;br /&gt;
IF var.Mouse_Smooth = 6 THEN var.CursorY = Smooth(var.Mouse_Y, 6)&lt;br /&gt;
IF var.Mouse_Smooth = 7 THEN var.CursorX = Smooth(var.Mouse_X, 7)&lt;br /&gt;
IF var.Mouse_Smooth = 7 THEN var.CursorY = Smooth(var.Mouse_Y, 7)&lt;br /&gt;
IF var.Mouse_Smooth = 8 THEN var.CursorX = Smooth(var.Mouse_X, 8)&lt;br /&gt;
IF var.Mouse_Smooth = 8 THEN var.CursorY = Smooth(var.Mouse_Y, 8)&lt;br /&gt;
IF var.Mouse_Smooth = 9 THEN var.CursorX = Smooth(var.Mouse_X, 9)&lt;br /&gt;
IF var.Mouse_Smooth = 9 THEN var.CursorY = Smooth(var.Mouse_Y, 9)&lt;br /&gt;
IF var.Mouse_Smooth = 10 THEN var.CursorX = Smooth(var.Mouse_X, 10)&lt;br /&gt;
IF var.Mouse_Smooth = 10 THEN var.CursorY = Smooth(var.Mouse_Y, 10)&lt;br /&gt;
IF var.Mouse_Smooth = 11 THEN var.CursorX = Smooth(var.Mouse_X, 11)&lt;br /&gt;
IF var.Mouse_Smooth = 11 THEN var.CursorY = Smooth(var.Mouse_Y, 11)&lt;br /&gt;
IF var.Mouse_Smooth = 12 THEN var.CursorX = Smooth(var.Mouse_X, 12)&lt;br /&gt;
IF var.Mouse_Smooth = 12 THEN var.CursorY = Smooth(var.Mouse_Y, 12)&lt;br /&gt;
IF var.Mouse_Smooth = 13 THEN var.CursorX = Smooth(var.Mouse_X, 13)&lt;br /&gt;
IF var.Mouse_Smooth = 13 THEN var.CursorY = Smooth(var.Mouse_Y, 13)&lt;br /&gt;
IF var.Mouse_Smooth = 14 THEN var.CursorX = Smooth(var.Mouse_X, 14)&lt;br /&gt;
IF var.Mouse_Smooth = 14 THEN var.CursorY = Smooth(var.Mouse_Y, 14)&lt;br /&gt;
IF var.Mouse_Smooth = 15 THEN var.CursorX = Smooth(var.Mouse_X, 15)&lt;br /&gt;
IF var.Mouse_Smooth = 15 THEN var.CursorY = Smooth(var.Mouse_Y, 15)&lt;br /&gt;
IF var.Mouse_Smooth = 16 THEN var.CursorX = Smooth(var.Mouse_X, 16)&lt;br /&gt;
IF var.Mouse_Smooth = 16 THEN var.CursorY = Smooth(var.Mouse_Y, 16)&lt;br /&gt;
IF var.Mouse_Smooth = 17 THEN var.CursorX = Smooth(var.Mouse_X, 17)&lt;br /&gt;
IF var.Mouse_Smooth = 17 THEN var.CursorY = Smooth(var.Mouse_Y, 17)&lt;br /&gt;
IF var.Mouse_Smooth = 18 THEN var.CursorX = Smooth(var.Mouse_X, 18)&lt;br /&gt;
IF var.Mouse_Smooth = 18 THEN var.CursorY = Smooth(var.Mouse_Y, 18)&lt;br /&gt;
IF var.Mouse_Smooth = 19 THEN var.CursorX = Smooth(var.Mouse_X, 19)&lt;br /&gt;
IF var.Mouse_Smooth = 19 THEN var.CursorY = Smooth(var.Mouse_Y, 19)&lt;br /&gt;
IF var.Mouse_Smooth = 20 THEN var.CursorX = Smooth(var.Mouse_X, 20)&lt;br /&gt;
IF var.Mouse_Smooth = 20 THEN var.CursorY = Smooth(var.Mouse_Y, 20)&lt;br /&gt;
IF var.Mouse_Smooth = 21 THEN var.CursorX = Smooth(var.Mouse_X, 21)&lt;br /&gt;
IF var.Mouse_Smooth = 21 THEN var.CursorY = Smooth(var.Mouse_Y, 21)&lt;br /&gt;
IF var.Mouse_Smooth = 22 THEN var.CursorX = Smooth(var.Mouse_X, 22)&lt;br /&gt;
IF var.Mouse_Smooth = 22 THEN var.CursorY = Smooth(var.Mouse_Y, 22)&lt;br /&gt;
IF var.Mouse_Smooth = 23 THEN var.CursorX = Smooth(var.Mouse_X, 23)&lt;br /&gt;
IF var.Mouse_Smooth = 23 THEN var.CursorY = Smooth(var.Mouse_Y, 23)&lt;br /&gt;
IF var.Mouse_Smooth = 24 THEN var.CursorX = Smooth(var.Mouse_X, 24)&lt;br /&gt;
IF var.Mouse_Smooth = 24 THEN var.CursorY = Smooth(var.Mouse_Y, 24)&lt;br /&gt;
IF var.Mouse_Smooth = 25 THEN var.CursorX = Smooth(var.Mouse_X, 25)&lt;br /&gt;
IF var.Mouse_Smooth = 25 THEN var.CursorY = Smooth(var.Mouse_Y, 25)&lt;br /&gt;
IF var.Mouse_Smooth = 26 THEN var.CursorX = Smooth(var.Mouse_X, 26)&lt;br /&gt;
IF var.Mouse_Smooth = 26 THEN var.CursorY = Smooth(var.Mouse_Y, 26)&lt;br /&gt;
IF var.Mouse_Smooth = 27 THEN var.CursorX = Smooth(var.Mouse_X, 27)&lt;br /&gt;
IF var.Mouse_Smooth = 27 THEN var.CursorY = Smooth(var.Mouse_Y, 27)&lt;br /&gt;
IF var.Mouse_Smooth = 28 THEN var.CursorX = Smooth(var.Mouse_X, 28)&lt;br /&gt;
IF var.Mouse_Smooth = 28 THEN var.CursorY = Smooth(var.Mouse_Y, 28)&lt;br /&gt;
IF var.Mouse_Smooth = 29 THEN var.CursorX = Smooth(var.Mouse_X, 29)&lt;br /&gt;
IF var.Mouse_Smooth = 29 THEN var.CursorY = Smooth(var.Mouse_Y, 29)&lt;br /&gt;
IF var.Mouse_Smooth &amp;gt;= 30 THEN var.CursorX = Smooth(var.Mouse_X, 30)&lt;br /&gt;
IF var.Mouse_Smooth &amp;gt;= 30 THEN var.CursorY = Smooth(var.Mouse_Y, 30)&lt;br /&gt;
&lt;br /&gt;
// ==== Wiimote Battery Test  =================================================&lt;br /&gt;
// Fills up with blinking LEDs to 50%&lt;br /&gt;
// then fills with solid LEDs to 100%&lt;br /&gt;
if var.BatteryDebug = false then var.BatteryDebug = &amp;quot;&amp;quot;&lt;br /&gt;
if var.BatteryTestButton = true and var.BatteryDisplayOn != true {&lt;br /&gt;
   wiimote1.Report15 = 0x80 | int(wiimote1.Rumble)&lt;br /&gt;
   var.BatteryLevel = wiimote1.Battery&lt;br /&gt;
   var.BatteryDebug = &amp;quot; [ Battery : &amp;quot;+(int(var.BatteryLevel/1.92))+&amp;quot;% ] &amp;quot;&lt;br /&gt;
   var.BatteryLEDs = 0&lt;br /&gt;
   var.BatteryLEDbefore = wiimote1.LEDs&lt;br /&gt;
   var.BatteryDisplayOn = true&lt;br /&gt;
}&lt;br /&gt;
if var.BatteryDisplayOn = true {&lt;br /&gt;
   if var.BatteryLEDs &amp;lt;= var.BatteryLevel {&lt;br /&gt;
      var.BatteryLEDs = var.BatteryLEDs + 12&lt;br /&gt;
      wait 60ms&lt;br /&gt;
   else&lt;br /&gt;
      wait 1000ms&lt;br /&gt;
      var.BatteryDisplayOn = &amp;quot;done&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
   if var.BatteryLEDs &amp;lt;= 96 {&lt;br /&gt;
      var.BatteryLED_A = 0&lt;br /&gt;
      if var.BatteryLEDs &amp;lt;= 24 then var.BatteryLED_B = 1&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 24 and var.BatteryLEDs &amp;lt;= 48 then var.BatteryLED_B = 3&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 48 and var.BatteryLEDs &amp;lt;= 72 then var.BatteryLED_B = 7&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 72 then var.BatteryLED_B = 15&lt;br /&gt;
   else&lt;br /&gt;
      if var.BatteryLEDs &amp;lt;= 120 then var.BatteryLED_A = 1&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 120 and var.BatteryLEDs &amp;lt;= 144 then var.BatteryLED_A = 3&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 144 and var.BatteryLEDs &amp;lt;= 168 then var.BatteryLED_A = 7&lt;br /&gt;
      if var.BatteryLEDs &amp;gt; 168 then var.BatteryLED_A = 15&lt;br /&gt;
   }&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLED_A&lt;br /&gt;
   wait 40ms&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLED_B&lt;br /&gt;
   wait 20ms&lt;br /&gt;
elseif var.BatteryDisplayOn = &amp;quot;done&amp;quot;&lt;br /&gt;
   wiimote1.LEDs = 0&lt;br /&gt;
   wait 2 seconds&lt;br /&gt;
   wiimote1.LEDs = var.BatteryLEDbefore&lt;br /&gt;
   var.BatteryDisplayOn = false&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
debug = var.CalibDebug + var.DebugPrecision + var.DebugSmooth + var.BatteryDebug&lt;br /&gt;
var.DebugPrecision = &amp;quot; [ Precision: &amp;quot;+ var.Mouse_Precision +&amp;quot; ]&amp;quot;&lt;br /&gt;
var.DebugSmooth = &amp;quot; [ Smooth: &amp;quot;+ int(var.Mouse_Smooth) +&amp;quot; ]&amp;quot;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3972</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3972"/>
				<updated>2010-06-02T18:58:23Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
*Description&lt;br /&gt;
The project ended up being a combination of virtual space and real world space where two people would navigate the virtual space together. The first person with the wiimotes attached to them would navigate real world space and virtual space, however without really knowing their position in virtual space, the second would be at a computer screen relaying directions to the first person to where to go in the virtual space while the first person would have to troubleshoot ways to navigate both spaces, avoiding real world and virtual obstacles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maze Layout&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze Layout.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Maze&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Unreal Engine&lt;br /&gt;
&lt;br /&gt;
[[Image:Unreal.jpg|500px]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3971</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3971"/>
				<updated>2010-06-02T18:53:19Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3970</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3970"/>
				<updated>2010-06-02T18:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
UPDATE: I&amp;#039;m going to be using Processing&amp;#039;s brightness tracking along with a virtual keyboard created in Processing to control the movements of a game character. The user/users will have to navigate virtual space using hand held light sources and a web-cam paired with Processing&amp;#039;s brightness tracking.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
UPDATE: Processing and two external light sources along with a web-cam. Brightness tracking will track the two light sources and depending on the area Processing picks up the light sources it will cause virtual typing of the keyboard. This will be paired with another Processing sketch in the form of a game. Either two people can control the game, or a single person by themselves.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3969</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3969"/>
				<updated>2010-06-02T18:47:41Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Camera + Lights] -&amp;gt; [Processing] -&amp;gt; [Processing Game]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3968</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3968"/>
				<updated>2010-06-02T18:46:20Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3967</id>
		<title>Camera Keyboard - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Camera_Keyboard_-_Joeny_Thipsidakhom&amp;diff=3967"/>
				<updated>2010-06-02T18:45:49Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: New page: == Description == *Motivation Same as Midterm  I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space,...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3966</id>
		<title>Classes/2010/VIS145B</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3966"/>
				<updated>2010-06-02T18:43:55Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Final Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Related Links:==&lt;br /&gt;
&lt;br /&gt;
[http://www.bodybuildingrevealed.com/&amp;#039;&amp;#039;&amp;#039;body building&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
== Time and Process Based Digital Media II ==&lt;br /&gt;
Time: Thursdays 3:30-6:20pm, VAF 228&lt;br /&gt;
&lt;br /&gt;
This class is an advanced study and portfolio project course centered on the use of hardware and software to create interactive and time-based art.  These projects can take many forms—interactive installations, dynamic visualizations/sonifications, printed renderings—chosen by the students.  This will not be a course of technical instruction—rather we will consider technical and conceptual issues in tandem, supplementing discussions and activities with specific technical instruction where necessary.  There is a strong emphasis on the development and articulation of personal directions of research by the students in the course. &lt;br /&gt;
&lt;br /&gt;
I would like to split the reading/homework responsibility for two parts of the class.  In the first half of the term I will present a series of works and readings covering my particular interests--the intersections of social performance, embodied experience, and cognition.  In the latter half of the class (after the midterm) you all will do the presentations on topics of your choosing.  Working individually or in small groups, you will provide us with some conceptual provocation (reading material) covering topics you intend to engage with your final, and you will lead a discussion on technical and conceptual issues.  Reading and critical writing, in response to text and works you present and those I present, are integral to this course.&lt;br /&gt;
&lt;br /&gt;
The schedule is a living document and will be revised over the period of the course.&lt;br /&gt;
&lt;br /&gt;
== Instructor ==&lt;br /&gt;
Robert Twomey&lt;br /&gt;
&lt;br /&gt;
rtwomey@ucsd.edu&lt;br /&gt;
*http://roberttwomey.com&lt;br /&gt;
*http://experimentalgamelab.net&lt;br /&gt;
*http://crca.ucsd.edu&lt;br /&gt;
&lt;br /&gt;
Office Hours: Wednesday 3-4pm, Atkinson Hall Rm 1601 (CRCA research neighborhood).  Please e-mail me if you plan to attend.&lt;br /&gt;
&lt;br /&gt;
== Grading ==&lt;br /&gt;
*Midterm Project - 30%&lt;br /&gt;
*Final Project - 40%&lt;br /&gt;
*Presentations - 10%&lt;br /&gt;
*Readings/Assignments/Homework - 10%&lt;br /&gt;
*Participation - 10%&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
(1) Short presentation on your work in the second week of class.  This should be a statement of your interests, direction, goals with media art.  Present examples from your own work which you feel strongly about, and which best represent your interests and trajectory.  Present examples of other artist&amp;#039;s work that serve as models for the kind of work you would like to make. (5-10 minutes each)&lt;br /&gt;
&lt;br /&gt;
(2) Medium presentation on final projects in the second semester of the course (weeks 7-9).  This is the portion of the class where you dictate the reading and the discussion.  If you are presenting on a given week, you need to provide us with a reading 1 week in advance.  We will sign up for those time slots in week 6, just after the midterm. (10-15 minutes)&lt;br /&gt;
&lt;br /&gt;
=== Reading Responses ===&lt;br /&gt;
These are written summaries and critical responses to materials assigned for out of class viewing.  Things to consider: What points does the author make?  Do you buy their assumptions or agree with their conclusions?  Reading responses will be printed and turned in to the instructor at the beginning of class.  Generally these should be 1 page long.&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
Midterm and final projects will be graded on concept, effort, and realization. Formal proposals are a necessary component of the process so take them seriously.  Make the effort to get started early and seek the help you need--we want to see finished, well-considered pieces for the midterm and final. Additionally, you will need to submit documentation of the project after completion which includes images, video, and source code where applicable.  These materials (proposals and documentation) will all be posted to the wiki.&lt;br /&gt;
=== Documentation Policy ===&lt;br /&gt;
*section on your project&lt;br /&gt;
*source code&lt;br /&gt;
*image/video documentation.  5 images or 5 videos.&lt;br /&gt;
*descriptive writing (on intent, motivation, context)&lt;br /&gt;
&lt;br /&gt;
=== Attendance ===&lt;br /&gt;
Attendance is mandatory. Each unexcused absence will drop your final grade one letter.  There are only 10 weeks of class, please come to them all.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
=== Week 1 - Intro ===&lt;br /&gt;
*Introductions&lt;br /&gt;
*Scope of course, interests, technical possibilities.&lt;br /&gt;
*My work.&lt;br /&gt;
*Watch: We Live In Public.  2009. (excerpts)&lt;br /&gt;
*In class: personal page on wiki. [http://www.trsp.net/teaching/gamemod/ game-mod exercise]. [http://www.trsp.net/teaching/gamemod/gamemod_breakout_source_en.zip download link]&lt;br /&gt;
*Read: [http://www.nyu.edu/projects/xdesign/mainmenu/archive_tangible.html Against Virtualized Information], [http://www.nyu.edu/projects/xdesign/mainmenu/archive_analtictech.html Novel Analytic Techniques], and [http://www.nyu.edu/projects/xdesign/mainmenu/archive_infocounts.html What Information Counts?] by [http://www.environmentalhealthclinic.net/people/natalie-jeremijenko/ Natalie Jeremijenko]. &lt;br /&gt;
*Read: [http://www.yalealumnimagazine.com/issues/2004_03/jeremijenko.html An Engineer for the Avante Garde]&lt;br /&gt;
*Read: [http://www.worldchanging.com/archives/001450.html Natalie Jeremijenko The WorldChanging Interview]&lt;br /&gt;
*Read: [http://tech90s.walkerart.org/nj/transcript/nj_01.html Database Politics and Social Simulations], good background on her earlier artwork.&lt;br /&gt;
&lt;br /&gt;
=== Week 2 - Student Research Interests ===&lt;br /&gt;
*Due: 1 page on Jeremijenko. &lt;br /&gt;
*Presentations on your work.&lt;br /&gt;
*Read: [http://www.flong.com/texts/essays/essay_cvad/ Computer Vision for Artists and Designers: Pedagogic Tools and Techniques for Novice Programmers] Golan Levin. &amp;#039;&amp;#039;pay particular attention to part II. ELEMENTARY COMPUTER VISION TECHNIQUES.  we are going to try these in class next week.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Week 3 - Computer Vision / Human Perception ===&lt;br /&gt;
*Due: Nothing. Read the Golan Levin piece, but no written response.&lt;br /&gt;
*Discuss:&lt;br /&gt;
**Myron Kreuger. Video Place. 1989 [http://www.youtube.com/watch?v=dqZyZrN3Pl0]&lt;br /&gt;
**Text Rain. Camille Utterback &amp;amp; Romy Achituv. 1999. [http://www.youtube.com/watch?v=toWFvXHghDk] [http://www.camilleutterback.com/]&lt;br /&gt;
**Very Nervous System.  1982-1991. [http://vimeo.com/8120954]&lt;br /&gt;
**Suicide Box.  Bureau of Inverse Technology.  1996. (13:00)&lt;br /&gt;
**Marie Sester. ACCESS.  2003. [http://accessproject.net]&lt;br /&gt;
**Messa di Voce. Golan Levin and Zach Lieberman with Jaap Blonk and Joan La Barbara. 2003.  [http://www.flong.com/projects/messa/] [http://www.tmema.org/messa/messa.html]&lt;br /&gt;
**Seen.  David Rokeby.  2002.  [http://vimeo.com/6012986]&lt;br /&gt;
**Sorting Daemon. David Rokeby. 2003. [http://homepage.mac.com/davidrokeby/sorting.html]&lt;br /&gt;
**Cheese.  Christian Moller. 2003. [http://www.christian-moeller.com/display.php?project_id=36] made in collaboration with UCSD  [http://mplab.ucsd.edu/wordpress/ Machine Perception Lab]&lt;br /&gt;
**Eyewriter. 2009 [http://www.eyewriter.org/]&lt;br /&gt;
**Saccade. 2010 [http://roberttwomey.com/saccade] (in progress)&lt;br /&gt;
*Discuss: &lt;br /&gt;
**thresholding&lt;br /&gt;
**frame difference&lt;br /&gt;
**OpenCV - [http://ubaa.net/shared/processing/opencv/ download] [http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf reference manual].  If you are getting this for your computer, be sure to get OpenCV, the OpenCV Processing Library, and the OpenCV Processing Examples (three separate downloads).&lt;br /&gt;
**face recognition&lt;br /&gt;
*In Class:&lt;br /&gt;
**Working alone or in small groups, do experiments with video processing and computer vision.&lt;br /&gt;
&lt;br /&gt;
=== Week 4 - Computer Vision Work ===&lt;br /&gt;
* In Class:&lt;br /&gt;
** Work on computer vision projects&lt;br /&gt;
** Talk about midterm projects.&lt;br /&gt;
&lt;br /&gt;
=== Week 5 - Midterm Workshop ===&lt;br /&gt;
*Due: Midterm project proposal.&lt;br /&gt;
**Working individually or in small groups (2-3 people), produce an interactive piece that bridges the gap between screen space and physical space.  There are many ways to do this--using image-based computer vision techniques, game controllers, audio input, or other physical hardware (Arduino?).  Think about the parameters of interaction--are you documenting viewer&amp;#039;s behavior (unknown to them), are you taking a familiar form (such as a video game) and tweaking it in some way, are you intervening in social space?  Think about what form the output will take.  In your one page proposal, describe the input(s), output(s), and dynamic of interaction, as well as some statement of your motivation.  Why is this a valuable or interesting project?  In addition to the written description, produce supporting visual materials.  These should be two functional diagram images and two visual/aesthetic images.  The functional diagrams should show the necessary software and hardware components and explain how the interaction will occur.  The aesthetic diagrams will give us a sense of what it will look like, how the output will appear.  Make a page for your project (including a title) in the Midterm Projects section at the bottom of this page, upload the necessary materials and embed them in that page.  This proposal is due in class next week where we will critique and workshop the ideas.&lt;br /&gt;
*In class:&lt;br /&gt;
**Workshop midterm project ideas. (45 minutes)&lt;br /&gt;
**Work on midterm projects. &lt;br /&gt;
*NOTE: Best of ICAM from Candy Harris.  There will be an install in the annex here at Mandeville and presentations at the Experimental Theater in the CPMC (music building). They should come see what they are going to have to live up to for their final projects. Plus the keynote speakers (ICAM alumns) always have great info about career paths after graduation.&lt;br /&gt;
&lt;br /&gt;
=== Week 6 ===&lt;br /&gt;
In class work on midterms.&lt;br /&gt;
&lt;br /&gt;
=== Week 7 - Midterm Critiques ===&lt;br /&gt;
In class critique of midterms.&lt;br /&gt;
&lt;br /&gt;
=== Week 8 ===&lt;br /&gt;
&lt;br /&gt;
Due: Written response (1 page) to one of your classmate&amp;#039;s projects.&lt;br /&gt;
&lt;br /&gt;
In Class: Draft final project proposal and post to wiki by the end of class.  In class discussion as needed.&lt;br /&gt;
&lt;br /&gt;
=== Week 9 ===&lt;br /&gt;
work on finals&lt;br /&gt;
&lt;br /&gt;
=== Week 10 - Final Critiques ===&lt;br /&gt;
In-class critiques of finals.&lt;br /&gt;
&lt;br /&gt;
=== Finals Week ===&lt;br /&gt;
Final documentation due.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
To Be Scheduled&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Performance for the camera, for the web&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Discuss Chatroulette. Facebook, Twitter, Youtube.  Attention in the social net.&lt;br /&gt;
*ManyCam [http://www.manycam.com/]&lt;br /&gt;
*PS3 eye&lt;br /&gt;
*jennicam [http://www.wired.com/thisdayintech/2010/04/0414jennicam-launches wired]&lt;br /&gt;
*Lonelygirl15 [http://www.youtube.com/watch?v=-goXKtd6cPo youtube] [http://www.wired.com/wired/archive/14.12/lonelygirl.html article]&lt;br /&gt;
*Discuss telematic perfromance. &lt;br /&gt;
* Justin.tv [http://www.justin.tv/#r=s7RVqBU~]&lt;br /&gt;
*Read: The Presentation of Self in Everyday Life (excerpt).  Erving Goffman. 1959.&lt;br /&gt;
*Read: Performance: A Critical Introduction (excerpt).  Richard Carlson. 2004.&lt;br /&gt;
*Do: Intervention in social circuits.  Chatroulette/Facebook/Youtube exercise.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Social Networks/Web 2.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Protocol, Control, and Networks by Alexander Galloway and Eugene Thacker.  Grey Room 17, Fall 2004 p 6-29.  &lt;br /&gt;
*Read: DIGITAL MAOISM: The Hazards of the New Online Collectivism.  Jaron Lanier.  2006.&lt;br /&gt;
*Watch: MediatedCultures @ Kansas State http://mediatedcultures.net/mediatedculture.htm&lt;br /&gt;
*Datamining/Complex Networks, node-edge graphing.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Digital Memory/Personal Media: Where do we exist and how do we remember?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Mediated Memories in the Digital Age (excerpt). Jose van Dijck. 2007.&lt;br /&gt;
*Read: Are you sure you want to do this?  Matthias Fuchs 1994.&lt;br /&gt;
*Read: Delete: The Virtue of Forgetting in the Digital Age (excerpt). Viktor Mayer-Schonberger. 2009.&lt;br /&gt;
*Flickr.com, Facebook&lt;br /&gt;
*Discuss: My Pocket. Burak Arikan. 2008. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cognition + Creativity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Generative Art vs. Computational Creativity&lt;br /&gt;
*Casy Reas&lt;br /&gt;
*Processing.org&lt;br /&gt;
*Tom Shannon. [http://www.wired.com/magazine/2010/03/pl_arts_pendulum/all/1]&lt;br /&gt;
*Read: Triumph of the Cyborg Composer. &lt;br /&gt;
*Read: How to draw three people in a garden.  1988.&lt;br /&gt;
*Read: Shades of Computational Evocation and Meaning: The GRIOT System and Improvisational Poetry Generation. 2006.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Artificial Intelligence&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Expressive Processing (excerpt), Noah Wardrip Fruin, 2009. &lt;br /&gt;
*Read: Elephants Don&amp;#039;t Play Chess, Rodney Brooks, 1990. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appropriation and Remix&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: The Fiction of Memory.  New York Times, March 12, 2010.  Luc Sante&lt;br /&gt;
*Read: Jonatham Lethem.  The Ecstasy of Influence. Harpers Magazine.  2007. &lt;br /&gt;
*Remix Culture.  Lev.&lt;br /&gt;
*God&amp;#039;s Little Toys: Confessions of a cut &amp;amp; paste artist.  William Gibson. 2005. *http://www.wired.com/wired/archive/13.07/gibson.html&lt;br /&gt;
*Reality Hunger: A Manifesto.  David Shields. 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Materiality in the information age.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Tangible interfaces, haptic feedback. &lt;br /&gt;
*Read: Evocative Objects: Things We Think With (excerpt). Sherry Turkle, 2007. &lt;br /&gt;
*Read: New Media and the Forensic Imagination (excerpt). Matthew Kirschenbaum. 2008.&lt;br /&gt;
*View: BIT Plane.  &lt;br /&gt;
*View: Garbage Cubes&lt;br /&gt;
*Discuss techniques of markerless tracking, augmented reality, QR codes, etc.  *Online/Offline Space.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Embodiment&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Computing with bodies, engineered bodies&lt;br /&gt;
*tactile media, haptic interface&lt;br /&gt;
*embodied perception&lt;br /&gt;
*Read: Stelarc. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Self-Image&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Self/Image: Technology, Representation, and the Contemporary Subject (excerpt).  Amelia Jones, 2006.&lt;br /&gt;
*Do: Forensic Photoshop Exercise.&lt;br /&gt;
*http://www.flickr.com/photos/dryponder/sets/72157623726710218/&lt;br /&gt;
*http://nymag.com/daily/intel/2010/02/obama_being_forced_to_look_at.html#photo=1&lt;br /&gt;
*http://niccageaseveryone.blogspot.com/&lt;br /&gt;
*http://bubleraptor.tumblr.com/&lt;br /&gt;
*photoshop free Marie Claire issue: http://jezebel.com/5511507/so-long-as-your-face-looks-alright-everything-else-can-be-photoshopped&lt;br /&gt;
&lt;br /&gt;
== Places to Find Art ==&lt;br /&gt;
* http://we-make-money-not-art.com/&lt;br /&gt;
* http://www.isea-web.org/, http://www.isea2010ruhr.org/&lt;br /&gt;
* http://www.transmediale.de/en&lt;br /&gt;
* http://01sj.org/&lt;br /&gt;
* http://www.file.org.br/&lt;br /&gt;
* http://www.aec.at/festival_about_en.php&lt;br /&gt;
* http://www.sciencegallery.com/lightwave09&lt;br /&gt;
* Institutions that Sponsor/Show Media Art&lt;br /&gt;
** Eyebeam New York City&lt;br /&gt;
** New Museum/Rhizome.org http://rhizome.org&lt;br /&gt;
** HarvestWorks&lt;br /&gt;
** Machine Project, Los Angeles.&lt;br /&gt;
&lt;br /&gt;
== Midterm Projects ==&lt;br /&gt;
Make pages here. &lt;br /&gt;
* [[DummyProject | Dummy Project]]&lt;br /&gt;
* [[MidtermProject| MotionDJ - Leilani Martin]]&lt;br /&gt;
* [[What&amp;#039;s For Lunch, Kids? by Kelley Kim| &amp;#039;&amp;#039;What&amp;#039;s For Lunch, Kids?&amp;#039;&amp;#039;   - Kelley Kim]]&lt;br /&gt;
* [[Virtual Walk? - Joeny Thipsidakhom]]&lt;br /&gt;
* [[Untitled Midterm| Untitled - Jezreel Callejas]]&lt;br /&gt;
* [[Midterm Project - Tony Lu | Virtual Maze - Tony Lu]]&lt;br /&gt;
* [[Midterm Project  | SayCHEESE - Joel and Jenny Chang]]&lt;br /&gt;
* [[Carnival Ride| Carnival Ride - Christina Sanchez and Jennifer Sunga]]&lt;br /&gt;
* [[Hunted - Anna Lin, Jenny Wang, and Ellen Huang]]&lt;br /&gt;
* [[Eye Motion Experiment - Javi Lee]]&lt;br /&gt;
* [[Social Creature | Boo (formerly Social Creature) - Jet Antonio]]&lt;br /&gt;
* [[Sound Sketch - Emilio Marcelino, Greg Parsons, and Ben Brickley]]&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[Aquarium| Aquarium - Jezreel Callejas]]&lt;br /&gt;
* [[Not So Lost| Not So Lost - Ben Brickely, Emilio Marcelino and Greg Parsons]]&lt;br /&gt;
* [[Dance in the Dark - Anna Lin, Jenny Wang and Ellen Huang]]&lt;br /&gt;
* [[Inkling One | Inkling One - Jet Antonio]]&lt;br /&gt;
* [[Camera Keyboard - Joeny Thipsidakhom]]&lt;br /&gt;
* [[uMV | uMV - Tony Lu]]&lt;br /&gt;
* [[Stone Face | Stone Face - Jennifer Sunga]]&lt;br /&gt;
* [[This Music: Prohibited | This Music: Prohibited  - Kelley Kim]]&lt;br /&gt;
* [[Blockman | Blockman - Javier Lee]]&lt;br /&gt;
* [[What do you see? | What do you see? - Christina Sanchez]]&lt;br /&gt;
* [[Happy Days - Gregory Parsons]]&lt;br /&gt;
&lt;br /&gt;
== Student Pages ==&lt;br /&gt;
Click &amp;quot;edit&amp;quot; on the right to add your own page below. &lt;br /&gt;
* [[Students/RobertTwomey | RobertTwomey]]&lt;br /&gt;
* [[Students/Javier Lee | Javier Lee]]&lt;br /&gt;
* [[Students/Jenny Wang | Jenny Wang]]&lt;br /&gt;
* [[Students/Joeny Thipsidakhom | Joeny Thipsidakhom]]&lt;br /&gt;
* [[Students/Kuan-Ting Lu | Tony Lu]]&lt;br /&gt;
* [[Students/Jezreel Callejas| Jezreel Callejas]]&lt;br /&gt;
* [[Students/ChristinaSanchez| Christina Sanchez]]&lt;br /&gt;
* [[Students/BenBrickley | BenBrickley]]&lt;br /&gt;
* [[Students/Ellen Huang | Ellen Huang]]&lt;br /&gt;
* [[Students/Kelley Kim | Kelley Kim]]&lt;br /&gt;
* [[Students/EmilioMarcelino | EmilioMarcelino]]&lt;br /&gt;
* [[Students/Anna Lin | Anna Lin]]&lt;br /&gt;
* [[Student/Jenny Chang | Jenny Chang]]&lt;br /&gt;
* [[Student/Jet Antonio | Jet Antonio]]&lt;br /&gt;
* [[Students/GregoryParsons | Gregory Parsons]]&lt;br /&gt;
* [[Students/Jennifer Sunga | Jennifer Sunga]]&lt;br /&gt;
* [[Students/LeilaniMartin | Leilani Martin]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3928</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3928"/>
				<updated>2010-05-21T01:06:57Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3925</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3925"/>
				<updated>2010-05-21T01:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game/animation that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs and secondary interaction. I&amp;#039;ll create some sort of simple game/environment/animation in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3922</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3922"/>
				<updated>2010-05-21T01:00:52Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs. I&amp;#039;ll create some sort of simple game or environment in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3921</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3921"/>
				<updated>2010-05-21T01:00:31Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs. I&amp;#039;ll create some sort of simple game or environment in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3918</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3918"/>
				<updated>2010-05-21T00:59:53Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
I&amp;#039;m going to attempt to create a sort of game that uses the brightness tracking of Processing and an external controller for inputs. As the brightness spot moves so will the character in the game would too (left, right, up, down) and as you press a button on the controller it would cause something on screen.&lt;br /&gt;
*Technical Description&lt;br /&gt;
Processing and an external controller. Brightness tracking would allow for character movement while the external controller would allow for user inputs. I&amp;#039;ll create some sort of simple game or environment in processing which to user would have to interact with.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3913</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3913"/>
				<updated>2010-05-21T00:53:49Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Technical Description&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3912</id>
		<title>Untitled (for now) - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Untitled_(for_now)_-_Joeny_Thipsidakhom&amp;diff=3912"/>
				<updated>2010-05-21T00:53:24Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: New page: == Untitled ==  == Description == *Motivation Same as Midterm *Interactive paradigm Coming Soon... *Technical Description Coming Soon...  == Visualization == *Functional Diagrams Coming So...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Untitled ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
Same as Midterm&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Technical Description&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
Coming Soon...&lt;br /&gt;
*Visual Concept&lt;br /&gt;
Coming Soon...&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3911</id>
		<title>Classes/2010/VIS145B</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3911"/>
				<updated>2010-05-21T00:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Final Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Related Links:==&lt;br /&gt;
&lt;br /&gt;
[http://www.bodybuildingrevealed.com/&amp;#039;&amp;#039;&amp;#039;body building&amp;#039;&amp;#039;&amp;#039;]&lt;br /&gt;
&lt;br /&gt;
== Time and Process Based Digital Media II ==&lt;br /&gt;
Time: Thursdays 3:30-6:20pm, VAF 228&lt;br /&gt;
&lt;br /&gt;
This class is an advanced study and portfolio project course centered on the use of hardware and software to create interactive and time-based art.  These projects can take many forms—interactive installations, dynamic visualizations/sonifications, printed renderings—chosen by the students.  This will not be a course of technical instruction—rather we will consider technical and conceptual issues in tandem, supplementing discussions and activities with specific technical instruction where necessary.  There is a strong emphasis on the development and articulation of personal directions of research by the students in the course. &lt;br /&gt;
&lt;br /&gt;
I would like to split the reading/homework responsibility for two parts of the class.  In the first half of the term I will present a series of works and readings covering my particular interests--the intersections of social performance, embodied experience, and cognition.  In the latter half of the class (after the midterm) you all will do the presentations on topics of your choosing.  Working individually or in small groups, you will provide us with some conceptual provocation (reading material) covering topics you intend to engage with your final, and you will lead a discussion on technical and conceptual issues.  Reading and critical writing, in response to text and works you present and those I present, are integral to this course.&lt;br /&gt;
&lt;br /&gt;
The schedule is a living document and will be revised over the period of the course.&lt;br /&gt;
&lt;br /&gt;
== Instructor ==&lt;br /&gt;
Robert Twomey&lt;br /&gt;
&lt;br /&gt;
rtwomey@ucsd.edu&lt;br /&gt;
*http://roberttwomey.com&lt;br /&gt;
*http://experimentalgamelab.net&lt;br /&gt;
*http://crca.ucsd.edu&lt;br /&gt;
&lt;br /&gt;
Office Hours: Wednesday 3-4pm, Atkinson Hall Rm 1601 (CRCA research neighborhood).  Please e-mail me if you plan to attend.&lt;br /&gt;
&lt;br /&gt;
== Grading ==&lt;br /&gt;
*Midterm Project - 30%&lt;br /&gt;
*Final Project - 40%&lt;br /&gt;
*Presentations - 10%&lt;br /&gt;
*Readings - 10%&lt;br /&gt;
*Participation - 10%&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
(1) Short presentation on your work in the second week of class.  This should be a statement of your interests, direction, goals with media art.  Present examples from your own work which you feel strongly about, and which best represent your interests and trajectory.  Present examples of other artist&amp;#039;s work that serve as models for the kind of work you would like to make. (5-10 minutes each)&lt;br /&gt;
&lt;br /&gt;
(2) Medium presentation on final projects in the second semester of the course (weeks 7-9).  This is the portion of the class where you dictate the reading and the discussion.  If you are presenting on a given week, you need to provide us with a reading 1 week in advance.  We will sign up for those time slots in week 6, just after the midterm. (10-15 minutes)&lt;br /&gt;
&lt;br /&gt;
=== Reading Responses ===&lt;br /&gt;
These are written summaries and critical responses to materials assigned for out of class viewing.  Things to consider: What points does the author make?  Do you buy their assumptions or agree with their conclusions?  Reading responses will be printed and turned in to the instructor at the beginning of class.  Generally these should be 1 page long.&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
Midterm and final projects will be graded on concept, effort, and realization. Formal proposals are a necessary component of the process so take them seriously.  Make the effort to get started early and seek the help you need--we want to see finished, well-considered pieces for the midterm and final. Additionally, you will need to submit documentation of the project after completion which includes images, video, and source code where applicable.  These materials (proposals and documentation) will all be posted to the wiki.&lt;br /&gt;
=== Documentation Policy ===&lt;br /&gt;
*section on your project&lt;br /&gt;
*source code&lt;br /&gt;
*image/video documentation.  5 images or 5 videos.&lt;br /&gt;
*descriptive writing (on intent, motivation, context)&lt;br /&gt;
&lt;br /&gt;
=== Attendance ===&lt;br /&gt;
Attendance is mandatory. Each unexcused absence will drop your final grade one letter.  There are only 10 weeks of class, please come to them all.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
=== Week 1 - Intro ===&lt;br /&gt;
*Introductions&lt;br /&gt;
*Scope of course, interests, technical possibilities.&lt;br /&gt;
*My work.&lt;br /&gt;
*Watch: We Live In Public.  2009. (excerpts)&lt;br /&gt;
*In class: personal page on wiki. [http://www.trsp.net/teaching/gamemod/ game-mod exercise]. [http://www.trsp.net/teaching/gamemod/gamemod_breakout_source_en.zip download link]&lt;br /&gt;
*Read: [http://www.nyu.edu/projects/xdesign/mainmenu/archive_tangible.html Against Virtualized Information], [http://www.nyu.edu/projects/xdesign/mainmenu/archive_analtictech.html Novel Analytic Techniques], and [http://www.nyu.edu/projects/xdesign/mainmenu/archive_infocounts.html What Information Counts?] by [http://www.environmentalhealthclinic.net/people/natalie-jeremijenko/ Natalie Jeremijenko]. &lt;br /&gt;
*Read: [http://www.yalealumnimagazine.com/issues/2004_03/jeremijenko.html An Engineer for the Avante Garde]&lt;br /&gt;
*Read: [http://www.worldchanging.com/archives/001450.html Natalie Jeremijenko The WorldChanging Interview]&lt;br /&gt;
*Read: [http://tech90s.walkerart.org/nj/transcript/nj_01.html Database Politics and Social Simulations], good background on her earlier artwork.&lt;br /&gt;
&lt;br /&gt;
=== Week 2 - Student Research Interests ===&lt;br /&gt;
*Due: 1 page on Jeremijenko. &lt;br /&gt;
*Presentations on your work.&lt;br /&gt;
*Read: [http://www.flong.com/texts/essays/essay_cvad/ Computer Vision for Artists and Designers: Pedagogic Tools and Techniques for Novice Programmers] Golan Levin. &amp;#039;&amp;#039;pay particular attention to part II. ELEMENTARY COMPUTER VISION TECHNIQUES.  we are going to try these in class next week.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Week 3 - Computer Vision / Human Perception ===&lt;br /&gt;
*Due: Nothing. Read the Golan Levin piece, but no written response.&lt;br /&gt;
*Discuss:&lt;br /&gt;
**Myron Kreuger. Video Place. 1989 [http://www.youtube.com/watch?v=dqZyZrN3Pl0]&lt;br /&gt;
**Text Rain. Camille Utterback &amp;amp; Romy Achituv. 1999. [http://www.youtube.com/watch?v=toWFvXHghDk] [http://www.camilleutterback.com/]&lt;br /&gt;
**Very Nervous System.  1982-1991. [http://vimeo.com/8120954]&lt;br /&gt;
**Suicide Box.  Bureau of Inverse Technology.  1996. (13:00)&lt;br /&gt;
**Marie Sester. ACCESS.  2003. [http://accessproject.net]&lt;br /&gt;
**Messa di Voce. Golan Levin and Zach Lieberman with Jaap Blonk and Joan La Barbara. 2003.  [http://www.flong.com/projects/messa/] [http://www.tmema.org/messa/messa.html]&lt;br /&gt;
**Seen.  David Rokeby.  2002.  [http://vimeo.com/6012986]&lt;br /&gt;
**Sorting Daemon. David Rokeby. 2003. [http://homepage.mac.com/davidrokeby/sorting.html]&lt;br /&gt;
**Cheese.  Christian Moller. 2003. [http://www.christian-moeller.com/display.php?project_id=36] made in collaboration with UCSD  [http://mplab.ucsd.edu/wordpress/ Machine Perception Lab]&lt;br /&gt;
**Eyewriter. 2009 [http://www.eyewriter.org/]&lt;br /&gt;
**Saccade. 2010 [http://roberttwomey.com/saccade] (in progress)&lt;br /&gt;
*Discuss: &lt;br /&gt;
**thresholding&lt;br /&gt;
**frame difference&lt;br /&gt;
**OpenCV - [http://ubaa.net/shared/processing/opencv/ download] [http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf reference manual].  If you are getting this for your computer, be sure to get OpenCV, the OpenCV Processing Library, and the OpenCV Processing Examples (three separate downloads).&lt;br /&gt;
**face recognition&lt;br /&gt;
*In Class:&lt;br /&gt;
**Working alone or in small groups, do experiments with video processing and computer vision.&lt;br /&gt;
&lt;br /&gt;
=== Week 4 - Computer Vision Work ===&lt;br /&gt;
* In Class:&lt;br /&gt;
** Work on computer vision projects&lt;br /&gt;
** Talk about midterm projects.&lt;br /&gt;
&lt;br /&gt;
=== Week 5 - Midterm Workshop ===&lt;br /&gt;
*Due: Midterm project proposal.&lt;br /&gt;
**Working individually or in small groups (2-3 people), produce an interactive piece that bridges the gap between screen space and physical space.  There are many ways to do this--using image-based computer vision techniques, game controllers, audio input, or other physical hardware (Arduino?).  Think about the parameters of interaction--are you documenting viewer&amp;#039;s behavior (unknown to them), are you taking a familiar form (such as a video game) and tweaking it in some way, are you intervening in social space?  Think about what form the output will take.  In your one page proposal, describe the input(s), output(s), and dynamic of interaction, as well as some statement of your motivation.  Why is this a valuable or interesting project?  In addition to the written description, produce supporting visual materials.  These should be two functional diagram images and two visual/aesthetic images.  The functional diagrams should show the necessary software and hardware components and explain how the interaction will occur.  The aesthetic diagrams will give us a sense of what it will look like, how the output will appear.  Make a page for your project (including a title) in the Midterm Projects section at the bottom of this page, upload the necessary materials and embed them in that page.  This proposal is due in class next week where we will critique and workshop the ideas.&lt;br /&gt;
*In class:&lt;br /&gt;
**Workshop midterm project ideas. (45 minutes)&lt;br /&gt;
**Work on midterm projects. &lt;br /&gt;
*NOTE: Best of ICAM from Candy Harris.  There will be an install in the annex here at Mandeville and presentations at the Experimental Theater in the CPMC (music building). They should come see what they are going to have to live up to for their final projects. Plus the keynote speakers (ICAM alumns) always have great info about career paths after graduation.&lt;br /&gt;
&lt;br /&gt;
=== Week 6 ===&lt;br /&gt;
In class work on midterms.&lt;br /&gt;
&lt;br /&gt;
=== Week 7 - Midterm Critiques ===&lt;br /&gt;
In class critique of midterms.&lt;br /&gt;
&lt;br /&gt;
=== Week 8 ===&lt;br /&gt;
&lt;br /&gt;
Due: Written response (1 page) to one of your classmate&amp;#039;s projects.&lt;br /&gt;
&lt;br /&gt;
In Class: Draft final project proposal and post to wiki by the end of class.  In class discussion as needed.&lt;br /&gt;
&lt;br /&gt;
=== Week 9 ===&lt;br /&gt;
work on finals&lt;br /&gt;
&lt;br /&gt;
=== Week 10 - Final Critiques ===&lt;br /&gt;
In-class critiques of finals.&lt;br /&gt;
&lt;br /&gt;
=== Finals Week ===&lt;br /&gt;
Final documentation due.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
To Be Scheduled&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Performance for the camera, for the web&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Discuss Chatroulette. Facebook, Twitter, Youtube.  Attention in the social net.&lt;br /&gt;
*ManyCam [http://www.manycam.com/]&lt;br /&gt;
*PS3 eye&lt;br /&gt;
*jennicam [http://www.wired.com/thisdayintech/2010/04/0414jennicam-launches wired]&lt;br /&gt;
*Lonelygirl15 [http://www.youtube.com/watch?v=-goXKtd6cPo youtube] [http://www.wired.com/wired/archive/14.12/lonelygirl.html article]&lt;br /&gt;
*Discuss telematic perfromance. &lt;br /&gt;
* Justin.tv [http://www.justin.tv/#r=s7RVqBU~]&lt;br /&gt;
*Read: The Presentation of Self in Everyday Life (excerpt).  Erving Goffman. 1959.&lt;br /&gt;
*Read: Performance: A Critical Introduction (excerpt).  Richard Carlson. 2004.&lt;br /&gt;
*Do: Intervention in social circuits.  Chatroulette/Facebook/Youtube exercise.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Social Networks/Web 2.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Protocol, Control, and Networks by Alexander Galloway and Eugene Thacker.  Grey Room 17, Fall 2004 p 6-29.  &lt;br /&gt;
*Read: DIGITAL MAOISM: The Hazards of the New Online Collectivism.  Jaron Lanier.  2006.&lt;br /&gt;
*Watch: MediatedCultures @ Kansas State http://mediatedcultures.net/mediatedculture.htm&lt;br /&gt;
*Datamining/Complex Networks, node-edge graphing.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Digital Memory/Personal Media: Where do we exist and how do we remember?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Mediated Memories in the Digital Age (excerpt). Jose van Dijck. 2007.&lt;br /&gt;
*Read: Are you sure you want to do this?  Matthias Fuchs 1994.&lt;br /&gt;
*Read: Delete: The Virtue of Forgetting in the Digital Age (excerpt). Viktor Mayer-Schonberger. 2009.&lt;br /&gt;
*Flickr.com, Facebook&lt;br /&gt;
*Discuss: My Pocket. Burak Arikan. 2008. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cognition + Creativity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Generative Art vs. Computational Creativity&lt;br /&gt;
*Casy Reas&lt;br /&gt;
*Processing.org&lt;br /&gt;
*Tom Shannon. [http://www.wired.com/magazine/2010/03/pl_arts_pendulum/all/1]&lt;br /&gt;
*Read: Triumph of the Cyborg Composer. &lt;br /&gt;
*Read: How to draw three people in a garden.  1988.&lt;br /&gt;
*Read: Shades of Computational Evocation and Meaning: The GRIOT System and Improvisational Poetry Generation. 2006.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Artificial Intelligence&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Expressive Processing (excerpt), Noah Wardrip Fruin, 2009. &lt;br /&gt;
*Read: Elephants Don&amp;#039;t Play Chess, Rodney Brooks, 1990. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appropriation and Remix&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: The Fiction of Memory.  New York Times, March 12, 2010.  Luc Sante&lt;br /&gt;
*Read: Jonatham Lethem.  The Ecstasy of Influence. Harpers Magazine.  2007. &lt;br /&gt;
*Remix Culture.  Lev.&lt;br /&gt;
*God&amp;#039;s Little Toys: Confessions of a cut &amp;amp; paste artist.  William Gibson. 2005. *http://www.wired.com/wired/archive/13.07/gibson.html&lt;br /&gt;
*Reality Hunger: A Manifesto.  David Shields. 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Materiality in the information age.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Tangible interfaces, haptic feedback. &lt;br /&gt;
*Read: Evocative Objects: Things We Think With (excerpt). Sherry Turkle, 2007. &lt;br /&gt;
*Read: New Media and the Forensic Imagination (excerpt). Matthew Kirschenbaum. 2008.&lt;br /&gt;
*View: BIT Plane.  &lt;br /&gt;
*View: Garbage Cubes&lt;br /&gt;
*Discuss techniques of markerless tracking, augmented reality, QR codes, etc.  *Online/Offline Space.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Embodiment&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Computing with bodies, engineered bodies&lt;br /&gt;
*tactile media, haptic interface&lt;br /&gt;
*embodied perception&lt;br /&gt;
*Read: Stelarc. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Self-Image&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Self/Image: Technology, Representation, and the Contemporary Subject (excerpt).  Amelia Jones, 2006.&lt;br /&gt;
*Do: Forensic Photoshop Exercise.&lt;br /&gt;
*http://www.flickr.com/photos/dryponder/sets/72157623726710218/&lt;br /&gt;
*http://nymag.com/daily/intel/2010/02/obama_being_forced_to_look_at.html#photo=1&lt;br /&gt;
*http://niccageaseveryone.blogspot.com/&lt;br /&gt;
*http://bubleraptor.tumblr.com/&lt;br /&gt;
*photoshop free Marie Claire issue: http://jezebel.com/5511507/so-long-as-your-face-looks-alright-everything-else-can-be-photoshopped&lt;br /&gt;
&lt;br /&gt;
== Places to Find Art ==&lt;br /&gt;
* http://we-make-money-not-art.com/&lt;br /&gt;
* http://www.isea-web.org/, http://www.isea2010ruhr.org/&lt;br /&gt;
* http://www.transmediale.de/en&lt;br /&gt;
* http://01sj.org/&lt;br /&gt;
* http://www.file.org.br/&lt;br /&gt;
* http://www.aec.at/festival_about_en.php&lt;br /&gt;
* http://www.sciencegallery.com/lightwave09&lt;br /&gt;
* Institutions that Sponsor/Show Media Art&lt;br /&gt;
** Eyebeam New York City&lt;br /&gt;
** New Museum/Rhizome.org http://rhizome.org&lt;br /&gt;
** HarvestWorks&lt;br /&gt;
** Machine Project, Los Angeles.&lt;br /&gt;
&lt;br /&gt;
== Midterm Projects ==&lt;br /&gt;
Make pages here. &lt;br /&gt;
* [[DummyProject | Dummy Project]]&lt;br /&gt;
* [[MidtermProject| MotionDJ - Leilani Martin]]&lt;br /&gt;
* [[What&amp;#039;s For Lunch, Kids? by Kelley Kim| &amp;#039;&amp;#039;What&amp;#039;s For Lunch, Kids?&amp;#039;&amp;#039;   - Kelley Kim]]&lt;br /&gt;
* [[Virtual Walk? - Joeny Thipsidakhom]]&lt;br /&gt;
* [[Untitled Midterm| Untitled - Jezreel Callejas]]&lt;br /&gt;
* [[Midterm Project - Tony Lu | Virtual Maze - Tony Lu]]&lt;br /&gt;
* [[Midterm Project  | SayCHEESE - Joel and Jenny Chang]]&lt;br /&gt;
* [[Carnival Ride| Carnival Ride - Christina Sanchez and Jennifer Sunga]]&lt;br /&gt;
* [[Hunted - Anna Lin, Jenny Wang, and Ellen Huang]]&lt;br /&gt;
* [[Wii - remote composer - Javi Lee]]&lt;br /&gt;
* [[Social Creature | Boo (formerly Social Creature) - Jet Antonio]]&lt;br /&gt;
* [[Sound Sketch - Emilio Marcelino, Greg Parsons, and Ben Brickley]]&lt;br /&gt;
&lt;br /&gt;
== Final Projects ==&lt;br /&gt;
* [[Aquarium| Aquarium - Jezreel Callejas]]&lt;br /&gt;
* [[Not So Lost| Not So Lost - Ben Brickely, Emilio Marcelino and Greg Parsons]]&lt;br /&gt;
* [[Dance in the Dark - Anna Lin, Jenny Wang and Ellen Huang]]&lt;br /&gt;
* [[Inkling One | Inkling One - Jet Antonio]]&lt;br /&gt;
* [[Untitled (for now) - Joeny Thipsidakhom]]&lt;br /&gt;
&lt;br /&gt;
== Student Pages ==&lt;br /&gt;
Click &amp;quot;edit&amp;quot; on the right to add your own page below. &lt;br /&gt;
* [[Students/RobertTwomey | RobertTwomey]]&lt;br /&gt;
* [[Students/Javier Lee | Javier Lee]]&lt;br /&gt;
* [[Students/Jenny Wang | Jenny Wang]]&lt;br /&gt;
* [[Students/Joeny Thipsidakhom | Joeny Thipsidakhom]]&lt;br /&gt;
* [[Students/Kuan-Ting Lu | Tony Lu]]&lt;br /&gt;
* [[Students/Jezreel Callejas| Jezreel Callejas]]&lt;br /&gt;
* [[Students/ChristinaSanchez| Christina Sanchez]]&lt;br /&gt;
* [[Students/BenBrickley | BenBrickley]]&lt;br /&gt;
* [[Students/Ellen Huang | Ellen Huang]]&lt;br /&gt;
* [[Students/Kelley Kim | Kelley Kim]]&lt;br /&gt;
* [[Students/EmilioMarcelino | EmilioMarcelino]]&lt;br /&gt;
* [[Students/Anna Lin | Anna Lin]]&lt;br /&gt;
* [[Student/Jenny Chang | Jenny Chang]]&lt;br /&gt;
* [[Student/Jet Antonio | Jet Antonio]]&lt;br /&gt;
* [[Students/GregoryParsons | Gregory Parsons]]&lt;br /&gt;
* [[Students/Jennifer Sunga | Jennifer Sunga]]&lt;br /&gt;
* [[Students/LeilaniMartin | Leilani Martin]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3823</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3823"/>
				<updated>2010-05-20T02:26:07Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Maze Layout&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze Layout.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Maze&lt;br /&gt;
&lt;br /&gt;
[[Image:Maze.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
Unreal Engine&lt;br /&gt;
&lt;br /&gt;
[[Image:Unreal.jpg|500px]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Unreal.jpg&amp;diff=3822</id>
		<title>File:Unreal.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Unreal.jpg&amp;diff=3822"/>
				<updated>2010-05-20T02:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Maze.jpg&amp;diff=3821</id>
		<title>File:Maze.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Maze.jpg&amp;diff=3821"/>
				<updated>2010-05-20T02:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:Maze_Layout.jpg&amp;diff=3820</id>
		<title>File:Maze Layout.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:Maze_Layout.jpg&amp;diff=3820"/>
				<updated>2010-05-20T02:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3645</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3645"/>
				<updated>2010-04-29T17:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|700px]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:VIS_145B_Visual.jpg&amp;diff=3644</id>
		<title>File:VIS 145B Visual.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:VIS_145B_Visual.jpg&amp;diff=3644"/>
				<updated>2010-04-29T17:52:31Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: uploaded a new version of &amp;quot;Image:VIS 145B Visual.jpg&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3643</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3643"/>
				<updated>2010-04-29T17:51:44Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
[[Image:VIS 145B Visual.jpg|VIS 145B Visual.jpg]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:VIS_145B_Visual.jpg&amp;diff=3642</id>
		<title>File:VIS 145B Visual.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:VIS_145B_Visual.jpg&amp;diff=3642"/>
				<updated>2010-04-29T17:51:22Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3641</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3641"/>
				<updated>2010-04-29T17:16:33Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Visualization */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
[USER] -&amp;gt; [Accelerometer/Wiimote + USER Motion] -&amp;gt; [Processing/Wiimote-to-PC Communication] -&amp;gt; [Screen/Visual]&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
Coming Soon.....&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3618</id>
		<title>Virtual Walk? - Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Virtual_Walk%3F_-_Joeny_Thipsidakhom&amp;diff=3618"/>
				<updated>2010-04-29T03:45:46Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: New page: == Virtual Walk? ==  == Description == *Motivation  I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Virtual Walk? ==&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
*Motivation&lt;br /&gt;
&lt;br /&gt;
I’m interested in virtual space/realms and how it interacts with the physical world or how the physical world interacts with virtual space, whether it’s through games and a controller, being a part of a physical place in a parallel virtual world, or through actual physical movement. I’m also what people may consider a “gamer” and interested in the whole interaction interface they use, whether its web-cams, standard controllers, motion controllers, etc and how those affect the way we interact with the virtual. &lt;br /&gt;
&lt;br /&gt;
*Interactive paradigm&lt;br /&gt;
&lt;br /&gt;
For now I think I’ll keep it somewhat simple and add to it as I get the general concept working. Basically, I want to create something that takes real world physical movements, like walking, or turning of a person’s head, and translate that to movement/interaction in a virtual space. For example, physical walking would cause your virtual character to walk.&lt;br /&gt;
&lt;br /&gt;
*Technical Description&lt;br /&gt;
&lt;br /&gt;
I’ll be using the accelerometers in wiimotes to gather movement values of a person and using a program like processing to translate the values into movement in a virtual space. Multiple wiimotes will be used, in fact two will be used, to measure a person’s walking movement and head movement. I’ll either create something in processing that will interact with the person’s movement or use/create a virtual 3D space in which the person’s virtual avatar would move around in according to the person’s movement.&lt;br /&gt;
&lt;br /&gt;
== Visualization ==&lt;br /&gt;
*Functional Diagrams&lt;br /&gt;
&lt;br /&gt;
Coming Soon.....&lt;br /&gt;
&lt;br /&gt;
*Visual Concept&lt;br /&gt;
&lt;br /&gt;
Coming Soon.....&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3617</id>
		<title>Classes/2010/VIS145B</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3617"/>
				<updated>2010-04-29T03:42:29Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Midterm Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Time and Process Based Digital Media II ==&lt;br /&gt;
Time: Thursdays 3:30-6:20pm, VAF 228&lt;br /&gt;
&lt;br /&gt;
This class is an advanced study and portfolio project course centered on the use of hardware and software to create interactive and time-based art.  These projects can take many forms—interactive installations, dynamic visualizations/sonifications, printed renderings—chosen by the students.  This will not be a course of technical instruction—rather we will consider technical and conceptual issues in tandem, supplementing discussions and activities with specific technical instruction where necessary.  There is a strong emphasis on the development and articulation of personal directions of research by the students in the course. &lt;br /&gt;
&lt;br /&gt;
I would like to split the reading/homework responsibility for two parts of the class.  In the first half of the term I will present a series of works and readings covering my particular interests--the intersections of social performance, embodied experience, and cognition.  In the latter half of the class (after the midterm) you all will do the presentations on topics of your choosing.  Working individually or in small groups, you will provide us with some conceptual provocation (reading material) covering topics you intend to engage with your final, and you will lead a discussion on technical and conceptual issues.  Reading and critical writing, in response to text and works you present and those I present, are integral to this course.&lt;br /&gt;
&lt;br /&gt;
The schedule is a living document and will be revised over the period of the course.&lt;br /&gt;
&lt;br /&gt;
== Instructor ==&lt;br /&gt;
Robert Twomey&lt;br /&gt;
&lt;br /&gt;
rtwomey@ucsd.edu&lt;br /&gt;
*http://roberttwomey.com&lt;br /&gt;
*http://experimentalgamelab.net&lt;br /&gt;
*http://crca.ucsd.edu&lt;br /&gt;
&lt;br /&gt;
Office Hours: Wednesday 3-4pm, Atkinson Hall Rm 1601 (CRCA research neighborhood).  Please e-mail me if you plan to attend.&lt;br /&gt;
&lt;br /&gt;
== Grading ==&lt;br /&gt;
*Midterm Project - 30%&lt;br /&gt;
*Final Project - 40%&lt;br /&gt;
*Presentations - 10%&lt;br /&gt;
*Readings - 10%&lt;br /&gt;
*Participation - 10%&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
(1) Short presentation on your work in the second week of class.  This should be a statement of your interests, direction, goals with media art.  Present examples from your own work which you feel strongly about, and which best represent your interests and trajectory.  Present examples of other artist&amp;#039;s work that serve as models for the kind of work you would like to make. (5-10 minutes each)&lt;br /&gt;
&lt;br /&gt;
(2) Medium presentation on final projects in the second semester of the course (weeks 7-9).  This is the portion of the class where you dictate the reading and the discussion.  If you are presenting on a given week, you need to provide us with a reading 1 week in advance.  We will sign up for those time slots in week 6, just after the midterm. (10-15 minutes)&lt;br /&gt;
&lt;br /&gt;
=== Reading Responses ===&lt;br /&gt;
These are written summaries and critical responses to materials assigned for out of class viewing.  Things to consider: What points does the author make?  Do you buy their assumptions or agree with their conclusions?  Reading responses will be printed and turned in to the instructor at the beginning of class.  Generally these should be 1 page long.&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
Midterm and final projects will be graded on concept, effort, and realization. Formal proposals are a necessary component of the process so take them seriously.  Make the effort to get started early and seek the help you need--we want to see finished, well-considered pieces for the midterm and final. Additionally, you will need to submit documentation of the project after completion which includes images, video, and source code where applicable.  These materials (proposals and documentation) will all be posted to the wiki.&lt;br /&gt;
=== Documentation Policy ===&lt;br /&gt;
*personal wiki page&lt;br /&gt;
*source code on wiki&lt;br /&gt;
*image/video documentation as appropriate. &lt;br /&gt;
*explanatory writing (on intent, motivation, context)&lt;br /&gt;
&lt;br /&gt;
=== Attendance ===&lt;br /&gt;
Attendance is mandatory. Each unexcused absence will drop your final grade one letter.  There are only 10 weeks of class, please come to them all.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
=== Week 1 - Intro ===&lt;br /&gt;
*Introductions&lt;br /&gt;
*Scope of course, interests, technical possibilities.&lt;br /&gt;
*My work.&lt;br /&gt;
*Watch: We Live In Public.  2009. (excerpts)&lt;br /&gt;
*In class: personal page on wiki. [http://www.trsp.net/teaching/gamemod/ game-mod exercise]. [http://www.trsp.net/teaching/gamemod/gamemod_breakout_source_en.zip download link]&lt;br /&gt;
*Read: [http://www.nyu.edu/projects/xdesign/mainmenu/archive_tangible.html Against Virtualized Information], [http://www.nyu.edu/projects/xdesign/mainmenu/archive_analtictech.html Novel Analytic Techniques], and [http://www.nyu.edu/projects/xdesign/mainmenu/archive_infocounts.html What Information Counts?] by [http://www.environmentalhealthclinic.net/people/natalie-jeremijenko/ Natalie Jeremijenko]. &lt;br /&gt;
*Read: [http://www.yalealumnimagazine.com/issues/2004_03/jeremijenko.html An Engineer for the Avante Garde]&lt;br /&gt;
*Read: [http://www.worldchanging.com/archives/001450.html Natalie Jeremijenko The WorldChanging Interview]&lt;br /&gt;
*Read: [http://tech90s.walkerart.org/nj/transcript/nj_01.html Database Politics and Social Simulations], good background on her earlier artwork.&lt;br /&gt;
&lt;br /&gt;
=== Week 2 - Student Research Interests ===&lt;br /&gt;
*Due: 1 page on Jeremijenko. &lt;br /&gt;
*Presentations on your work.&lt;br /&gt;
*Read: [http://www.flong.com/texts/essays/essay_cvad/ Computer Vision for Artists and Designers: Pedagogic Tools and Techniques for Novice Programmers] Golan Levin. &amp;#039;&amp;#039;pay particular attention to part II. ELEMENTARY COMPUTER VISION TECHNIQUES.  we are going to try these in class next week.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Week 3 - Computer Vision / Human Perception ===&lt;br /&gt;
*Due: Nothing. Read the Golan Levin piece, but no written response.&lt;br /&gt;
*Discuss:&lt;br /&gt;
**Myron Kreuger. Video Place. 1989 [http://www.youtube.com/watch?v=dqZyZrN3Pl0]&lt;br /&gt;
**Text Rain. Camille Utterback &amp;amp; Romy Achituv. 1999. [http://www.youtube.com/watch?v=toWFvXHghDk] [http://www.camilleutterback.com/]&lt;br /&gt;
**Very Nervous System.  1982-1991. [http://vimeo.com/8120954]&lt;br /&gt;
**Suicide Box.  Bureau of Inverse Technology.  1996. (13:00)&lt;br /&gt;
**Marie Sester. ACCESS.  2003. [http://accessproject.net]&lt;br /&gt;
**Messa di Voce. Golan Levin and Zach Lieberman with Jaap Blonk and Joan La Barbara. 2003.  [http://www.flong.com/projects/messa/] [http://www.tmema.org/messa/messa.html]&lt;br /&gt;
**Seen.  David Rokeby.  2002.  [http://vimeo.com/6012986]&lt;br /&gt;
**Sorting Daemon. David Rokeby. 2003. [http://homepage.mac.com/davidrokeby/sorting.html]&lt;br /&gt;
**Cheese.  Christian Moller. 2003. [http://www.christian-moeller.com/display.php?project_id=36] made in collaboration with UCSD  [http://mplab.ucsd.edu/wordpress/ Machine Perception Lab]&lt;br /&gt;
**Eyewriter. 2009 [http://www.eyewriter.org/]&lt;br /&gt;
**Saccade. 2010 [http://roberttwomey.com/saccade] (in progress)&lt;br /&gt;
*Discuss: &lt;br /&gt;
**thresholding&lt;br /&gt;
**frame difference&lt;br /&gt;
**OpenCV - [http://ubaa.net/shared/processing/opencv/ download] [http://www.cs.unc.edu/Research/stc/FAQs/OpenCV/OpenCVReferenceManual.pdf reference manual].  If you are getting this for your computer, be sure to get OpenCV, the OpenCV Processing Library, and the OpenCV Processing Examples (three separate downloads).&lt;br /&gt;
**face recognition&lt;br /&gt;
*In Class:&lt;br /&gt;
**Working alone or in small groups, do experiments with video processing and computer vision.&lt;br /&gt;
&lt;br /&gt;
=== Week 4 - Computer Vision Work ===&lt;br /&gt;
* In Class:&lt;br /&gt;
** Work on computer vision projects&lt;br /&gt;
** Talk about midterm projects.&lt;br /&gt;
&lt;br /&gt;
=== Week 5 - Midterm Workshop ===&lt;br /&gt;
*Due: Midterm project proposal.&lt;br /&gt;
**Working individually or in small groups (2-3 people), produce an interactive piece that bridges the gap between screen space and physical space.  There are many ways to do this--using image-based computer vision techniques, game controllers, audio input, or other physical hardware (Arduino?).  Think about the parameters of interaction--are you documenting viewer&amp;#039;s behavior (unknown to them), are you taking a familiar form (such as a video game) and tweaking it in some way, are you intervening in social space?  Think about what form the output will take.  In your one page proposal, describe the input(s), output(s), and dynamic of interaction, as well as some statement of your motivation.  Why is this a valuable or interesting project?  In addition to the written description, produce supporting visual materials.  These should be two functional diagram images and two visual/aesthetic images.  The functional diagrams should show the necessary software and hardware components and explain how the interaction will occur.  The aesthetic diagrams will give us a sense of what it will look like, how the output will appear.  Make a page for your project (including a title) in the Midterm Projects section at the bottom of this page, upload the necessary materials and embed them in that page.  This proposal is due in class next week where we will critique and workshop the ideas.&lt;br /&gt;
*Review computer vision experiments from last class.&lt;br /&gt;
*Work on midterm projects.&lt;br /&gt;
&lt;br /&gt;
=== Week 6 - Midterm Critiques ===&lt;br /&gt;
In-class critiques of midterm projects.&lt;br /&gt;
&lt;br /&gt;
=== Week 7 ===&lt;br /&gt;
Student presentations&lt;br /&gt;
=== Week 8 ===&lt;br /&gt;
Student presentations &lt;br /&gt;
=== Week 9 ===&lt;br /&gt;
Student presentations&lt;br /&gt;
=== Week 10 - Final Critiques ===&lt;br /&gt;
In-class Critiques.&lt;br /&gt;
&lt;br /&gt;
=== Finals Week ===&lt;br /&gt;
Final documentation due.&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
To Be Scheduled&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Performance for the camera, for the web&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Discuss Chatroulette. Facebook, Twitter, Youtube.  Attention in the social net.&lt;br /&gt;
*ManyCam [http://www.manycam.com/]&lt;br /&gt;
*PS3 eye&lt;br /&gt;
*jennicam [http://www.wired.com/thisdayintech/2010/04/0414jennicam-launches wired]&lt;br /&gt;
*Lonelygirl15 [http://www.youtube.com/watch?v=-goXKtd6cPo youtube] [http://www.wired.com/wired/archive/14.12/lonelygirl.html article]&lt;br /&gt;
*Discuss telematic perfromance. &lt;br /&gt;
* Justin.tv [http://www.justin.tv/#r=s7RVqBU~]&lt;br /&gt;
*Read: The Presentation of Self in Everyday Life (excerpt).  Erving Goffman. 1959.&lt;br /&gt;
*Read: Performance: A Critical Introduction (excerpt).  Richard Carlson. 2004.&lt;br /&gt;
*Do: Intervention in social circuits.  Chatroulette/Facebook/Youtube exercise.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Social Networks/Web 2.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Protocol, Control, and Networks by Alexander Galloway and Eugene Thacker.  Grey Room 17, Fall 2004 p 6-29.  &lt;br /&gt;
*Read: DIGITAL MAOISM: The Hazards of the New Online Collectivism.  Jaron Lanier.  2006.&lt;br /&gt;
*Watch: MediatedCultures @ Kansas State http://mediatedcultures.net/mediatedculture.htm&lt;br /&gt;
*Datamining/Complex Networks, node-edge graphing.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Digital Memory/Personal Media: Where do we exist and how do we remember?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Mediated Memories in the Digital Age (excerpt). Jose van Dijck. 2007.&lt;br /&gt;
*Read: Are you sure you want to do this?  Matthias Fuchs 1994.&lt;br /&gt;
*Read: Delete: The Virtue of Forgetting in the Digital Age (excerpt). Viktor Mayer-Schonberger. 2009.&lt;br /&gt;
*Flickr.com, Facebook&lt;br /&gt;
*Discuss: My Pocket. Burak Arikan. 2008. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cognition + Creativity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Generative Art vs. Computational Creativity&lt;br /&gt;
*Casy Reas&lt;br /&gt;
*Processing.org&lt;br /&gt;
*Tom Shannon. [http://www.wired.com/magazine/2010/03/pl_arts_pendulum/all/1]&lt;br /&gt;
*Read: Triumph of the Cyborg Composer. &lt;br /&gt;
*Read: How to draw three people in a garden.  1988.&lt;br /&gt;
*Read: Shades of Computational Evocation and Meaning: The GRIOT System and Improvisational Poetry Generation. 2006.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Artificial Intelligence&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Expressive Processing (excerpt), Noah Wardrip Fruin, 2009. &lt;br /&gt;
*Read: Elephants Don&amp;#039;t Play Chess, Rodney Brooks, 1990. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appropriation and Remix&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: The Fiction of Memory.  New York Times, March 12, 2010.  Luc Sante&lt;br /&gt;
*Read: Jonatham Lethem.  The Ecstasy of Influence. Harpers Magazine.  2007. &lt;br /&gt;
*Remix Culture.  Lev.&lt;br /&gt;
*God&amp;#039;s Little Toys: Confessions of a cut &amp;amp; paste artist.  William Gibson. 2005. *http://www.wired.com/wired/archive/13.07/gibson.html&lt;br /&gt;
*Reality Hunger: A Manifesto.  David Shields. 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Materiality in the information age.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Tangible interfaces, haptic feedback. &lt;br /&gt;
*Read: Evocative Objects: Things We Think With (excerpt). Sherry Turkle, 2007. &lt;br /&gt;
*Read: New Media and the Forensic Imagination (excerpt). Matthew Kirschenbaum. 2008.&lt;br /&gt;
*View: BIT Plane.  &lt;br /&gt;
*View: Garbage Cubes&lt;br /&gt;
*Discuss techniques of markerless tracking, augmented reality, QR codes, etc.  *Online/Offline Space.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Embodiment&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Computing with bodies, engineered bodies&lt;br /&gt;
*tactile media, haptic interface&lt;br /&gt;
*embodied perception&lt;br /&gt;
*Read: Stelarc. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Self-Image&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Self/Image: Technology, Representation, and the Contemporary Subject (excerpt).  Amelia Jones, 2006.&lt;br /&gt;
*Do: Forensic Photoshop Exercise.&lt;br /&gt;
*http://www.flickr.com/photos/dryponder/sets/72157623726710218/&lt;br /&gt;
*http://nymag.com/daily/intel/2010/02/obama_being_forced_to_look_at.html#photo=1&lt;br /&gt;
*http://bubleraptor.tumblr.com/&lt;br /&gt;
*photoshop free Marie Claire issue: http://jezebel.com/5511507/so-long-as-your-face-looks-alright-everything-else-can-be-photoshopped&lt;br /&gt;
&lt;br /&gt;
== Places to Find Art ==&lt;br /&gt;
* http://we-make-money-not-art.com/&lt;br /&gt;
* http://www.isea-web.org/, http://www.isea2010ruhr.org/&lt;br /&gt;
* http://www.transmediale.de/en&lt;br /&gt;
* http://01sj.org/&lt;br /&gt;
* http://www.file.org.br/&lt;br /&gt;
* http://www.aec.at/festival_about_en.php&lt;br /&gt;
* http://www.sciencegallery.com/lightwave09&lt;br /&gt;
* Institutions that Sponsor/Show Media Art&lt;br /&gt;
** Eyebeam New York City&lt;br /&gt;
** New Museum/Rhizome.org http://rhizome.org&lt;br /&gt;
** HarvestWorks&lt;br /&gt;
** Machine Project, Los Angeles.&lt;br /&gt;
&lt;br /&gt;
== Midterm Projects ==&lt;br /&gt;
Make pages here. &lt;br /&gt;
* [[DummyProject | Dummy Project]]&lt;br /&gt;
* [[MidtermProject| MotionDJ - Leilani Martin]]&lt;br /&gt;
* [[What&amp;#039;s For Lunch, Kids? by Kelley Kim| &amp;#039;&amp;#039;What&amp;#039;s For Lunch, Kids?&amp;#039;&amp;#039;   - Kelley Kim]]&lt;br /&gt;
* [[Virtual Walk? - Joeny Thipsidakhom]]&lt;br /&gt;
&lt;br /&gt;
== Student Pages ==&lt;br /&gt;
Click &amp;quot;edit&amp;quot; on the right to add your own page below. &lt;br /&gt;
* [[Students/RobertTwomey | RobertTwomey]]&lt;br /&gt;
* [[Students/Javier Lee | Javier Lee]]&lt;br /&gt;
* [[Students/Jenny Wang | Jenny Wang]]&lt;br /&gt;
* [[Students/Joeny Thipsidakhom | Joeny Thipsidakhom]]&lt;br /&gt;
* [[Students/Kuan-Ting Lu | Tony Lu]]&lt;br /&gt;
* [[Students/Jezreel Callejas| Jezreel Callejas]]&lt;br /&gt;
* [[Students/ChristinaSanchez| Christina Sanchez]]&lt;br /&gt;
* [[Students/BenBrickley | BenBrickley]]&lt;br /&gt;
* [[Students/Ellen Huang | Ellen Huang]]&lt;br /&gt;
* [[Students/Kelley Kim | Kelley Kim]]&lt;br /&gt;
* [[Students/EmilioMarcelino | EmilioMarcelino]]&lt;br /&gt;
* [[Students/Anna Lin | Anna Lin]]&lt;br /&gt;
* [[Student/Jenny Chang | Jenny Chang]]&lt;br /&gt;
* [[Student/Jet Antonio | Jet Antonio]]&lt;br /&gt;
* [[Students/GregoryParsons | Gregory Parsons]]&lt;br /&gt;
* [[Students/Jennifer Sunga | Jennifer Sunga]]&lt;br /&gt;
* [[Students/LeilaniMartin | Leilani Martin]]&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3432</id>
		<title>Classes/2010/VIS145B</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Classes/2010/VIS145B&amp;diff=3432"/>
				<updated>2010-04-04T02:16:59Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* Student Pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Time and Process Based Digital Media II ==&lt;br /&gt;
Time: Thursdays 3:30-6:20pm, VAF 228&lt;br /&gt;
&lt;br /&gt;
This class is an advanced study and portfolio project course centered on the use of hardware and software to create interactive and time-based art.  These projects can take many forms—interactive installations, dynamic visualizations/sonifications, printed renderings—chosen by the students.  This will not be a course of technical instruction—rather we will consider technical and conceptual issues in tandem, supplementing discussions and activities with specific technical instruction where necessary.  There is a strong emphasis on the development and articulation of personal directions of research by the students in the course. &lt;br /&gt;
&lt;br /&gt;
I would like to split the reading/homework responsibility for two parts of the class.  In the first half of the term I will present a series of works and readings covering my particular interests--the intersections of social performance, embodied experience, and cognition.  In the latter half of the class (after the midterm) you all will do the presentations on topics of your choosing.  Working individually or in small groups, you will provide us with some conceptual provocation (reading material) covering topics you intend to engage with your final, and you will lead a discussion on technical and conceptual issues.  Reading and critical writing, in response to text and works you present and those I present, are integral to this course.&lt;br /&gt;
&lt;br /&gt;
== Instructor ==&lt;br /&gt;
Robert Twomey&lt;br /&gt;
&lt;br /&gt;
rtwomey@ucsd.edu&lt;br /&gt;
*http://roberttwomey.com&lt;br /&gt;
*http://experimentalgamelab.net&lt;br /&gt;
*http://crca.ucsd.edu&lt;br /&gt;
&lt;br /&gt;
Office Hours: Wednesday 3-4pm, Atkinson Hall Rm 1601 (CRCA research neighborhood).  Please e-mail me if you plan to attend.&lt;br /&gt;
&lt;br /&gt;
== Grading ==&lt;br /&gt;
*Midterm Project - 30%&lt;br /&gt;
*Final Project - 40%&lt;br /&gt;
*Presentations - 10%&lt;br /&gt;
*Readings - 10%&lt;br /&gt;
*Participation - 10%&lt;br /&gt;
&lt;br /&gt;
=== Presentations ===&lt;br /&gt;
(1) Short presentation on your work in the second week of class.  This should be a statement of your interests, direction, goals with media art.  Present examples from your own work which you feel strongly about, and which best represent your interests and trajectory.  Present examples of other artist&amp;#039;s work that serve as models for the kind of work you would like to make. (5-10 minutes each)&lt;br /&gt;
&lt;br /&gt;
(2) Medium presentation on final projects in the second semester of the course (weeks 7-9).  This is the portion of the class where you dictate the reading and the discussion.  If you are presenting on a given week, you need to provide us with a reading 1 week in advance.  We will sign up for those time slots in week 6, just after the midterm. (10-15 minutes)&lt;br /&gt;
&lt;br /&gt;
=== Reading Responses ===&lt;br /&gt;
These are written summaries and critical responses to materials assigned for out of class viewing.  Things to consider: What points does the author make?  Do you buy their assumptions or agree with their conclusions?  Reading responses will be printed and turned in to the instructor at the beginning of class.  Generally these should be 1 page long.&lt;br /&gt;
&lt;br /&gt;
=== Projects ===&lt;br /&gt;
Midterm and final projects will be graded on concept, effort, and realization. Formal proposals are a necessary component of the process so take them seriously.  Make the effort to get started early and seek the help you need--we want to see finished, well-considered pieces for the midterm and final. Additionally, you will need to submit documentation of the project after completion which includes images, video, and source code where applicable.  These materials (proposals and documentation) will all be posted to the wiki.&lt;br /&gt;
=== Documentation Policy ===&lt;br /&gt;
*personal wiki page&lt;br /&gt;
*source code on wiki&lt;br /&gt;
*image/video documentation where appropriate. &lt;br /&gt;
*explanatory writing (on intent, motivation, context)&lt;br /&gt;
&lt;br /&gt;
=== Attendance ===&lt;br /&gt;
Attendance is mandatory. Each unexcused absence will drop your final grade one letter.  There are only 10 weeks of class, please come to them all.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
=== Week 1 - Intro ===&lt;br /&gt;
*Introductions&lt;br /&gt;
*Scope of course, interests, technical possibilities.&lt;br /&gt;
*My work.&lt;br /&gt;
*Watch: We Live In Public.  2009. (excerpts)&lt;br /&gt;
*In class: personal page on wiki. [http://www.trsp.net/teaching/gamemod/ game-mod exercise]. [http://www.trsp.net/teaching/gamemod/gamemod_breakout_source_en.zip download link]&lt;br /&gt;
*Read: [http://www.nyu.edu/projects/xdesign/mainmenu/archive_tangible.html Against Virtualized Information], [http://www.nyu.edu/projects/xdesign/mainmenu/archive_analtictech.html Novel Analytic Techniques], and [http://www.nyu.edu/projects/xdesign/mainmenu/archive_infocounts.html What Information Counts?] by [http://www.environmentalhealthclinic.net/people/natalie-jeremijenko/ Natalie Jeremijenko]. &lt;br /&gt;
*Read: [http://www.yalealumnimagazine.com/issues/2004_03/jeremijenko.html An Engineer for the Avante Garde]&lt;br /&gt;
*Read: [http://www.worldchanging.com/archives/001450.html Natalie Jeremijenko The WorldChanging Interview]&lt;br /&gt;
*Read: [http://tech90s.walkerart.org/nj/transcript/nj_01.html Database Politics and Social Simulations], good background on her earlier artwork.&lt;br /&gt;
&lt;br /&gt;
=== Week 2 - Computer Vision / Human Perception ===&lt;br /&gt;
*Due: 1 page on Jeremijenko. &lt;br /&gt;
*Presentations on your work.&lt;br /&gt;
*Watch: Suicide Box.  Bureau of Inverse Technology.  1996. (13:00)&lt;br /&gt;
*Discuss: Marie Sester. ACCESS.  2003. http://accessproject.net&lt;br /&gt;
*Discuss: Eyewriter. http://www.eyewriter.org/ -&amp;gt; Saccade.&lt;br /&gt;
*Discuss: CV methods—thresholding, blob-detection, facial recognition, motion/flow estimation.&lt;br /&gt;
*CV experiments.&lt;br /&gt;
&lt;br /&gt;
=== Week 3 ===&lt;br /&gt;
=== Week 4 ===&lt;br /&gt;
*Due: Midterm proposals.&lt;br /&gt;
=== Week 5 ===&lt;br /&gt;
Midterm critiques.&lt;br /&gt;
=== Week 6 ===&lt;br /&gt;
=== Week 7 ===&lt;br /&gt;
Student presentations&lt;br /&gt;
=== Week 8 ===&lt;br /&gt;
Student presentations &lt;br /&gt;
=== Week 9 ===&lt;br /&gt;
Student presentations&lt;br /&gt;
=== Week 10 ===&lt;br /&gt;
Final critiques.&lt;br /&gt;
=== Finals Week ===&lt;br /&gt;
Final documentation due.&lt;br /&gt;
== Topics ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Performance for the camera, for the web&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Discuss Chatroulette. Facebook, Twitter, Youtube.  Attention in the social net.&lt;br /&gt;
*Discuss telematic perfromance. &lt;br /&gt;
*Read: The Presentation of Self in Everyday Life (excerpt).  Erving Goffman. 1959.&lt;br /&gt;
*Read: Performance: A Critical Introduction (excerpt).  Richard Carlson. 2004.&lt;br /&gt;
*Do: Intervention in social circuits.  Chatroulette/Facebook/Youtube exercise.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Social Networks/Web 2.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Protocol, Control, and Networks by Alexander Galloway and Eugene Thacker.  Grey Room 17, Fall 2004 p 6-29.  &lt;br /&gt;
*Read: DIGITAL MAOISM: The Hazards of the New Online Collectivism.  Jaron Lanier.  2006.&lt;br /&gt;
*Watch: MediatedCultures @ Kansas State http://mediatedcultures.net/mediatedculture.htm&lt;br /&gt;
*Datamining/Complex Networks, node-edge graphing.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Digital Memory/Personal Media: Where do we exist and how do we remember?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Mediated Memories in the Digital Age (excerpt). Jose van Dijck. 2007.&lt;br /&gt;
*Read: Are you sure you want to do this?  Matthias Fuchs 1994.&lt;br /&gt;
*Read: Delete: The Virtue of Forgetting in the Digital Age (excerpt). Viktor Mayer-Schonberger. 2009.&lt;br /&gt;
*Flickr.com, Facebook&lt;br /&gt;
*Discuss: My Pocket. Burak Arikan. 2008. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cognition + Creativity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Generative Art vs. Computational Creativity&lt;br /&gt;
*Casy Reas&lt;br /&gt;
*Processing.org&lt;br /&gt;
*Read: Triumph of the Cyborg Composer. &lt;br /&gt;
*Read: How to draw three people in a garden.  1988.&lt;br /&gt;
*Read: Shades of Computational Evocation and Meaning: The GRIOT System and Improvisational Poetry Generation. 2006.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Artificial Intelligence&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Expressive Processing (excerpt), Noah Wardrip Fruin, 2009. &lt;br /&gt;
*Read: Elephants Don&amp;#039;t Play Chess, Rodney Brooks, 1990. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appropriation and Remix&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: The Fiction of Memory.  New York Times, March 12, 2010.  Luc Sante&lt;br /&gt;
*Read: Jonatham Lethem.  The Ecstasy of Influence. Harpers Magazine.  2007. &lt;br /&gt;
*Remix Culture.  Lev.&lt;br /&gt;
*God&amp;#039;s Little Toys: Confessions of a cut &amp;amp; paste artist.  William Gibson. 2005. *http://www.wired.com/wired/archive/13.07/gibson.html&lt;br /&gt;
*Reality Hunger: A Manifesto.  David Shields. 2010.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Materiality in the information age.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Tangible interfaces, haptic feedback. &lt;br /&gt;
*Read: Evocative Objects: Things We Think With (excerpt). Sherry Turkle, 2007. &lt;br /&gt;
*Read: New Media and the Forensic Imagination (excerpt). Matthew Kirschenbaum. 2008.&lt;br /&gt;
*View: BIT Plane.  &lt;br /&gt;
*View: Garbage Cubes&lt;br /&gt;
*Discuss techniques of markerless tracking, augmented reality, QR codes, etc.  *Online/Offline Space.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Embodiment&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Computing with bodies, engineered bodies&lt;br /&gt;
*tactile media, haptic interface&lt;br /&gt;
*embodied perception&lt;br /&gt;
*Read: Stelarc. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Self-Image&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Read: Self/Image: Technology, Representation, and the Contemporary Subject (excerpt).  Amelia Jones, 2006.&lt;br /&gt;
*Do: Forensic Photoshop Exercise.&lt;br /&gt;
*http://www.flickr.com/photos/dryponder/sets/72157623726710218/&lt;br /&gt;
*http://nymag.com/daily/intel/2010/02/obama_being_forced_to_look_at.html#photo=1&lt;br /&gt;
*http://bubleraptor.tumblr.com/&lt;br /&gt;
&lt;br /&gt;
== Places to Find Art ==&lt;br /&gt;
* http://we-make-money-not-art.com/&lt;br /&gt;
* http://www.isea-web.org/, http://www.isea2010ruhr.org/&lt;br /&gt;
* http://www.transmediale.de/en&lt;br /&gt;
* http://01sj.org/&lt;br /&gt;
* http://www.file.org.br/&lt;br /&gt;
* http://www.aec.at/festival_about_en.php&lt;br /&gt;
* http://www.sciencegallery.com/lightwave09&lt;br /&gt;
* Institutions that Sponsor/Show Media Art&lt;br /&gt;
** Eyebeam New York City&lt;br /&gt;
** New Museum/Rhizome.org http://rhizome.org&lt;br /&gt;
** HarvestWorks&lt;br /&gt;
** Machine Project, Los Angeles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Student Pages ==&lt;br /&gt;
Click &amp;quot;edit&amp;quot; on the right to add your own page below. &lt;br /&gt;
* [[Students/RobertTwomey | RobertTwomey]]&lt;br /&gt;
* [[Students/ Javier Lee | Javier Lee]]&lt;br /&gt;
* [[Students/Jenny Wang | Jenny Wang]]&lt;br /&gt;
* [[Students/Joeny Thipsidakhom | Joeny Thipsidakhom]]&lt;br /&gt;
&lt;br /&gt;
=== How-To ===&lt;br /&gt;
Register to create a log-in in the upper right.&lt;br /&gt;
&lt;br /&gt;
wiki-text of the form: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Students/RobertTwomey | RobertTwomey]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will come out looking like this: [[Students/RobertTwomey | RobertTwomey]], which is a link to your new personal page on the wiki.  Click on it and begin editing away. &lt;br /&gt;
&lt;br /&gt;
There is editing help here http://en.wikipedia.org/wiki/Help:Editing and here http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet. Image uploading help is here http://en.wikipedia.org/wiki/Wikipedia:Uploading_images.  Of course you can always view the source of my page (or any other page) to learn how to do things. &lt;br /&gt;
&lt;br /&gt;
If your embedded photo is HUGE, try some of these tips:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Image:File.jpg]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; to use the full version of the file&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Image:File.png|200px|thumb|left|alt text]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; to use a 200 pixel wide rendition in a box in the left margin with &amp;#039;alt text&amp;#039; as description&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[Media:File.ogg]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; for directly linking to the file without displaying the file&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3431</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3431"/>
				<updated>2010-04-04T02:16:54Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: Removing all content from page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3191</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3191"/>
				<updated>2010-03-19T19:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* FINAL Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Me ==&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Images ==&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]] ON&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]] OFF&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Description &amp;amp; Images ==&lt;br /&gt;
&lt;br /&gt;
What the final ended up being was a blackbox that wanted/needed user attention and interacted with the user. When the user wasn&amp;#039;t holding down a button, that told the blackbox the user was there, the blackbox would blink in Morse code and make a noise via a motor to get the user&amp;#039;s attention. When the blackbox knew the user was there then it would respond to the user&amp;#039;s input via a button and piezo sensor. When the second button was pressed the user&amp;#039;s light would speak to the blackbox in Morse code, and the blackbox would respond. If the user hit the blackbox for any reason, the piezo sensor would trigger and the blackbox would respond.&lt;br /&gt;
&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3190</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3190"/>
				<updated>2010-03-19T19:07:03Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* FINAL Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Me ==&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Images ==&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]] ON&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]] OFF&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
&lt;br /&gt;
What the final ended up being was a blackbox that wanted/needed user attention and interacted with the user. When the user wasn&amp;#039;t holding down a button, that told the blackbox the user was there, the blackbox would blink in Morse code and make a noise via a motor to get the user&amp;#039;s attention. When the blackbox knew the user was there then it would respond to the user&amp;#039;s input via a button and piezo sensor. When the second button was pressed the user&amp;#039;s light would speak to the blackbox in Morse code, and the blackbox would respond. If the user hit the blackbox for any reason, the piezo sensor would trigger and the blackbox would respond.&lt;br /&gt;
&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3189</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3189"/>
				<updated>2010-03-19T18:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Me ==&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Images ==&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]] ON&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]] OFF&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3188</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3188"/>
				<updated>2010-03-19T18:57:33Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Me ==&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== MIDTERM Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3187</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3187"/>
				<updated>2010-03-19T18:56:54Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About Me ==&lt;br /&gt;
Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Midterm Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3186</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3186"/>
				<updated>2010-03-19T18:54:23Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
&lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Midterm Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px]]&lt;br /&gt;
Starting/Initial Stage Circuit Drawing&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3185</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3185"/>
				<updated>2010-03-19T18:50:19Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* FINAL Proposal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
&lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Midterm Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
[[Image:InitialCircuit.jpg|200px|thumb|left|Starting/Initial Stage]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=File:InitialCircuit.jpg&amp;diff=3184</id>
		<title>File:InitialCircuit.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=File:InitialCircuit.jpg&amp;diff=3184"/>
				<updated>2010-03-19T18:47:38Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	<entry>
		<id>http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3183</id>
		<title>Students/Joeny Thipsidakhom</title>
		<link rel="alternate" type="text/html" href="http://wiki.roberttwomey.com/index.php?title=Students/Joeny_Thipsidakhom&amp;diff=3183"/>
				<updated>2010-03-19T18:43:43Z</updated>
		
		<summary type="html">&lt;p&gt;Joeny Thipsidakhom: /* FINAL Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello,&lt;br /&gt;
&lt;br /&gt;
My name is Joeny Thipsidakhom. I&amp;#039;m a fourth year Visual Arts major with an emphasis on computing. I&amp;#039;m taking this class not only for a major requirement but also because I&amp;#039;m interested technology and the whole idea of interactivity between the user and whatever electronic item/interface is used. I&amp;#039;ve been interested in newly developed technology and where its going since I got my first computer, however my interest in electronics came about during my high school years. I have some previous experience with electronics. During my high school freshman year I joined my school&amp;#039;s robotics team and was apart of the electronics section/team. We were in charge of wiring the electronics components together for the robot. I was apart of this club/team throughout high school and proceeded to help the local high school&amp;#039;s robotics team during my freshman year of college. Sounds fancy (maybe?) but I just followed the electronics schematic that the organization, FIRST Robotics, provided the teams and adjusted it to whatever the mechanical team wanted in terms of number and type of motors.&lt;br /&gt;
&lt;br /&gt;
http://247things.files.wordpress.com/2009/05/trafficcamera_thumb.jpg&lt;br /&gt;
&lt;br /&gt;
[[Image:intuos4.jpg|200px]] &lt;br /&gt;
&lt;br /&gt;
[[Image:civic navigation.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:civic engine.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:psp.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Midterm Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the Midterm switch project I want to create a more complicated form of light switch maybe using motors, some type of pulley system, and variable control over speed of the motors. One motor would close the switch allowing the light to turn on, while the other motor would open the switch pulling on it breaking the circuit and in turn turning the light off. The motors and switch would be separated by a simple pulley system allowing the motors to pull on strings opening and closing the switch and completing the circuit.&lt;br /&gt;
&lt;br /&gt;
[[Image:on.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:off.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:concept.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== FINAL Proposal ==&lt;br /&gt;
&lt;br /&gt;
For the final project I am going to create an object that interacts with the user when it is triggered. The interaction will be simple, however when the user does a certain thing to the object, a black box, it will react and give a response to the user.&lt;br /&gt;
&lt;br /&gt;
I want to create something that actively engages the user in some manner, get the user involved, and speaks to the user, even if it’s not in a language most people would understand or know. In order to interact with the box a particular motion/interaction has to be done, and the box will only respond to that interaction. To initiate this interaction I&amp;#039;m going to use a piezo sensor. For now what the sensor is going to do is detect if the user taps or knocks on the box and the black box will respond in Morse code and say something to the user. Once I get that code and circuit established I&amp;#039;ll work on adding to its to make it more complex.&lt;br /&gt;
&lt;br /&gt;
== FINAL Images ==&lt;br /&gt;
[[Image:Front.jpg|350px]]&lt;br /&gt;
[[Image:Iso.jpg|339px]]&lt;br /&gt;
[[Image:Side.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Blackbox.jpg|350px]]&lt;br /&gt;
[[Image:Controller.jpg|450px]]    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FINAL Code ==&lt;br /&gt;
/* Joeny Thipsidakhom&lt;br /&gt;
   VIS 147A Final Project&lt;br /&gt;
   BlackBox */&lt;br /&gt;
&lt;br /&gt;
const int ledPinred = 13;        //Red LED Pin 13&lt;br /&gt;
const int knockSensor = 0;       //Piezo Sensor Pin 0&lt;br /&gt;
const int threshold = 100;       //Sound threshold for Piezo Sensor&lt;br /&gt;
const int buttonPin1 = 1;        //Second Button Pin 1&lt;br /&gt;
const int buttonPin2 = 2;        //Second Button Pin 2&lt;br /&gt;
const int ledPinyellow1 = 3;     //Yellow LED Pin 3&lt;br /&gt;
const int motor = 4;             //Motor Pin 4&lt;br /&gt;
&lt;br /&gt;
int buttonState1 = 0;&lt;br /&gt;
int buttonState2 = 0;            // Variable to read button &lt;br /&gt;
int sensorReading = 0;           // Variable to store the value read from the sensor&lt;br /&gt;
int ledState = LOW;              // Variable used to store the last LED status&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
 pinMode(ledPinred, OUTPUT);     //Sets Red LED as Output&lt;br /&gt;
 pinMode(ledPinyellow1, OUTPUT); //Sets Yellow LED as Output&lt;br /&gt;
 pinMode(motor, OUTPUT);         //Sets Motor as output&lt;br /&gt;
 pinMode(buttonPin1, INPUT);     //Sets Button 1 as Input&lt;br /&gt;
 pinMode(buttonPin2, INPUT);     //Sets Button 2 as Input&lt;br /&gt;
 Serial.begin(9600);             //Use the serial port&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
  sensorReading = analogRead(knockSensor);    // Read the sensor and set it in the variable sensorReading&lt;br /&gt;
  buttonState1 = digitalRead(buttonPin1);     // Read the button&amp;#039;s state&lt;br /&gt;
  buttonState2 = digitalRead(buttonPin2);&lt;br /&gt;
&lt;br /&gt;
if (sensorReading &amp;gt;= threshold) {             //If the sensor reading is greater than the threshold/hit,tapped,etc. do bellow&lt;br /&gt;
  &lt;br /&gt;
 //H   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);              //Turn Red LED ON&lt;br /&gt;
  delay(250);                                 //Wait 250ms&lt;br /&gt;
  digitalWrite(ledPinred, LOW);               //Turn Red LED OFF&lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  &lt;br /&gt;
  //E&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //Y&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(750);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState1 == LOW){                   //When button 1 is pressed do bellow&lt;br /&gt;
  &lt;br /&gt;
  //H User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  User&lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinyellow1, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinyellow1, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
  &lt;br /&gt;
  //H  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250); &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);   &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750); &lt;br /&gt;
  //I  Blackbox&lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(250);                  &lt;br /&gt;
  digitalWrite(ledPinred, HIGH);&lt;br /&gt;
  delay(250);                &lt;br /&gt;
  digitalWrite(ledPinred, LOW);    &lt;br /&gt;
  delay(750);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if (buttonState2 == HIGH){               //Loops unless button is pressed down and held&lt;br /&gt;
    delay(1000);                         //Delays for 1 second&lt;br /&gt;
  &lt;br /&gt;
    digitalWrite(motor, HIGH);           //Run Motor&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);            //Stop Motor&lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);     &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);  &lt;br /&gt;
    digitalWrite(motor, LOW);    &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //L&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //A&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
&lt;br /&gt;
    //Y&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //O&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //U&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
&lt;br /&gt;
    //T&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //H&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);                  &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250); &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);   &lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750); &lt;br /&gt;
    //R&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(750);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);    &lt;br /&gt;
    delay(250);&lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);  &lt;br /&gt;
    delay(750);&lt;br /&gt;
    //E&lt;br /&gt;
    digitalWrite(motor, HIGH);&lt;br /&gt;
    digitalWrite(ledPinred, HIGH);&lt;br /&gt;
    delay(250);                &lt;br /&gt;
    digitalWrite(ledPinred, LOW);&lt;br /&gt;
    digitalWrite(motor, LOW);      &lt;br /&gt;
    delay(750);   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
  delay(100);                        //Delay for 100ms before restarting loop&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Joeny Thipsidakhom</name></author>	</entry>

	</feed>