Main Site Documentation

Touch Screen Calibration and Accuracy


#1

I am working on an application which has small TextBlocks. When trying to get TapEvents on these I objects I noticed that I was sometimes getting adjacent objects instead of the one that I was pressing with a stylus.

I used the GlideCalibration class to calibrate the touch screen. I basically used the sample program with the save parameter set to true.

I then wrote a program to display the touch accuracy.

I ran the callibration routine many times, each time with less then good results.

I even erased the board using MFDeploy between calibrations.

I can see that is a large button was used, and the press was not near the edges of the button, the accuracy I was seeing would be fine.

I may be expecting more than possible from the resistive screens. The accuracy I was seeing was fine for finger selection.

I would be interested in knowing what kind of accuracy others were obtaining using the program below to verify.

using System;using System.Threading;
using Microsoft.SPOT; 

using GHIElectronics.NETMF.Glide;
using GHIElectronics.NETMF.Glide.Display;
using GHIElectronics.NETMF.Glide.UI;
using GHIElectronics.NETMF.Glide.Geom;

using GHIElectronics.NETMF.Hardware;

namespace SpiderScreenTouchTest
{
    public class Program
    {
        private static Point lastPoint;
        private static WindowEx window;

        public static void Main()
        {
            // Load the window            
            window = new WindowEx("window", 320, 240);

            // Activate touch           
            GlideTouch.Initialize();

            Glide.MainWindow = window;

            Thread.Sleep(Timeout.Infinite);
        }

        private class WindowEx : Window
        {
            public WindowEx(String name, int width, int height)
                : base(name, width, height)
            {

            }

            public override TouchEventArgs OnTouchDown(TouchEventArgs e)
            {
                Debug.Print("X: " + e.Point.X.ToString() + " Y: " + e.Point.Y.ToString());

                window.Graphics.DrawLine(Colors.White, 1, e.Point.X - 2, e.Point.Y, e.Point.X + 2, e.Point.Y);
                window.Graphics.DrawLine(Colors.White, 1, e.Point.X, e.Point.Y - 2, e.Point.X, e.Point.Y + 2);
                window.Graphics.Flush();
                lastPoint = e.Point;
                e.StopPropagation();
                return e;
            }
        }
    }
}



#2

I’m busy creating a modified touch driver which additionally measures the pressure and filters out soft touches because those are not accurate. I also removed those two 10k pullups ghi has put on the touch AD lines. I will do some testing in days comming.

Too bad ghi did not use a controller like ads7843


#3

Wouter

I don’t think I a having a false touch issue. I an using a pointy stylus.


#4

After calibration I ran your example; all using a fine point. In some spots on the LCD the crosshair was perfect in other spots it wandered quite a bit sometimes an estimated 10 pixels. With as may items as you’re showing accuracy is important. I’ve noted that multiple presses on the same spot yield seemingly random redraws. I’ve forwarded this to the appropriate people for further investigation.


#5

Capacitive touch anyone?


#6

Thanks Josh…

Your results are consistant with what I was seeing.

For now, so I can continue with the project, I am going to use a drill down display methodology. Pressing on a rack will display all the hosts for that rack in a larger size.

I am going to try to allow finger selection.


#7

[quote]Capacitive touch anyone?
[/quote]

Can I pre-order?


#8

And how do you get greater accuracy with that? Your stylus will not work anymore :slight_smile:


#9

[quote] Your stylus will not work anymore
[/quote]

You can get a stylus that works with capactive touch. Made out of metal and conductive foam.


#10

Well metal stylus will do. But the problem is not the resistive touchscreen, but the adc’s that capture it. Plus those 10k pullups on the input, i guess they mess up the linear scale. Can you use an external controller like the ADS 7843?