小学徒 发表于 2017-4-11 21:12:13

电阻触摸屏,做一个互动操作界面

本帖最后由 小学徒 于 2021-1-22 08:47 编辑



本来还想写点关于什么是电阻触摸屏这样傻的介绍,但发现网上有一堆,况且看了不一定懂。so直接跳过。直接贴代码,上操作!如图上:(这种触摸屏可以网购,几毛钱一块)从左向右一次为X2X1Y2Y1. 接线对照程序和图片。不出意外我们会用到六根线,如果你只接了4根,请再检查我给的图和程序。接线图:会用到6根线。/***测试程序,打开串口监视器就可以看到xy轴的值*****///触摸屏电源连接!!!!!注意引脚,这里已经改正,但附件里没改。正确为7 6 5 4,当然这只是为了配合上面那张图,你也可以换成其他引脚!#define Right7//右侧X2#define Left   6//左端X1#define Bottom 5//底部Y2#define Top    4//顶部Y1/******读取********/#define topInput   A0 //顶部Y1 (5和A0接在一起)#define rightInput A1 //右侧X2(8和A1接在一起)int coordx=0,coordy=0;void setup() { Serial.begin(9600);
}
void loop() {   if(touch())//如果屏被触摸   {   Serial.print("x=");    Serial.print(coordx);//显示出所触摸处x轴的值    Serial.print("   Y=");    Serial.println(coordy);//显示出所触摸处y轴的值    delay(100);    }
}/*****下面这段代码不用理,照搬进来放在loop下面即可***********/https://blog.csdn.net/liu_1800/article/details/112975595

接好线,上传程序后,打开串口检验一下接线有没有问题,正常的话,按下触摸屏就会有数值显示出来,并且会有随着x,y轴有序变化。比如你从左下角靠近原点的地方开始向右上角划动,就应该有(50,50)--至---(1000,1000)这样有规律的变化。若不对再检查接线,和程序里是否需要调换。这一开始只是个测试的方法,它有很多玩法:我们玩它的依据是,每在触摸屏中的不同地方按下会有不同的(X,Y)值,那我们就可以这样左:当在这个地方按下时,点亮LED,当在另一个地方按下时,启动一个电机。那程序里应该这样表示:void loop() {if(touch())//如果触摸{   if((coordx>280&&coordx<365)&& (coordy>290&&coordy<340)) 如果在这个区域内触摸{LED_NO;}//打开LED
if((coordx>300&&coordx<320)&& (coordy>100&&coordy<207)) //同理,如果在这个区域内触摸,执行下面的语句。{MOTOR——NO();}//打开电机}If里面的那些值当然是你自己通过串口得出的,比如你想在这个位置按下点亮LED,那先通过串口看当你按下时它显示的XY值,多按几次就得出一个范围了。
当玩会了这个,把它装在LCD12864上,如下图:这块屏刚刚好,也不算刚好,因为左边的还有空隙,没有完全盖过12864.买之前测量一下。看下面:这是某系统的其中一个控制温湿度的界面,字在12864显示,我身边的人会经常问我,这触摸屏是不是自带显示,不是的!如何精确的控制呢?如下图的+- “按钮” ,我们应该先在12864上显示内容,然后调整“按钮”显示的位置在触摸屏范围内,接下来打开串口,按下“+”按钮,串口会显示XY的值,多按几次就会有一个范围了嘛,我们取它的最大最小值,比如第一次按下出现(100,500),第二次按下出现(90,300),再按下(88,450)…..聪明人应该看懂了,我们取(88--100,300--500),要最大最小就是确保在这个范围内按下,他会进入这个功能。当然你可以独特一点,取(110--120,350--500),没关系,反正数值接近。取值后,程序应该这样
if((coordx>88&&coordx<100)&& (coordy>300&&coordy<500)){}



独行者 发表于 2017-4-12 09:27:37

楼主辛苦,谢谢分享。

6660 发表于 2017-5-9 12:42:15

大神能不能把程序详细注释一下
页: [1]
查看完整版本: 电阻触摸屏,做一个互动操作界面