近段時間一直在做SDL方面的東西,利用五一小假,做了幾個小游戲....,在這給大家說說心得吧,以為做出來的東西是要在開發板上工作的...所以也就對觸摸屏這塊下了點功夫。首先就說說如何讓我們自己的程序也享受觸摸屏帶來的樂趣.
我用的是S3C6410開發板,在/dev下有觸摸屏設備event1或者是event0這個是是具體情況而定的。我們都知道在linux下,一切設備皆文件,當我們明白了這點的時候,你就會發現問題並不像我們想象中的那麼復雜...我們可以查看我們的觸摸屏頭文件tslib.h;這個裡面有很詳細的內容,裡面有兩個結構體是我們在程序中要用到的..關於其具體介紹在我的另一篇文章中有詳細的介紹,http://www.linuxidc.com/Linux/2012-07/66848.htm感興趣的可以看看,我就不再在這裡累贅了。
當然了,我們要操作這個設備,那我們自然是要以文件方式打開喽..
在tslib.h中有函數ts_open;如果成功打開後就返回一個句柄,當然了這是我的理解了。
進而進行配置,ts_config函數;
剩下的工作就是我們讀取觸摸屏信息樓。自然我們會想到要ts_read。這樣一切都搞定了,但程序在我們的開發板上運行以後,我們發現其結果並不是我們想要的。
因為我們並沒有消抖,我們自己感覺按下了一次,但在程序中出來了很多次..這個屬正常現象,可是在我們的程序中是不需要這種正常現象的,那該怎麼辦呢?
你可以自己設計一個新算法,,來獲取一個適當的額值,我的方法是只取第一個值,將其余的值都捨棄,二這種辦法最好的實現方法就是標記了,下面就以程序來說明具體問題...
void *getCtrlMessage(void *junk)
{
int Flag = 1;
ts = ts_open("/dev/event1", 0);
ts_config(ts)
for(;;)
{
if(ts_read(ts , &sample, 1))
{
if((sample.pressure) && (Flag == 1))
{
comparison(sample, RectArray, &virtualValue);
Flag = 0; //防止處理那些由於抖動所產生觸摸點信息
}
if(sample.pressure == 0)
Flag = 1;
}
}
ts_close(ts);
}
在最後的最後要提醒一點就是,當程序結束以後一定要記著close喲....