PATENT DOCUMENT

Publication Number: US-7932897-B2
Application Number: US-20369205-A
Country: US
Kind Code: B2

Title: Method of increasing the spatial resolution of touch sensitive devices

Abstract:
Disclosed herein is a capacitive touch sensitive device. One aspect of the touch sensitive device described herein is a reduction in the number of sensor circuits needed for circular or linear capacitive touch sensitive devices while maintaining the same resolution and absolute position determination for a single object. A related aspect of the touch sensitive device described herein a coding pattern that allows each sensor circuit of a capacitive touch sensitive device to share multiple electrodes at specially chosen locations in a sensor array such that the ability to determine the absolute position of a single object over the array is not compromised.

Claims:
1. A touch sensitive device configured to track a finger, the device comprising:
 a first plurality of touch sensitive electrodes, each of the touch sensitive electrodes being associated with one of at least a first electrode group and a second electrode group; and 
 a second plurality of sense circuits, 
 wherein the second plurality of sense circuits is less than the first plurality of touch sensitive electrodes such that at least one sense circuit is shared between more than one of the touch sensitive electrodes; 
 wherein each of the touch sensitive electrodes that share the at least one sense circuit are spatially separated from each other by a dispersal distance and are associated with a different one of the first and second electrode groups, 
 wherein each of the touch sensitive electrodes is directly connected to the at least one sense circuit through a common conductor without multiplexing switches, 
 wherein the touch sensitive electrodes are configured to enable the finger to overlap multiple adjacent electrodes and the dispersal distance is large enough to prevent the finger from overlapping the touch sensitive electrodes that share a sense circuit, 
 wherein the plurality of sense circuits are configured to be scanned to collect a signal value corresponding to each of the plurality of sense circuits, 
 wherein a sense circuit having a maximum signal value and first and second touch sensitive electrodes that share the sense circuit having the maximum signal value are identified, 
 the first and second identified touch sensitive electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups, 
 wherein one of the first and second identified touch sensitive electrodes is identified as a touched electrode by comparing a signal strength of electrodes on either side of the first identified touch sensitive electrode with a signal strength of electrodes on either side of the second identified touch sensitive electrode, and 
 wherein a centroid of the finger being tracked is computed with reference to the touched electrode. 
 
     
     
       2. The touch sensitive device of  claim 1  wherein the dispersal distance is approximately one-third of a characteristic dimension of the touch sensitive device. 
     
     
       3. The touch sensitive device of  claim 1  wherein each sense circuit is directly connected to two touch sensitive electrodes. 
     
     
       4. The touch sensitive device of  claim 1  wherein the plurality of touch sensitive electrodes are arranged in a circular array. 
     
     
       5. The touch sensitive device of  claim 4  wherein the dispersal distance is approximately one-third the circumference of the circular array. 
     
     
       6. The touch sensitive device of  claim 4  wherein each sense circuit is directly connected to two touch sensitive electrodes. 
     
     
       7. The touch sensitive device of  claim 1  wherein the touch sensitive electrodes are arranged in a linear array. 
     
     
       8. The touch sensitive device of  claim 7  wherein the dispersal distance is approximately one-third the length of the linear array. 
     
     
       9. A method of tracking a finger used in conjunction with a touch sensitive device, wherein the touch sensitive device comprises a plurality of electrodes and a plurality of sense circuits, wherein each of the electrodes is associated with one of at least a first electrode group and a second electrode group and wherein at least one of the sense circuits is directly connected to more than one electrode through a common conductor without multiplexing switches, the method comprising:
 configuring the electrodes to enable the finger to overlap multiple adjacent electrodes; 
 spatially separating each of the electrodes that share a sense circuit by a dispersal distance large enough to prevent the finger from overlapping the electrodes that share the sense circuit and associating each of the electrodes that share a sense circuit with a different one of the first and second electrode groups; 
 scanning the plurality of sense circuits to collect a signal value corresponding to each of the plurality of sense circuits; 
 identifying, from the plurality of sense circuits, a sense circuit having a maximum signal value and first and second electrodes that share the sense circuit having the maximum signal value, the first and second identified electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups; 
 identifying one of the first and second identified electrodes as a touched electrode by comparing a signal strength of electrodes on either side of the first identified electrode with a signal strength of electrodes on either side of the second identified electrode; and 
 computing a centroid of the finger being tracked with reference to the touched electrode. 
 
     
     
       10. The method of  claim 9  wherein sensor and electrode mappings required for identifying the sense circuit and identifying the electrode are stored in look up tables. 
     
     
       11. A capacitive touch sensitive device configured to determine a position of a finger, the device comprising:
 a first plurality of electrodes arranged in an array, the array having at least a first dimension, each of the electrodes being associated with one of at least a first electrode group and a second electrode group, 
 a second plurality of sensor circuits, the first plurality of electrodes being greater than the second plurality of sensor circuits, 
 each sensor circuit being associated with at least two non-adjacent electrodes, the two non-adjacent electrodes being spaced by a dispersal distance equal to less than half of the first dimension and being associated with a different one of the first and second electrode groups, 
 wherein at least one of the sensor circuits is directly connected to more than one electrode through a common conductor without multiplexing switches, 
 wherein the electrodes are configured to enable the finger to overlap multiple adjacent electrodes and the dispersal distance is large enough to prevent the finger from overlapping the non-adjacent electrodes associated with the sensor circuit, 
 wherein the plurality of sense circuits are configured to be scanned to collect a signal value corresponding to each of the plurality of sense circuits, 
 wherein a sense circuit having a maximum signal value and first and second electrodes that share the sense circuit having the maximum signal value are identified, 
 the first and second identified electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups, 
 wherein one of the first and second identified electrodes is identified as a touched electrode by comparing a signal strength of electrodes on either side of the first identified electrode with a signal strength of electrodes on either side of the second identified electrode, and 
 wherein a centroid of the finger being tracked is computed with reference to the touched electrode. 
 
     
     
       12. The device of  claim 11  wherein the first plurality of electrodes is equal to twice the second plurality of sensor circuits. 
     
     
       13. The device of  claim 11  wherein the dispersal distance is equal to approximately one-third the first dimension. 
     
     
       14. The device of  claim 11  wherein approximately one third of the electrodes are disposed between the two non-adjacent electrodes. 
     
     
       15. A method of tracking a finger using the device of  claim 11 , the method comprising:
 identifying a sensor circuit associated with a maximum signal value, 
 identifying an electrode associated with a maximum signal value, the electrode corresponding to the sensor circuit having a maximum signal value, wherein the sensor circuit is directly connected to the electrode through a common conductor without multiplexing switches, and 
 computing a centroid of the finger being tracked with reference to the electrode having the maximum signal value and adjacent electrodes. 
 
     
     
       16. A method of tracking a finger used in conjunction with a touch sensitive device,
 the touch sensitive device comprising multiple electrodes and multiple sense circuits, the multiple electrodes being individually associated with one of at least a first electrode group and a second electrode group, at least one of the sense circuits being connected to more than one electrode through a common conductor, the electrodes configured to enable the finger to overlap multiple adjacent electrodes, the touch sensitive electrodes that share a sense circuit being spatially separated from each other by a dispersal distance large enough to prevent the finger from overlapping the touch sensitive electrodes that share a sense circuit, and the electrodes that share a sense circuit being associated with a different one of the first and second electrode groups, 
 the method comprising: 
 scanning the multiple sense circuits to collect signal values corresponding to the multiple sense circuits, 
 identifying, from the multiple sense circuits, a sense circuit having a maximum signal value and first and second electrodes that share the sense circuit having the maximum signal value, the first and second identified electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups, 
 identifying one of the first and second identified electrodes as a touched electrode by comparing a signal strength of electrodes on either side of the first identified electrode with a signal strength of electrodes on either side of the second identified electrode, and 
 computing a centroid of the finger being tracked with reference to the touched electrode. 
 
     
     
       17. The method of  claim 16  wherein the multiple electrodes are arranged in a circle and a portion of the electrodes in the first group are adjacent other electrodes in the first group and a portion of the electrodes in the first group are adjacent electrodes in the second group. 
     
     
       18. A capacitive touch sensitive device configured to determine a position of a finger, the device comprising:
 multiple electrodes arranged in an array, the multiple electrodes being individually associated with one of at least a first electrode group and a second electrode group, 
 multiple sensor circuits, the multiple electrodes being greater in number than the multiple sensor circuits, 
 individual sensor circuits being associated with at least two non-adjacent electrodes, the two non-adjacent electrodes being spaced by a dispersal distance equal to less than half of a first dimension and being associated with a different one of the first and second electrode groups, 
 at least one of the sensor circuits being connected to more than one electrode through a common conductor, 
 the electrodes being configured to enable the finger to overlap multiple adjacent electrodes and the dispersal distance being large enough to prevent the finger from overlapping the non-adjacent electrodes associated with the sensor circuit, 
 the multiple sense circuits being configured to be scanned to collect a signal value corresponding to each of the multiple of sense circuits, 
 wherein a sense circuit having a maximum signal value and first and second electrodes that share the sense circuit having the maximum signal value are identified, the first and second identified electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups, 
 wherein one of the first and second identified electrodes is identified as a touched electrode by comparing a signal strength of electrodes on either side of the first identified electrode with a signal strength of electrodes on either side of the second identified electrode, and 
 wherein a centroid of the finger being tracked is computed with reference to the touched electrode. 
 
     
     
       19. The device of  claim 18  wherein the multiple electrodes are arranged in a circle and a portion of the electrodes in the first group are adjacent other electrodes in the first group and a portion of the electrodes in the first group are adjacent electrodes in the second group. 
     
     
       20. A capacitive touch sensitive device configured to determine a position of a finger, the device comprising:
 multiple electrodes arranged in a circle, each multiple electrode being associated with a first electrode group or a second electrode group, a portion of the electrodes in the first group being adjacent other electrodes in the first group and a portion of the electrodes in the first group being adjacent electrodes in the second group, 
 multiple sensor circuits, individual sensor circuits being associated with at least two non-adjacent electrodes spaced by a dispersal distance and associated with a different one of the first and second electrode groups, 
 at least one of the sensor circuits being connected to more than one electrode through a common conductor, 
 the electrodes being configured to enable the finger to overlap multiple adjacent electrodes and the dispersal distance being large enough to prevent the finger from overlapping the non-adjacent electrodes associated with the sensor circuit, 
 the multiple sense circuits being configured to be scanned to collect a signal value corresponding to each of the multiple of sense circuits, 
 wherein a sense circuit having a maximum signal value and first and second electrodes that share the sense circuit having the maximum signal value are identified, the first and second identified electrodes being spatially separated from each other by a dispersal distance and being associated with a different one of the first and second electrode groups, 
 wherein one of the first and second identified electrodes is identified as a touched electrode by comparing a signal strength of electrodes on either side of the first identified electrode with a signal strength of electrodes on either side of the second identified electrode, and 
 wherein a centroid of the finger being tracked is computed with reference to the touched electrode.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is related to and claims priority to Provisional U.S. Patent Application Ser. No. 60/522,107, filed Aug. 16, 2004, having the same title and inventors as herein, which provisional application is hereby incorporated by reference in its entirety. 
    
    
     BACKGROUND 
     The present invention relates generally to the field of touch sensitive devices, and, in particular, to the field of optimizing capacitive sensing electrode shape and arrangement to increase the effective spatial resolution and/or the physical range of the sensing device using a limited number of sensors. 
     In a capacitive touch sensitive device, each sensor, of which there may be many, comprises a conductive pad that forms one plate of a capacitor and a way to measure the capacitance of the conductive pad in conjunction with another movable conductive object. The movable conductive object is typically a finger or stylus that is kept at a minimum distance from the conductive pad by a non-conductive spacer. The two conductive objects (conductive pad and movable conductive object), along with the non-conductive dielectric between them, form a capacitor. As known to those skilled in the art, the capacitance of this capacitor changes as the distance and/or overlap between the objects changes. In a typical device the number of conductive pads (henceforth called electrodes), the size of the electrodes, and the spacing between the electrodes determine the physical range and spatial resolution of the touch sensitive device. 
     In typical implementations of capacitive touch sensitive devices the position of a finger gliding over a dielectric-covered array of sensor electrodes is determined by observing the change in capacitance as the finger moves on the surface. Scanning and processing circuitry measures the change in capacitance due to the varying overlap between the finger and a given electrode. If a finger is large enough to partially overlap multiple neighboring electrodes then interpolation allows the finger position to be determined to a resolution much higher than the electrode spacing. The interpolation calculation follows the classic centroid formula: the sum of the signal values at each electrode is multiplied by its coordinate and divided by the sum of all the signal values. This technique works equally well with linear arrays of row and column electrodes, radial arrays of electrodes arranged as spokes in a wheel, or two-dimensional arrays of electrodes arranged to fill a planar space. Special electrode shapes intended to boost interpolation accuracy or resolution are the main distinction between the various related art designs. 
     For example, U.S. Pat. No. 5,463,388 to Boie et al., which is hereby incorporated by reference, teaches fingertip sized, interleaved electrode spirals to minimize the number of electrodes needed for a multi-touch sensor array. The interleaving ensures that a finger overlaps multiple electrodes even when centered on a particular electrode and electrodes are one fingertip width apart. Stable interpolation generally requires continual finger overlap with multiple electrodes. 
     Seonkyoo Lee, “A Fast Multiple-Touch-Sensitive Input Device,” Master&#39;s Thesis, University of Toronto (1984) teaches virtual grouping of square electrode cells to more quickly determine whether an object is present within a neighborhood. U.S. Pat. No. 5,767,457 to Gerpheide teaches locating an object by finding the balance point of a virtual grouping of electrodes on either side of the object. Both of these references are hereby incorporated by reference. 
     Finally, U.S. Pat. Nos. 5,543,590; 5,543,591; 5,880,411; and 6,414,671; each assigned to Synaptics and hereby incorporated by reference, teach dense interleaving of row and column spanning electrodes in the same plane by shaping each row electrode as a connected string of diamond shapes, and each column electrode as a string of diamond shapes with centers offset from the row diamond centers. 
     However, additional improvement in resolution is still desired for such devices. Although resolution may be increased by adding additional sensor elements, dictates of scanning time, circuitry cost, and power consumption simultaneously drive systems towards as few sensor elements as possible. Therefore, there is a need in the art of sensor array design for sensor arrangements that maximize resolution with a limited number of sensors. Disclosed herein is a touch sensitive device that addresses the needs of the prior art for increased resolution and decreased sensor element count. 
     SUMMARY 
     Disclosed herein is a capacitive touch sensitive device. One aspect of the touch sensitive device described herein is a reduction in the number of sensor circuits needed for circular or linear capacitive touch sensitive devices while maintaining the same resolution and absolute position determination for a single object. A related aspect of the touch sensitive device described herein a coding pattern that allows each sensor circuit of a capacitive touch sensitive device to share multiple electrodes at specially chosen locations in a sensor array such that the ability to determine the absolute position of a single object over the array is not compromised. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  illustrates a touch sensitive device employing certain teachings of the present invention. 
     
    
    
     DETAILED DESCRIPTION 
     A capacitive touch sensor is described herein. The following embodiments of the invention are illustrative only and should not be considered limiting in any respect. 
     The touch sensitive device described herein allows each sensor circuit to share two or more electrodes by dispersing the shared electrodes in a particular pattern. The electrodes are shared in the sense that they both electrically connect to the same capacitive measuring sensor circuit through a common conductor without the need for multiplexing switches. Preferably, the distance separating a pair of shared electrodes, i.e., the dispersal distance, is one-third the number of electrodes in the device. The touch sensitive device employed herein further includes a particular coding pattern so that: 1) adjacent electrodes never share the same sensor circuit; and 2) the electrodes sharing the same sensor circuit are always separated from one another by the dispersal distance, i.e., roughly one third of the number of electrodes. 
     A touch sensitive device incorporating the teachings herein is illustrated in  FIG. 1 . The capacitive touch sensitive device 100 is a one-dimensional circular array, although other arrangements, e.g., linear arrays, etc., could also be used. The circular array includes 22 electrodes, numbered 0-21. The circular array includes only 11 sensor circuits. These sensor circuits may take the form of various sensor circuits known to those skilled in the art. One such circuit is disclosed in U.S. Pat. No. 6,323,846, entitled “Method and Apparatus for Integrating Manual Input,” which is hereby incorporated by reference. The sensor circuit corresponding to each electrode is designated by a number located at the outer portion of each sensor electrode. 
     The touch sensitive device 100 thus shares two electrodes per sensor. However, additional electrodes may be shared with each sensor. Each electrode in  FIG. 1  also includes a group designator, either “A” or “B”. Each group A electrode shares a sensor with a group “B” electrode. As noted above, the preferred dispersal distance (i.e., the distance between two electrodes sharing a sensor) is a span of approximately one-third the number of sensors, and thus approximately one-third of a characteristic dimension of the device. Thus for the circular device illustrated in  FIG. 1 , the preferred dispersal distance is approximately one-third the circumference of the circle, thus encompassing approximately one third of the sensors. Any two adjacent electrodes and the two electrodes that share sensor circuits will thus be evenly spaced, a third of the way around the circle. For example, electrode  1  in group A shares sensor  1  with electrode  8  in group B. Electrode  1  is located at approximately the eleven o&#39;clock position, while electrode  8  is located at approximately the seven o&#39;clock position. Similarly, electrode  0  in group A shares sensor  0  with electrode  15  in group B. Electrode  0  is located at the twelve o&#39;clock position, while electrode  15  is located at approximately the four o&#39;clock position. 
     The sensor may alternatively be constructed as a one-dimensional linear array. For such a sensor, the dispersal pattern is basically the same as for a circular array: linear arrays can be treated as a circular array that has been broken between two electrodes and uncurled. Again, it is preferred that the dispersal difference between two electrodes sharing a sensor be about one-third the characteristic dimension of the device, which for a linear sensor is the length of the device. 
     Obviously, because multiple electrodes share a sensing circuit, the absolute position of an object in contact (proximity) with a single electrode cannot be determined. For absolute position interpolation to work properly in a device constructed according to the principles herein, each electrode must be sufficiently narrow enough that the object being tracked, usually a finger or conductive stylus, overlaps multiple (e.g., two or three) adjacent electrodes. Likewise, to eliminate any ambiguity, the object being tracked must be smaller than the dispersal distance so that it does not overlap both shared electrodes of any sensor circuit. 
     While other electrode sharing patterns are possible, some of these can not be used to unambiguously determine the position of a finger. For example, an electrode arrangement with a dispersal distance of half the array size would fail. For a circular array, this would correspond to sharing of electrodes on opposite sides of the circle, 180 degrees from one another. No matter how decoding and interpolation were done, the system could never tell whether the finger or stylus was really at the opposite position halfway around the circle. 
     Because each sensor circuit is connected to multiple electrodes, the sensor illustrated herein requires a decoding method that finds the set of electrodes with the largest signals, then decides which of two possible electrode groups would attribute these largest signals to adjacent rather than scattered electrodes. Once this best decoding is known, classic centroid interpolation can commence amongst the adjacent electrodes. For purposes of centroid computation, each sensor&#39;s entire signal is attributed to its electrode in the adjacent group, leaving its other electrode from the dispersed group with zero signal and zero contribution to the centroid. Assuming the signal to noise ratio of the sensor circuits is adequate, the sensor described herein offers the same position resolution as a conventional position detector that has a separate sensor circuit for each electrode. 
     The example of computer instructions below demonstrates the algorithm used in the present invention to find the position of a finger or stylus that is touching somewhere on the circular array of electrodes. Sensor and electrode mappings are held in look-up-tables (LUTs) to minimize the computation needed for decoding the location of the touching finger. The LUTs map electrode number to sensor number for each group (Sensor_to_A_type_electrode, Sensor_to_B_type_electrode), map the sensor number corresponding to the adjacent electrode (next_X_electrode_sensor, previous_X_electrode_sensor, where X=A or B), and electrode number to sensor number (Electrode_to_Sensor). The use of these LUTs simplifies the calculation of the finger location using the present invention but they are not necessary. 
     A brief description of the algorithm implemented by the code is as follows:
         1. The sensor array is scanned and the signal values corresponding to each sensor are collected.   2. The sensor having maximum strength signal is located using code segment findMaxSensor.   3. The electrode under which the finger is located is computed using code segment findMaxElectrode.   4. The centroid is computed using code segment computeCentroid.   5. Steps 1-4 are repeated.       

     
       
         
           
               
             
               
                   
               
             
            
               
                 #define NUM_SENSORS 11 
               
               
                 #define NUM_ELECTRODES 22 
               
               
                 // Group A electrode and sensor mappings 
               
               
                 Sensor_to_A_type_electrode[NUM_SENSORS] = {0,1,2,3, 
               
               
                 4,5,6,7,9,11,13}; 
               
               
                 next_A_electrode_sensor[NUM_SENSORS] = {1,2,3,4,5,6,7, 
               
               
                 1,3,5,7}; 
               
               
                 previous_A_electrode_sensor[NUM_SENSORS] = {6,0,1,2,3,4,5, 
               
               
                 6,1,3,5}; 
               
               
                 // Group B electrode and sensor mappings 
               
               
                 Sensor_to_B_type_electrode[NUM_SENSORS] = {15,8,17, 
               
               
                 10,19,12,21,14,16,18,20}; 
               
               
                 next_B_electrode_sensor[NUM_SENSORS] = {8,8,9,9,10,10,0,0,2, 
               
               
                 4,6}; 
               
               
                 previous_A_electrode_sensor[NUM_SENSORS] = {7,7,8,8,9,9,10, 
               
               
                 10,0,2,4}; 
               
               
                 // Electrode to sensor mapping 
               
               
                 Electrode_to_Sensor[NUM_ELECTRODES] = { 
               
            
           
           
               
               
            
               
                   
                 0, // 0 
               
               
                   
                 1, // 1 
               
               
                   
                 2, // 2 
               
               
                   
                 3, // 3 
               
               
                   
                 4, // 4 
               
               
                   
                 5, // 5 
               
               
                   
                 6, // 6 
               
               
                   
                 7, // 7 
               
               
                   
                 1, // 8 
               
               
                   
                 8, // 9 
               
               
                   
                 3, // 10 
               
               
                   
                 9, // 11 
               
               
                   
                 5, // 12 
               
               
                   
                 10, // 13 
               
               
                   
                 7, // 14 
               
               
                   
                 0, // 15 
               
               
                   
                 8, // 16 
               
               
                   
                 2, // 17 
               
               
                   
                 9, // 18 
               
               
                   
                 4, // 19 
               
               
                   
                 10, // 20 
               
               
                   
                 6 // 21 
               
            
           
           
               
               
            
               
                   
                 }; 
               
               
                   
                 // This code finds the sensor that has the strongest signal 
               
               
                   
                 void findMaxSensor(void) { 
               
            
           
           
               
               
            
               
                   
                 unsigned char maxval, i; 
               
               
                   
                 max_sensor = 0; 
               
               
                   
                 maxval = 0; 
               
               
                   
                 for (i = 0; i &lt; NUM_SENSORS; i++) { 
               
            
           
           
               
               
            
               
                   
                 if (SensorData[e] &gt; maxval) { 
               
            
           
           
               
               
            
               
                   
                 maxval = SensorData[i]; 
               
               
                   
                 max_sensor = i; 
               
            
           
           
               
               
            
               
                   
                 } 
               
            
           
           
               
               
            
               
                   
                 } 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 // This code finds the electrode that has the strongest 
               
               
                   
                 signal 
               
               
                   
                 // It starts by examining the electrodes adjacent to those electrodes 
               
               
                   
                 // that belong to the maximum sensor. The electrode being touched is 
               
               
                   
                 // identified by comparing the signal strength of the two electrodes on 
               
               
                   
                 // either side of the electrodes belonging to the maximum sensor. The 
               
               
                   
                 // group with the largest signal is the one under the touching finger. 
               
               
                   
                 void findMaxElectrode(void) { 
               
            
           
           
               
               
            
               
                   
                 int Asum, Bsum; 
               
               
                   
                 Asum = SensorData[next_A_electrode_sensor[max —   
               
               
                   
                 sensor]] + 
               
            
           
           
               
               
            
               
                   
                 SensorData[previous_A_electrode_sensor[max —   
               
               
                   
                 sensor]]; 
               
            
           
           
               
               
            
               
                   
                 Bsum = SensorData[next_A_electrode_sensor[max_sensor]] + 
               
            
           
           
               
               
            
               
                   
                 SensorData[previous_B_electrode_sensor[max —   
               
               
                   
                 sensor]]; 
               
            
           
           
               
               
            
               
                   
                 if (Asum &gt; Bsum) { 
               
            
           
           
               
               
            
               
                   
                 maxelectrode = Sensor_to_A_type_electrode 
               
               
                   
                 [max_sensor]; 
               
            
           
           
               
               
            
               
                   
                 } else { 
               
            
           
           
               
               
            
               
                   
                 maxelectrode = Sensor_to_B_type_electrode 
               
               
                   
                 [max_sensor]; 
               
            
           
           
               
               
            
               
                   
                 } 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 // This code computes the centroid corresponding to the touching 
               
               
                   
                 // finger using the location decoded using the algorithm of the 
               
               
                   
                 invention. 
               
               
                   
                 #define CENTMULTIPLIER 8 
               
               
                   
                 void computeCentroid(void) { 
               
            
           
           
               
               
            
               
                   
                 int pos_sum, electrode; 
               
               
                   
                 char offset; 
               
               
                   
                 int sval; 
               
               
                   
                 pos_sum = 0; 
               
               
                   
                 total_signal = 0; 
               
               
                   
                 //sum from maxelectrode in positive direction for two electrodes 
               
               
                   
                 for (offset = 1; offset &lt; 3; offset++) { 
               
            
           
           
               
               
            
               
                   
                 electrode = maxelectrode + offset; 
               
            
           
           
               
               
            
               
                   
                 if (electrode &gt;= NUM_ELECTRODES) { 
               
            
           
           
               
               
            
               
                   
                 electrode −= NUM_ELECTRODES; 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 sval = SensorData[Electrode_to_Sensor[electrode]]; 
               
               
                   
                 total_signal += sval; 
               
               
                   
                 pos_sum += CENTMULTIPLIER*sval*offset; 
               
            
           
           
               
               
            
               
                   
                 } 
               
            
           
           
               
               
            
               
                   
                 //sum from maxelectrode in negative direction for two electrodes 
               
               
                   
                 for (offset = 1; offset &lt;3; offset++) { 
               
               
                   
                 electrode = maxelectrode − offset; 
               
               
                   
                 if (electrode &lt; 0) { 
               
            
           
           
               
               
            
               
                   
                 electrode += NUM_ELECTRODES; 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 sval = SensorData[Electrode_to_Sensor[electrode]]; 
               
               
                   
                 total_signal += sval; 
               
               
                   
                 pos_sum −= CENTMULTIPLIER*sval*offset; 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 total_signal += SensorData[maxe]; 
               
               
                   
                 sval = pos_sum/total_signal; 
               
               
                   
                 sval += CENTMULTIPLIER*maxelectrode; //absolute offset 
               
               
                   
                 by maxelectrode 
               
               
                   
                 if(sval &lt; 0) { 
               
            
           
           
               
               
            
               
                   
                 Centroid = 176 + sval; 
               
            
           
           
               
               
            
               
                   
                 } 
               
               
                   
                 else { 
               
            
           
           
               
               
            
               
                   
                 Centroid = sval; 
               
            
           
           
               
               
            
               
                   
                 } 
               
            
           
           
               
            
               
                 } 
               
               
                   
               
            
           
         
       
     
     While the invention has been disclosed with respect to a limited number of embodiments, numerous modifications and variations will be appreciated by those skilled in the art. It is intended that all such variations and modifications fall with in the scope of the following claims.

Metadata:
Filing Date: 20050815
Publication Date: 20110426
Grant Date: 20110426
Priority Date: 20040816
Inventors: ELIAS JOHN GREER
WESTERMAN WAYNE CARL
ORR, IV JAMES EDMUND
Assignee: APPLE INC
CPC Classifications: [{"code": "G06F2203/0339", "inventive": false, "first": false, "tree": "[]"}, {"code": "G06F3/04166", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/044", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F3/044", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F3/04166", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/044", "inventive": true, "first": true, "tree": "[]"}]
Family ID: 35207698