专栏首页知识分享单片机触摸屏校准

单片机触摸屏校准

触摸屏就是显示屏加触摸贴膜

第一种情况

假设显示屏

假设触摸贴膜

如果把这张膜贴到显示屏上,,那就不需要校准了,,,,,,,,,,触摸得到的X轴和Y轴的数字量正好与显示屏相等了.....只能说想的美

第二种情况

 显示屏不变

触摸贴膜呢

 有没有发现   1100 - 300 = 800 

                  700 - 100 = 600

坐标之间的差值只好等于显示屏的长和宽,,只是触摸贴膜向左偏移了300,向上偏移了100,,,,,,,

假设显示屏上有这么一个红色的区域

要求是如果触摸到了这块区域那么就执行一些事情

如果按照上面的触摸的X轴与Y轴就是

if(Touch_X>=300 && Touch_X<=300+250 && Touch_Y>=100 && Touch_Y<=100+150)

{

  //执行相应的操作

}

这样也能实现所要的功能,,但是呢,这比较麻烦,考虑的事情太多,最好还是先把触摸的坐标转换为显示屏的坐标

那么如果触摸了一个点(Touch_X,Touch_Y)就要需要转换为显示屏的对应的点(Screen_X,Screen_Y),这样的话方便

对于上面那样就是

Screen_X = (Touch_X - 300)*800/(1100 - 300);

800/(1100-300)   就是每一个触摸点的距离对应显示屏的距离值

Touch_X - 300    是因为本身触摸向左偏移了300,,,也可以想成显示屏向右偏移了300

这样的话点击了301  就对应了显示屏的1

Screen_Y = (Touch_Y - 100)*600/(700 - 100);

假设(Touch_X,Touch_Y) = (300+250,100+150)

那么换算为显示屏的坐标就为

Screen_X =  (300+250- 300)*800/(1100 - 300) = 250;

Screen_Y = (100+150- 100)*600/(700 - 100) = 150;

那么

if(Screen_X >=0&& Screen_X <=250 && Screen_Y >=0&& Screen_Y <=150)

{

  //执行相应的操作

}

 但是呢我们怎么会事先知道屏幕到底偏移了多少呢??我们可以点击屏幕的角点(四个角)获得

但是呢,,,凭自己的感觉感觉感觉,,,如果屏幕的角点遮挡住了怎么办,,,再者说,角点哪有这么好点的,其实我也能看到角在哪,但是我却不确信自己点的是不是角

那就另一种方式

事先在显示屏上显示三个点()

这三个点的坐标(显示屏的)我是知道的

    假设设置的是(x1,y1) = (80,80)

                     (x2,y2) = (800-80,600-80)

                     (x3,y3) = (80,600-80)

然后呢我点击第一个点,会得到一个触摸的

Touch_X1,Touch_Y1

点击第二个会得到   Touch_X2,Touch_Y2

点击第三个会得到   Touch_X3,Touch_Y3

第一步咱们要算出偏移量 Offset_X,就是说触摸贴膜对应显示屏偏移了多少

 (x2 - x1)/(Touch_X2 - Touch_X1) = x1/TouchLength_X 

那么偏移的距离 Offset_X = Touch_X1 - TouchLength_X ;

同理

(Y3 - Y1)/(Touch_Y3 - Touch_Y1) = Y1/TouchLength_Y 

那么偏移的距离 Offset_Y = Touch_Y1- TouchLength_Y ;

 那么对应到显示屏上

Screen_X = (Touch_X - Offset_X)*(x2 - x1)/(Touch_X2 - Touch_X1);

Screen_Y = (Touch_Y - Offset_Y)*(Y3 - x1)/(Touch_Y3 - Touch_Y1);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 23-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 加入消息处理

    https://www.cnblogs.com/yangfengwu/p/11203546.html

    杨奉武
  • 给单片机写个回调函数怎么样

    实际上就是定义了一个 void(*UsartCallBack)(char data);//定义一个函数指针变量

    杨奉武
  • 关于Http 传输二维json

    然后就在想是不是   String str = jsonObject1.toString();    jsonObject.put("param",str); ...

    杨奉武
  • 新媒体必修课: 如何快速将gif图调整到300帧以内?

    ​为保证最终gif图的流畅,可以采用每隔N帧,抽取1帧的方式, 一张504帧的图片,我们需要每隔1帧抽取1帧微信一直以「克制」著称,为了给用户节省流量,微信公众...

    zhaoolee
  • 程序员跳槽刷题必备神器!不用打开浏览器,就能刷LeetCode

    LeetCode上面收集了各大公司的经典算法面试题,面试前刷一波最好不过了,今天要和大家分享的这个项目就是一个帮助大家快速刷LeetCode题目的VS Code...

    帅地
  • 作为一个coder,要想玩好Leetcode并非难事!

    什么要刷LeetCode 大家都知道,很多对算法要求高一点的软件公司,比如美国的FLAGM (Facebook、LinkedIn、Amazon/Apple、Go...

    架构师修行之路
  • iOS9的新特性3D-Touch

    Apple在iphone6s中推出了的新特性:3D-Touch,由于相关的文档还比较少,我在学习中总结了一下可能有用的功能点。 1. 什么是3D-Touch ...

    腾讯大数据
  • 码云团队如何使用码云?

    码云Gitee
  • 关注成效而非产出

    我一直认为成效是我们应该关注的重点。试想一个团队提供了很多功能(无论我们是用代码量、功能点、还是用户故事来度量),只要这些功能没有帮助用户改善生产活动,其实都是...

    ThoughtWorks
  • 亚信数据说他们家的大数据操作平台很厉害,“友商”们会笑吗?

    <数据猿导读> 亚信数据橘云产品线总经理朱军说:“亚信数据的大数据操作平台来自开源但优于开源,性能与稳定程度非常高,几乎媲美Hortonworks所提供的产品跟...

    数据猿

扫码关注云+社区

领取腾讯云代金券