Go Down

Topic: Wii camera demo HELP (Read 598 times) previous topic - next topic

alibooo

Hi Guy's,
I'm almost there! This code works OK ( sort of) untill I try to write to the digitl pots and compile, I just get an expected declaration before ' } ' token ... What dose this mean? Any help please.. Plus the code for the "prossessing is comented out as it was just to full of bugs !! Heres the code I have.

Code: [Select]
/*Wii Camera demo using Stephen Hobley's PVision library
Use serial_display 1, processing_display 0
for standard ASCII output to Arduino serial monitor

Use serial_display 0, processing_display 1
for 2-blob communication and plotting to processing application

Author: Johnnyonthespot
*/

#include <Wire.h>
#include <PVision.h>
#include <SPI.h>
//Select one of the following to be 0, and the other 1
//'0': ON, '1': OFF
#define serial_display 1
#define processing_display 0

#define channelx 1
#define channely 2
PVision ircam;
byte result;


// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;
int digpot_x = 500;
int digpot_y = 500;
}
// set the slaveSelectPin as an output:
   pinMode (slaveSelectPin, OUTPUT);
   // initialize SPI:
   SPI.begin();

//MUX testing
int S0 = 5;
int S1 = 6;
void setup()
{
  Serial.begin(115200);
  ircam.init();
   // while (Serial.available() <= 0) {
     //Serial.print("AE v1.0");   // send a capital A
    // delay(300);
    //}
}

void loop()
{
   
  result = ircam.read();
 
  if(serial_display == 1){
    if (result & BLOB1)
    {
      digpot_y = ircam.Blob1.X >> 2;
      digpot_x = ircam.Blob1.Y >> 2;
      Serial.print("BLOB1 detected. X:");
      Serial.print(digpot_x);
      Serial.print(" Y:");
      Serial.print(digpot_y);
      Serial.print(" Size:");
      Serial.println(ircam.Blob1.Size);
    }
   
    if (result & BLOB2)
    {
      Serial.print("BLOB2 detected. X:");
      Serial.print(ircam.Blob2.X >> 2);
      Serial.print(" Y:");
      Serial.print(ircam.Blob2.Y >> 2);
      Serial.print(" Size:");
      Serial.println(ircam.Blob2.Size);
    }
    if (result & BLOB3)
    {
      Serial.print("BLOB3 detected. X:");
      Serial.print(ircam.Blob3.X >> 2);
      Serial.print(" Y:");
      Serial.print(ircam.Blob3.Y >> 2);
      Serial.print(" Size:");
      Serial.println(ircam.Blob3.Size);
    }
    if (result & BLOB4)
    {
      Serial.print("BLOB4 detected. X:");
      Serial.print(ircam.Blob4.X >> 2);
      Serial.print(" Y:");
      Serial.print(ircam.Blob4.Y >> 2);
      Serial.print(" Size:");
      Serial.println(ircam.Blob4.Size);
    }
   
  digitalPotWrite (channelx,(int)attX);
  digitalPotWrite (channely,(int)attY);
  }
int digitalPotWrite(int address, int value) {
   // take the SS pin low to select the chip:
   digitalWrite(slaveSelectPin,LOW);
   //  send in the address and value via SPI:
   SPI.transfer(address);
   SPI.transfer(value);
   // take the SS pin high to de-select the chip:
   digitalWrite(slaveSelectPin,HIGH);
}
  }//endif serial_display
 
  else if(processing_display == 1){
    if( Serial.available() > 0){
   //   print header
     uint8_t XL1 = ircam.Blob1.X & 0xFF;
     uint8_t XH1 = (ircam.Blob1.X >> 8) & 0x03;
     uint8_t YL1 = ircam.Blob1.Y & 0xFF;
     uint8_t YH1 = (ircam.Blob1.Y >> 8) & 0x03;
     uint8_t XL2 = ircam.Blob2.X & 0xFF;
     uint8_t XH2 = (ircam.Blob2.X >> 8) & 0x03;
     uint8_t YL2 = ircam.Blob2.Y & 0xFF;
     uint8_t YH2 = (ircam.Blob2.Y >> 8) & 0x03;

     
     
      Serial.write(XL1);
      Serial.write(XH1);
      Serial.write(YL1);
      Serial.write(YH1);
      Serial.write(XL2);
      Serial.write(XH2);
      Serial.write(YL2);
      Serial.write(YH2);
    }//end ifSerial.available
  }//endif processing_display
 

}

