/********************************************/
/*Display Touch Code                        */
/*                                          */
/*PIC32MX795F512L-80I/PF                    */
/********************************************/

#include "xc.h"
#include "MainBrain.h"

int data_x;
int data_y;

void Get_x(void)
{
  //////////////////////////////////////////////
 //      X AXIS                              //
/////////////////////////////////////////////
    TRISGbits.TRISG12 = 0;
    TRISBbits.TRISB3 = 0;
    TRISBbits.TRISB2 = 1;    
    TRISGbits.TRISG14 = 1;
    
    //select channel
    AD1CSSLbits.CSSL2 = 1;          //AN2
    
    //ADC reads the voltage on pin #23
    
    //RG12 drives, RB3 sinks, RG14 open
    PORTGbits.RG12 = 1; //YD- 96    
    PORTGbits.RG14 = 0; //XL- 95
    PORTBbits.RB3 = 0; // YU+ 22
    //       ADC on RB2 = XR+ 23
    
    AD1CHSbits.CH0SA = 2;               //AN2 = positive input
    AD1CHSbits.CH0NA = 0;               //VREFL = negative input
    
    AD1CON1bits.SAMP = 1;
    
    while (AD1CON1bits.DONE == 0);
    AD1CON1bits.ASAM = 0;

    data_x = ADC1BUF0;

    Binary2ASCIIBCD(data_x);
    
    //X-
    WriteChar(hchar, vchar, '(', black);
    
    //Hundreds
    WriteChar(hchar, vchar, d2, black);

    //Tens
    WriteChar(hchar, vchar, d1, black);

    //Ones
    WriteChar(hchar, vchar, d0, black);

    WriteChar(hchar, vchar, ',', black);
    
    //Deselect channel
    AD1CSSLbits.CSSL2 = 0;          //AN2
    
    return;
}

void Get_y(void)
{
////////////////////////////////////////////////
//      Y AXIS                              //
/////////////////////////////////////////////
    TRISGbits.TRISG12 = 1;
    TRISBbits.TRISB3 = 1;
    TRISBbits.TRISB2 = 0;    
    TRISGbits.TRISG14 = 0;
    
    //select channel
    AD1CSSLbits.CSSL3 = 1;          //AN3
    
    //ADC reads the voltage on pin #22
    
    //RG14 drives, RB2 sinks, RG12 open
    PORTGbits.RG12 = 0; //YD- 96    
    PORTGbits.RG14 = 1; //XL- 95
    //      ADC on RB3  //YU+ 22
    PORTBbits.RB2 = 0;  //XR+ 23
   
    //select channel
    AD1CHSbits.CH0SA = 3;               //AN3 = positive input
    AD1CHSbits.CH0NA = 0;               //VREFL = negative input
            
    AD1CON1bits.SAMP = 1;
    
    while (AD1CON1bits.DONE == 0);
    AD1CON1bits.ASAM = 0;

    data_y = ADC1BUF0;
    
    Binary2ASCIIBCD(data_y);
    
    //Y-
    //Hundreds
    WriteChar(hchar, vchar, d2, black);

    //Tens
    WriteChar(hchar, vchar, d1, black);

    //Ones
    WriteChar(hchar, vchar, d0, black);

    WriteChar(hchar, vchar, ')', black);
     
    //Deselect channel
    AD1CSSLbits.CSSL3 = 0;          //AN3
        
   return;
}


void TouchDev(void)
{
    int i;
    
  //////////////////////////////////////////////
 //      X AXIS                              //
/////////////////////////////////////////////
    TRISGbits.TRISG12 = 0;
    TRISBbits.TRISB3 = 0;
    TRISBbits.TRISB2 = 1;    
    TRISGbits.TRISG14 = 1;
    
    //ADC reads the voltage on pin #23
    
    //RG12 drives, RB3 sinks, RG14 open
    PORTGbits.RG12 = 1; //YD- 96    
    PORTGbits.RG14 = 0; //XL- 95
    PORTBbits.RB3 = 0; // YU+ 22
    //       ADC on RB2 = XR+ 23
    
    AD1CHSbits.CH0SA = 2;               //AN2 = positive input
   
    //wait for ADC
    Delay(2500);

    IFS1bits.AD1IF = 0;             //Clear interrupt flag
    
    AD1CON1bits.ASAM = 1;           //Auto start sampling for 31 TAD, then convert   

    while(!IFS1bits.AD1IF);         //Wait for conversion to complete
    AD1CON1bits.ASAM = 0;           //Stop sample/convert
  
    data_x = ADC1BUF0;
    
    IFS1bits.AD1IF = 0;

    Binary2ASCIIBCD(data_x);
    
    //X-
    WriteChar(hchar, vchar, '(', black);

    //Hundreds
    WriteChar(hchar, vchar, d2, black);

    //Tens
    WriteChar(hchar, vchar, d1, black);

    //Ones
    WriteChar(hchar, vchar, d0, black);

    WriteChar(hchar, vchar, ',', black);

////////////////////////////////////////////////
//      Y AXIS                              //
/////////////////////////////////////////////
    TRISGbits.TRISG12 = 1;
    TRISBbits.TRISB3 = 1;
    TRISBbits.TRISB2 = 0;    
    TRISGbits.TRISG14 = 0;
    
    //ADC reads the voltage on pin #22
    
    //RG14 drives, RB2 sinks, RG12 open
    PORTGbits.RG12 = 0; //YD- 96    
    PORTGbits.RG14 = 1; //XL- 95
    //      ADC on RB3  //YU+ 22
    PORTBbits.RB2 = 0;  //XR+ 23
   
    AD1CHSbits.CH0SA = 3;               //AN3 = positive input
    
    //wait for ADC
    Delay(2500);

    IFS1bits.AD1IF = 0;             //Clear interrupt flag
    
    AD1CON1bits.ASAM = 1;           //Auto start sampling for 31 TAD, then convert   

    while(!IFS1bits.AD1IF);         //Wait for conversion to complete
    AD1CON1bits.ASAM = 0;           //Stop sample/convert
  
    data_y = ADC1BUF0;
    
    IFS1bits.AD1IF = 0;

    Binary2ASCIIBCD(data_y);
    
    //Y-
    //Hundreds
    WriteChar(hchar, vchar, d2, black);

    //Tens
    WriteChar(hchar, vchar, d1, black);

    //Ones
    WriteChar(hchar, vchar, d0, black);

    WriteChar(hchar, vchar, ')', black);

//    if(data_x < 122)
//    {
//        data_x = 122;
//    }
//    data_x = (data_x - 122) / 1.725;
//    
//    if(data_y < 142)
//    {
//        data_y = 142;
//    }
//    data_y = (data_y - 142)/2.43;
    
//    HX8357B_CASET(data_x, data_x + 1);    
//    HX8357B_RASET(data_y, data_y + 1);
//            
//    HX8357B_RAMWR();
//            
//    //Select Display (/CS)    
//    PORTDbits.RD11 = 0;
//            
//    for(i=0;i<=25; i++)
//    {
//        PMDIN = ~back_color;
//        while(PMMODEbits.BUSY == 1);
//    }
//    
//    //Select Display (/CS)    
//    PORTDbits.RD11 = 1;
   
    //Delay
    Delay(2500);
    
    return;
}
