4線抵抗皮膜式タッチパネル用

Dependents:   11U68_MP3Player with TFTLCD 11U68_MP3Player-with-TFTLCD

Committer:
nameless129
Date:
Fri Jul 24 11:06:07 2015 +0000
Revision:
2:2fe192777f79
Parent:
1:851128b20cc1
change to O3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nameless129 0:6f90e19b1902 1 #include "TouchPanel.h"
nameless129 0:6f90e19b1902 2
nameless129 0:6f90e19b1902 3 #define pin_YU (P0_14)
nameless129 0:6f90e19b1902 4 #define pin_XL (P1_27)
nameless129 0:6f90e19b1902 5 #define pin_YD (P1_25)
nameless129 0:6f90e19b1902 6 #define pin_XR (P0_13)
nameless129 0:6f90e19b1902 7
nameless129 0:6f90e19b1902 8 uint16_t readTouchPanelX_Analog()
nameless129 0:6f90e19b1902 9 {
nameless129 0:6f90e19b1902 10 uint16_t tmp = 0;
nameless129 0:6f90e19b1902 11 //change to Pinmode for TouchPanelRead
nameless129 0:6f90e19b1902 12 DigitalOut TouchPanel_WRtoYU(pin_YU);
nameless129 0:6f90e19b1902 13 DigitalOut TouchPanel_D7toYD(pin_YD);
nameless129 0:6f90e19b1902 14 DigitalIn TouchPanel_D6toXL(pin_XL); //require Hi-Z
nameless129 0:6f90e19b1902 15 AnalogIn TouchPanel_RStoXR(pin_XR); //X position read
nameless129 0:6f90e19b1902 16
nameless129 0:6f90e19b1902 17 TouchPanel_WRtoYU = 1; //require VDD
nameless129 0:6f90e19b1902 18 TouchPanel_D7toYD = 0; //require VSS
nameless129 1:851128b20cc1 19 wait_us(100);
nameless129 0:6f90e19b1902 20 tmp = TouchPanel_RStoXR.read_u16(); //read X touch position
nameless129 0:6f90e19b1902 21
nameless129 0:6f90e19b1902 22 //revert to DigitalOut
nameless129 0:6f90e19b1902 23 DigitalOut TouchPanel_YUtoWR(pin_YU);
nameless129 0:6f90e19b1902 24 DigitalOut TouchPanel_YDtoD7(pin_YD);
nameless129 0:6f90e19b1902 25 DigitalOut TouchPanel_XLtoD6(pin_XL);
nameless129 0:6f90e19b1902 26 DigitalOut TouchPanel_XRtoRS(pin_XR);
nameless129 0:6f90e19b1902 27
nameless129 0:6f90e19b1902 28 return tmp;
nameless129 0:6f90e19b1902 29 }
nameless129 0:6f90e19b1902 30
nameless129 0:6f90e19b1902 31 uint16_t readTouchPanelY_Analog()
nameless129 0:6f90e19b1902 32 {
nameless129 0:6f90e19b1902 33 uint16_t tmp = 0;
nameless129 0:6f90e19b1902 34 //change to Pinmode for TouchPanelRead
nameless129 0:6f90e19b1902 35 DigitalOut TouchPanel_RStoXR(pin_XR);
nameless129 0:6f90e19b1902 36 DigitalOut TouchPanel_D6toXL(pin_XL);
nameless129 0:6f90e19b1902 37 DigitalIn TouchPanel_D7toYD(pin_YD); //require Hi-Z
nameless129 0:6f90e19b1902 38 AnalogIn TouchPanel_WRtoYU(pin_YU); //Y position read
nameless129 0:6f90e19b1902 39
nameless129 0:6f90e19b1902 40 TouchPanel_D6toXL = 1; //require VDD
nameless129 0:6f90e19b1902 41 TouchPanel_RStoXR = 0; //require VSS
nameless129 1:851128b20cc1 42 wait_us(100);
nameless129 0:6f90e19b1902 43 tmp = TouchPanel_WRtoYU.read_u16(); //read Y touch position
nameless129 0:6f90e19b1902 44
nameless129 0:6f90e19b1902 45 //revert to DigitalOut
nameless129 0:6f90e19b1902 46 DigitalOut TouchPanel_XRtoRS(pin_XR);
nameless129 0:6f90e19b1902 47 DigitalOut TouchPanel_XLtoD6(pin_XL);
nameless129 0:6f90e19b1902 48 DigitalOut TouchPanel_YDtoD7(pin_YD);
nameless129 0:6f90e19b1902 49 DigitalOut TouchPanel_YUtoWR(pin_YU);
nameless129 0:6f90e19b1902 50
nameless129 0:6f90e19b1902 51 return tmp;
nameless129 0:6f90e19b1902 52 }
nameless129 0:6f90e19b1902 53
nameless129 0:6f90e19b1902 54
nameless129 0:6f90e19b1902 55 /* int32_t getTouchPanelPosX(uint16_t ad_x) */
nameless129 0:6f90e19b1902 56 /* argument */
nameless129 0:6f90e19b1902 57 /* uint16_t ad_x:TouchPanel ADC X axis value */
nameless129 0:6f90e19b1902 58 /* retuen -1:not touch TouchPanel */
nameless129 0:6f90e19b1902 59 /* positive integer(0~TOUCHPANEL_X_MAX_SIZE):touch position X axis */
nameless129 0:6f90e19b1902 60 int32_t getTouchPanelPosX()
nameless129 0:6f90e19b1902 61 {
nameless129 0:6f90e19b1902 62 #define TOUCHPANEL_X_MAX_SIZE (320) //touchPanel axis X max size
nameless129 0:6f90e19b1902 63 #define CALIB_TOUCH_X1_POSITION (40) //touchPanel X position1(0~TOUCHPANEL_X_MAX_SIZE)
nameless129 0:6f90e19b1902 64 #define CALIB_TOUCH_X1_AD_VALUE (14700) //X1 position touch ADCvalue
nameless129 0:6f90e19b1902 65 #define CALIB_TOUCH_X2_POSITION (280) //touchPanel X position2(0~TOUCHPANEL_X_MAX_SIZE)
nameless129 0:6f90e19b1902 66 #define CALIB_TOUCH_X2_AD_VALUE (50800) //X2 position touch ADCvalue
nameless129 0:6f90e19b1902 67
nameless129 0:6f90e19b1902 68 uint16_t ad_x = readTouchPanelX_Analog();
nameless129 0:6f90e19b1902 69
nameless129 0:6f90e19b1902 70 //Calculate scale factor for "touch ADC value" to "TouchPanel X Position"
nameless129 0:6f90e19b1902 71 const uint16_t COEF_CONV_X_POS = abs(CALIB_TOUCH_X1_AD_VALUE - CALIB_TOUCH_X2_AD_VALUE) /
nameless129 0:6f90e19b1902 72 abs(CALIB_TOUCH_X1_POSITION - CALIB_TOUCH_X2_POSITION);
nameless129 0:6f90e19b1902 73
nameless129 0:6f90e19b1902 74 //Calculate minimum touch AD value for not touch TouchPanel
nameless129 0:6f90e19b1902 75 const uint16_t MINIMUM_AD_X_VALUE = CALIB_TOUCH_X1_AD_VALUE - ( (CALIB_TOUCH_X1_POSITION - 0) * COEF_CONV_X_POS);
nameless129 0:6f90e19b1902 76 int32_t calc_XPos = 0;
nameless129 0:6f90e19b1902 77
nameless129 0:6f90e19b1902 78 if(ad_x <= MINIMUM_AD_X_VALUE)
nameless129 0:6f90e19b1902 79 {
nameless129 0:6f90e19b1902 80 calc_XPos = -1;
nameless129 0:6f90e19b1902 81 }
nameless129 0:6f90e19b1902 82 else if(ad_x >= CALIB_TOUCH_X1_AD_VALUE ) //if touch position upper then X1_POSITION
nameless129 0:6f90e19b1902 83 {
nameless129 0:6f90e19b1902 84 calc_XPos = CALIB_TOUCH_X1_POSITION + abs(CALIB_TOUCH_X1_AD_VALUE - ad_x)/COEF_CONV_X_POS;
nameless129 0:6f90e19b1902 85 }
nameless129 0:6f90e19b1902 86 else //if touch position lower then X1_POSITION
nameless129 0:6f90e19b1902 87 {
nameless129 0:6f90e19b1902 88 calc_XPos = CALIB_TOUCH_X1_POSITION - abs(CALIB_TOUCH_X1_AD_VALUE - ad_x)/COEF_CONV_X_POS;
nameless129 0:6f90e19b1902 89 }
nameless129 0:6f90e19b1902 90
nameless129 0:6f90e19b1902 91 //If touch position over X_MAX_SIZE,to be treated as not touch TouchPanel
nameless129 0:6f90e19b1902 92 if(calc_XPos >= TOUCHPANEL_X_MAX_SIZE)
nameless129 0:6f90e19b1902 93 {
nameless129 0:6f90e19b1902 94 calc_XPos = -1;
nameless129 0:6f90e19b1902 95 }
nameless129 0:6f90e19b1902 96 return calc_XPos;
nameless129 0:6f90e19b1902 97 }
nameless129 0:6f90e19b1902 98
nameless129 0:6f90e19b1902 99 /* int32_t getTouchPanelPosY(uint16_t ad_y) */
nameless129 0:6f90e19b1902 100 /* argument */
nameless129 0:6f90e19b1902 101 /* uint16_t ad_y:TouchPanel ADC Y axis value */
nameless129 0:6f90e19b1902 102 /* retuen -1:not touch TouchPanel */
nameless129 0:6f90e19b1902 103 /* positive integer(0~TOUCHPANEL_Y_MAX_SIZE):touch position Y axis */
nameless129 0:6f90e19b1902 104 int32_t getTouchPanelPosY()
nameless129 0:6f90e19b1902 105 {
nameless129 0:6f90e19b1902 106 #define TOUCHPANEL_Y_MAX_SIZE (240) //touchPanel axis Y max size
nameless129 0:6f90e19b1902 107 #define CALIB_TOUCH_Y1_POSITION (40) //touchPanel Y position1(0~TOUCHPANEL_Y_MAX_SIZE)
nameless129 0:6f90e19b1902 108 #define CALIB_TOUCH_Y1_AD_VALUE (45000) //Y1 position touch ADCvalue
nameless129 0:6f90e19b1902 109 #define CALIB_TOUCH_Y2_POSITION (200) //touchPanel Y position2(0~TOUCHPANEL_Y_MAX_SIZE)
nameless129 0:6f90e19b1902 110 #define CALIB_TOUCH_Y2_AD_VALUE (16500) //Y2 position touch ADCvalue
nameless129 0:6f90e19b1902 111
nameless129 0:6f90e19b1902 112 uint16_t ad_y = readTouchPanelY_Analog();
nameless129 0:6f90e19b1902 113
nameless129 0:6f90e19b1902 114 //Calculate scale factor for "touch ADC value" to "TouchPanel Y Position"
nameless129 0:6f90e19b1902 115 const uint16_t COEF_CONV_Y_POS = abs(CALIB_TOUCH_Y1_AD_VALUE - CALIB_TOUCH_Y2_AD_VALUE) /
nameless129 0:6f90e19b1902 116 abs(CALIB_TOUCH_Y1_POSITION - CALIB_TOUCH_Y2_POSITION);
nameless129 0:6f90e19b1902 117
nameless129 0:6f90e19b1902 118 //Calculate minimum touch AD value for not touch TouchPanel
nameless129 0:6f90e19b1902 119 const uint16_t MINIMUM_AD_Y_VALUE = CALIB_TOUCH_Y2_AD_VALUE - ( (TOUCHPANEL_Y_MAX_SIZE - CALIB_TOUCH_Y2_POSITION) * COEF_CONV_Y_POS);
nameless129 0:6f90e19b1902 120
nameless129 0:6f90e19b1902 121 int32_t calc_YPos = 0;
nameless129 0:6f90e19b1902 122
nameless129 0:6f90e19b1902 123 if(ad_y <= MINIMUM_AD_Y_VALUE)
nameless129 0:6f90e19b1902 124 {
nameless129 0:6f90e19b1902 125 calc_YPos = -1;
nameless129 0:6f90e19b1902 126 }
nameless129 0:6f90e19b1902 127 else if(ad_y <= CALIB_TOUCH_Y1_AD_VALUE )
nameless129 0:6f90e19b1902 128 {
nameless129 0:6f90e19b1902 129 calc_YPos = CALIB_TOUCH_Y1_POSITION + abs(CALIB_TOUCH_Y1_AD_VALUE - ad_y)/COEF_CONV_Y_POS;
nameless129 0:6f90e19b1902 130 }
nameless129 0:6f90e19b1902 131 else
nameless129 0:6f90e19b1902 132 {
nameless129 0:6f90e19b1902 133 calc_YPos = CALIB_TOUCH_Y1_POSITION - abs(CALIB_TOUCH_Y1_AD_VALUE - ad_y)/COEF_CONV_Y_POS;
nameless129 0:6f90e19b1902 134 }
nameless129 0:6f90e19b1902 135
nameless129 0:6f90e19b1902 136 //If touch position over Y_MAX_SIZE,to be treated as not touch TouchPanel
nameless129 0:6f90e19b1902 137 if(calc_YPos >= TOUCHPANEL_Y_MAX_SIZE)
nameless129 0:6f90e19b1902 138 {
nameless129 0:6f90e19b1902 139 calc_YPos = -1;
nameless129 0:6f90e19b1902 140 }
nameless129 0:6f90e19b1902 141 return calc_YPos;
nameless129 0:6f90e19b1902 142 }