Bi-Directional Led Sensing on 8x8 LED Matrix

So for a while i’ve been wanting to replicate Jeff Hans LED touch sensing matrix. Recently i got a hold of his patent that outlines that outlines the process by which he achieved his results, it can be found here http://www.google.com/patents/about?id=_AybAAAAEBAJ&dq=Jefferson+Y.+Han I’ve tired to replicate the process he’s outlined in Fig. 11 on page 7 of the pdf but my results don’t match his. below is the is code i wrote i any ideas as to how to get this working i think that the lines are getting saturated from other leds in the same array

#define screen 8
#define scanRate 40
#define scanInterval 150
#define baudRate 9600

byte anodePin[] =  { 2, 3, 4, 5, 6, 7, 8, 9};
byte cathodePin[] = { 54, 55, 56, 57, 58, 59, 60, 61};

int results[8];
int refLevel[8];
boolean sync = true;

void setup(){
MCUCR |= ( 1 << PUD ); 
  // Clear Screen
  for(int i = 0; i < screen; i++){
    digitalWrite(anodePin[i],LOW); // ensure pins go low immediatly after initilising them to outputs
    pinMode(anodePin[i],OUTPUT);   // declare the anode pins as outputs
    pinMode(cathodePin[i],INPUT); // declare the cathode pins as inputs
    Serial.begin(baudRate);
  }  
  // Scan Sequence
  // Scan Column
  for(int i = 0; i < screen; i++){
    for (int j = 0; j < screen; j++){
      digitalWrite(anodePin[i],HIGH);
      pinMode(cathodePin[j],OUTPUT);    // Enable cathode pins as outputs
      digitalWrite(cathodePin[j],LOW);  // Turn ON LED
    }
    delay(scanInterval);
    digitalWrite(anodePin[i], LOW); // Turn off previous row
    pinMode(cathodePin[i], INPUT); // Enable cathode pins as inputs
  }
  // Clear Screen
  for(int i = 0; i < screen; i++){
    digitalWrite(anodePin[i],LOW); 
    pinMode(anodePin[i],OUTPUT);   
    pinMode(cathodePin[i],INPUT); 
  }
  // Scan Rows
  for(int j = 0; j < screen; j++){
    for (int i = 0; i < screen; i++){
      digitalWrite(anodePin[i],HIGH);
      pinMode(cathodePin[j],OUTPUT);    
      digitalWrite(cathodePin[j],LOW);  
    }
    delay(scanInterval);
    digitalWrite(anodePin[j], LOW);
    pinMode(cathodePin[j], INPUT);
  }
  // Clear Screen
  for(int i = 0; i < screen; i++){
    digitalWrite(anodePin[i],LOW); 
    pinMode(anodePin[i],OUTPUT);  
    pinMode(cathodePin[i],INPUT); 
  }  
  
}


void loop(){

  // ON STATE LED
  for(int i = 0; i < screen; i++){ // enable column i
    // enable even rows
    for (int j = 0; j < screen; j++){
      digitalWrite(anodePin[i],HIGH);
      pinMode(cathodePin[j],OUTPUT);    // Enable cathode pins as outputs
      digitalWrite(cathodePin[j],LOW);  // Turn ON LED
      j++; //goto even row
    }
    // sample odd rows
    for (int j = 0; j < screen; j++){
      j++; // goto odd row
      digitalWrite(anodePin[j], LOW);
      digitalWrite(cathodePin[j], HIGH);
//      delay(scanRate);
      pinMode(cathodePin[j], INPUT);
      results[j] = analogRead(cathodePin[j]);
    }
    for (int j = 0; j < screen; j++){
      j++; // goto odd row
      pinMode(cathodePin[j], INPUT);
      results[j] = analogRead(cathodePin[j]);
    }
//    delay(scanRate);
    // enable odd rows
    for (int j = 0; j < screen; j++){
      j++; //goto odd row
      digitalWrite(anodePin[j], HIGH);
      pinMode(cathodePin[j], OUTPUT);
      digitalWrite(cathodePin[j], LOW);
    }
    // sample even rows
    for (int j = 0; j < screen; j++){
      digitalWrite(anodePin[j], LOW);
      digitalWrite(cathodePin[j], HIGH);
//      delay(scanRate);
      pinMode(cathodePin[j], INPUT);
      results[j] = analogRead(cathodePin[j]);
      j++;
    }
    for (int j = 0; j < screen; j++){
      pinMode(cathodePin[j], INPUT);
      results[j] = analogRead(cathodePin[j]);
      j++;
    }
//    delay(scanRate);
    // disable all rows
    for (int j = 0; j < screen; j++){
      digitalWrite(anodePin[j], LOW);
      pinMode(cathodePin[j], OUTPUT);
      digitalWrite(cathodePin[j], HIGH);
    }
    delay(40);
    // sample all rows
    for (int j = 0; j < screen; j++){
      pinMode(cathodePin[j], INPUT);
      refLevel[j] = analogRead(cathodePin[j]);
    }
    for (int j = 0; j < screen; j++){
      Serial.print (results[j], DEC);
      Serial.print(", ");
    }
    Serial.println(" ");
    for (int j = 0; j < screen; j++){
      Serial.print (refLevel[j], DEC);
      Serial.print(", ");
    }
    Serial.println(" ");
  }
  delay(1000);
}

I've already seen grumpy_mike's site from what i know it hasnt been updated for a while now. If Grumpy_Mike is around and can help me it would be awesome.

By the way i forgot to add that the matrix is directly driven from the arduino.

Hi. My idea do this with line diode strip: regulator audio volue = audio level viewer.

I've narrowed down issue to a time problem essentially when and how long in sensing the leds this is an outline of the timing diagram that jeff han used for his led matrix http://www.google.com/patents?id=_AybAAAAEBAJ&pg=PA6&dq=jefferson+y+han&source=gbs_selected_pages&cad=2 if someone could help me to get my timing working in this manner it would be really helpful.