Bonjour, je bloque pour utiliser le Touch Screen System d'un écran tactile possédant un microcontrôleur Picaso SGC, pour information j'utilise le compilateur CCS.

Mon programme ci dessous me permet d'afficher un fond d'écran rouge, au centre de celui-ci un cercle plein en blanc, et au centre en haut un cercle plein en vert après une attente de 2 secondes. J'aimerais que le cercle vert s'affiche uniquement si j'appuie sur le cercle blanc et donc remplacer la tempo de 2 secondes par :
SI j'appuie dans la zone du cercle blanc
Alors Afficher le cercle vert

Pour ce programme j'utilise les interruptions. Dans les interruptions lorsque le buffer (le registre) est plein, je regarde si son contenu est égale à 06Hex qui correspond à un accusé de réception (ACK) et je ne fais aucune actions tant que je n'ai pas reçu l'ACK (on veut voir cela dans mon programme MAIN, après chaque action j'attend l'ACK, si je ne l'ai pas reçu, je ne fais rien...).

Important : A savoir les commandes de printf sont inversées donc printf("%c") : envoi une information de type nombre
printf("%i"), ou printf("%d")... : envoi une information de type caractère


Lien vers la doc des commandes du microcontrôleur Picaso SGC :
https://old.4dsystems.com.au/downloa...S-SIS-rev6.pdf

Cette documentation nous informe :
Page 14 :
La commande pour autorisé la commande Touch Control, qui s'écrirait dans mon programme de la façon suivante :
printf("%c%c%c"),0x59,0x05,0x0 0); // Mais devrais la placer dans mon programme ?

Page 46 à 49 :
Informations concernant le Touch Control.
Ici mon problème est je ne sais pas quelle commande utilisée entre "Get Touch Coordinates" et "Detect Touch Region" et comment les intégrer dans ma partie interruptions puis après dans mon MAIN.

Code:
#include <18f4620.h>
#use delay (crystal=20MHz) // preprocessor directive (specifies clock type and speed)
#use rs232 (baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) 

//Init Screen
unsigned int8 ACK=0;
unsigned int8 dataRX=0;
unsigned int8 autobaud=0x55;//Letter U = 0x55 (Autobaud)
unsigned int8 clearScreen=0x45;//Clear the screen

/*----------------------Background-------------------------*/
unsigned int8 replaceBackgroundColor=0x42;//Set a background color command
unsigned int8 red_MSB=0xf0, red_LSB=0x00;//Red color
/*----------------------DRAWINGS-------------------------*/
unsigned int8 circle=0x43;//Circle command
unsigned int8 radius_MSB=0x00, radius_LSB=0x23;//Radius of the circles
//Circle 1
unsigned int8 x1_MSB=0x00,x1_LSB=0x7e,y1_MSB=0x00,y1_LSB=0x99;//Location of the circle 1
unsigned int8 color_MSB=0xff,color_LSB=0x0f;//Color of the circle 1
//Circle 2
unsigned int8 x2_MSB=0x00,x2_LSB=0x7e,y2_MSB=0x00,y2_LSB=0x2f;//Location of the circle 2
unsigned int8 color2_MSB=0x0f,color2_LSB=0x00;//Color of the circle 2

// MAIN PROGRAM//
void main()

{
   /*----------------------ENABLE INTERUPTS-------------------------*/
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RDA);
   
   /*----------------------INIT-------------------------*/   
   output_LOW(PIN_C5); //Set 0 on reset PIN
   delay_ms(500);// Init delay minimum to respect
   output_HIGH(PIN_C5);// Set 1 on reset PIN 
   delay_ms(1500);// Waiting of the end of the init
   printf("%c",autobaud);//Send Autobaud command (Set the rate)
   delay_ms(1000);
   while(ACK!=1); ACK = 0; // To check if the buffer is in the next step
   printf("%c",clearScreen); //Clear the Screen 
   while(ACK!=1); ACK = 0; // To check if the buffer is in the next step
     
     
   /*-----------------------BACKGROUND-------------------------*/
   printf("%c%c%c",replaceBackgroundColor,red_MSB,red_LSB);//set a red background
   while(ACK!=1); ACK = 0; // To check if the buffer is in the next step
   
   
   while(TRUE)
   {
      /*-----------------------DRAWINGS-------------------------*/
      //Set a white full circle in the middle of the screen
      printf("%c%c%c%c%c%c%c%c%c",circle,x1_MSB,x1_LSB,y1_MSB,y1_LSB,radius_MSB,radius_LSB,color_MSB,color_LSB);
      while(ACK!=1); ACK = 0; // To check if the buffer is in the next step
      
      
      delay_ms(2000);//To replace the interupt of the touch screen control
      
            
      //Set a green full circle in the top and in the middle of the screen
      printf("%c%c%c%c%c%c%c%c%c",circle,x2_MSB,x2_LSB,y2_MSB,y2_LSB,radius_MSB,radius_LSB,color2_MSB,color2_LSB);
      while(ACK!=1); ACK = 0; // To check if the buffer is in the next step
     
   }//End of the while(TRUE)
   
}//End of the main 



// INTERUPT 
#INT_RDA
void interupt()
{
   if(kbhit()) //Return TRUE when a character is received in the buffer (Buffer is full)
   {
      dataRX=getc();
      
      if (dataRX==0x06)//ACK == good return 
         {
            ACK=1;
         }
   }
}