Vlad Craciun / SSD1289_TouchScreen
Revision:
2:a31069f27cd5
Parent:
1:e7ae315a1ceb
--- a/TouchPanel.cpp	Sat Sep 14 11:48:46 2013 +0000
+++ b/TouchPanel.cpp	Sat Sep 14 13:03:33 2013 +0000
@@ -1,11 +1,15 @@
 #include "TouchPanel.h"
 
+#define DEBUG_TOUCH_CALIBRATED    //chestia asta ar trebui sa afiseze punctele de calibrare a touchului pe seriala
+
 Matrix matrix ;
 Coordinate  display ;
 Coordinate ScreenSample[3];
 Coordinate DisplaySample[3] = {{30,  45},
                                {250, 70},
                                {160,210}};
+                               
+extern Serial debug;                               
 
 Touch::Touch(SSD1289_LCD *lcd,SPI *spi, DigitalOut *cs, DigitalIn *irq)
 {
@@ -198,7 +202,25 @@
     return( retTHRESHOLD ) ;
 }
 
-void Touch::TouchPanel_Calibrate(void)
+bool Touch::getDisplayPoint(Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr )
+{
+    bool retTHRESHOLD =true ;
+    
+    if( matrixPtr->Divider != 0 )
+    {   
+        displayPtr->x = ( (matrixPtr->An * screenPtr->x) + (matrixPtr->Bn * screenPtr->y) + matrixPtr->Cn ) / matrixPtr->Divider ;  
+        displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) + (matrixPtr->En * screenPtr->y) + matrixPtr->Fn ) / matrixPtr->Divider ;
+    }
+    else
+    {
+        retTHRESHOLD = false;
+    }
+    
+    return(retTHRESHOLD);
+} 
+
+
+void Touch::TouchPanelCalibrate(void)
 {
     uint8_t i;
     Coordinate * Ptr;
@@ -212,10 +234,26 @@
         DrawCross(DisplaySample[i].x,DisplaySample[i].y);
         do
         {
-            Ptr=ReadAds7846();
+            Ptr=ReadAds7846();            
         }
         while( Ptr == (void*)0 );
-        ScreenSample[i].x= Ptr->x; ScreenSample[i].y= Ptr->y;
+        ScreenSample[i].x= Ptr->x; 
+        ScreenSample[i].y= Ptr->y;
+        #ifdef DEBUG_TOUCH_CALIBRATED
+        debug.printf("Touch-Point: x=[%d] | y=[%d]\r\n",Ptr->x,Ptr->y);
+        #endif
     }
     setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix );
 } 
+
+void Touch::TouchPanelExperimentalCalibrate(int *values)
+{
+    int i;
+    
+    for (i=0;i<3;i++)
+    {
+        ScreenSample[i].x = values[i*2];
+        ScreenSample[i].y = values[i*2+1];
+    }
+    setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix );
+}