/*
Processing code for 2-blob output
import processing.serial.*;

int bgcolor = 250;
int fill_color = 255;      // Background color
int fgcolor;      // Fill color
Serial myPort;                       // The serial port
int[] serialInArray = new int[8];    // Where we'll put what we receive
int serialCount = 0;                 // A count of how many bytes we receive
int xpos_1, xpos_2, ypos_1, ypos_2;              // Starting position of the ball
boolean firstContact = false;        // Whether we've heard from the microcontroller
float angle, hyp;
int last_update = 0;
int this_update = 0;
//Blob data
int ycoord_max = 747;
int xcoord_max = 1023;
int[] xcoord = new int[4];
int[] ycoord = new int[4];

void setup() {
  size(1024, 750);  // Stage size
  noStroke();      // No border on the next thing drawn
  frameRate(400);
  // Set the starting position of the ball (middle of the stage)
  xpos_1 = width/2 - width/4;
  ypos_1 = height/2 - width/4;
  xpos_2 = width/2 + width/4;
  ypos_2 = height/2 + width/4;
  // Print a list of the serial ports, for debugging purposes:
  println(Serial.list());

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

void draw() {
  background(bgcolor);
  fill(0);
  // Draw the shape
  if(xcoord[0] < xcoord_max && ycoord[0] < ycoord_max && xcoord[1] < xcoord_max && ycoord[1] < ycoord_max){
    //hyp = sqrt( sq(xcoord[1] - xcoord[0]) + sq(ycoord[1] - ycoord[0]));
   // angle = degrees( acos((xcoord[1]-xcoord[0])/hyp));
    strokeWeight(2);
    stroke(255,10,10);
    line(xpos_1, ypos_1, xpos_2, ypos_2);
    stroke(0);
    line(xpos_1, ypos_1, xpos_2, ypos_1);
    stroke(0);
    line(xpos_2, ypos_1, xpos_2, ypos_2);
  }
  else{
   angle = 0;
  }
  ellipse(xpos_1, ypos_1, 30, 30);
  ellipse(xpos_2, ypos_2, 30, 30);


}

void serialEvent(Serial myPort) {
  // read a byte from the serial port:
  int inByte = myPort.read();
  // if this is the first byte received, and it's an A,
  // clear the serial buffer and note that you've
  // had first contact from the microcontroller.
  // Otherwise, add the incoming byte to the array:
  if (firstContact == false) {
    if (inByte == 'A') {
      myPort.clear();          // clear the serial port buffer
      firstContact = true;     // you've had first contact from the microcontroller
      myPort.write('A');       // ask for more
    }
  }
  else {
    // Add the latest byte from the serial port to array:
    serialInArray[serialCount] = inByte;
    serialCount++;
   
    // If we have 3 bytes:
    if (serialCount > 7 ) {
     
      //Parse incoming data
      xcoord[0] = serialInArray[0] + (serialInArray[1] << 8);
      ycoord[0] = serialInArray[2] + (serialInArray[3] << 8);
      xcoord[1] = serialInArray[4] + (serialInArray[5] << 8);
      ycoord[1] = serialInArray[6] + (serialInArray[7] << 8);     
      //Update coordinate data
     xpos_1 = xcoord[0]*width/xcoord_max;
     ypos_1 = ycoord[0]*height/ycoord_max;
     xpos_2 = xcoord[1]*width/xcoord_max;
     ypos_2 = ycoord[1]*height/ycoord_max;
     
      // print the values (for debugging purposes only):
     // println(xcoord[0] + "\t" + ycoord[0] + "\t" + xcoord[1]+"\t" + ycoord[1] + "\tangle: " + angle + "\tRate: " + (this_update - last_update));

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

wildbill

This section looks problematic:
Code: [Select]

}
// set the slaveSelectPin as an output:
   pinMode (slaveSelectPin, OUTPUT);
   // initialize SPI:
   SPI.begin();


That closing brace is likely the cause of your compiler error. The other two statements need to be inside a function, presumably setup.

alibooo

Thanks for the quick reply...
I'm going to show my complete ignorance now, I'm not really a "coder" and have a limited understanding on such things, so if you could be a bit more specific that would be a pretty cool thing,
Thanks..

wildbill

In the section I indicated, delete the closing brace - i.e. this: }

Cut out the other lines and paste them into the setup program below this line:
Code: [Select]
  ircam.init();

That will resolve the most immediate compiler errors, though I didn't read any further so others may remain.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy