TP C++.pdf

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

Question 1

1. qu’es ASCII

2. la differance entre ASCII simple et ASCII étendu

3. les équivalents pour les codes :

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

Question 2

1. Rôle de la ligne 35

La ligne char customKey = customKeypad.getKey()-48; convertit les caractères numériques en leurs valeurs numériques en soustrayant 48 (le code ASCII de '0'). Par exemple, lorsqu'on appuie sur la touche '1' (code ASCII 49), on obtient la valeur numérique 1.

2. Codes affichés par touche

Voici les correspondances selon le code :

3. Modification pour l'effacement de l'écran

void ascii()
{
    char customKey = customKeypad.getKey()-48;
    
    // Ajout de la fonction d'effacement
    if(customKey == ('C'-48)) {  // Si la touche C est pressée
        Tft.fillScreen();        // Efface l'écran
        PosX = 0;                // Réinitialise la position X
        return;
    }
    
    // Code existant pour l'affichage des caractères
    if((customKey>=0)&&(customKey<10))
    {
        Tft.drawNumber(customKey,PosX,1,3,CYAN);
        PosX=PosX+20;    
    }
    //  reste du code 
}

La fonction ascii() fait plusieurs choses :

</aside>

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

Question 3

1. Déclaration des variables

int PosY = 0;  // Variable globale pour la position verticale

Ces variables sont utilisées pour garder trace de la position du curseur sur l'écran. PosX pour la position horizontale et PosY pour la position verticale.

2. Fonction principale ascii()

void ascii() {
    char customKey = customKeypad.getKey();
    if (customKey) {
        // Affichage du caractère à la position actuelle
        Tft.drawChar(PosX, PosY, customKey, WHITE, BLACK, 2);
        PosX += 12;  // Espacement horizontal entre les caractères
        
        // Vérification si on atteint le bord droit (240 pixels)
        if (PosX >= 240) {
            PosX = 0;      // Retour à gauche
            PosY += 16;    // Passage à la ligne suivante
        }
        
        // Si on atteint le bas de l'écran (320 pixels)
        if (PosY >= 320) {
            PosY = 0;    // Retour en haut de l'écran
        }
    }
}

void ascii() {
    char customKey = customKeypad.getKey();
    if (customKey) {
        Tft.drawChar(PosX, PosY, customKey, WHITE, BLACK, 2);
        PosX += 12;  // Déplacement horizontal

Cette partie :

3. Gestion du changement de ligne

if (PosX >= 240) {
            PosX = 0;
            PosY += 16;
        }

Cette condition vérifie si on atteint le bord droit de l'écran (240 pixels). Si c'est le cas :

4. Gestion du bas de l'écran

if (PosY >= 320) {
            PosY = 0;
        }
    }
}

Cette dernière condition vérifie si on atteint le bas de l'écran (320 pixels). Si c'est le cas, on retourne en haut de l'écran.

</aside>

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

Question 4

Voici l'explication du code nécessaire pour afficher les prénoms de la classe :

1. Déclaration du tableau

Il faut d'abord déclarer un tableau multidimensionnel pour stocker les prénoms. Par exemple :

char prenoms[][20] = {"Jean", "Marie", "Pierre", "Sophie"};  // Ajustez avec les vrais prénoms
int nbPrenoms = 4;  // Nombre total de prénoms
int indexPrenom = 0;  // Index du prénom actuel

2. Fonction principale

La fonction doit :

void ascii() {
    char customKey = customKeypad.getKey();
    
    if (customKey == '+') {
        Tft.fillScreen();  // Efface l'écran
        Tft.drawString(prenoms[indexPrenom], 0, 0);  // Affiche le prénom en haut à gauche
        
        // Passe au prénom suivant
        indexPrenom = (indexPrenom + 1) % nbPrenoms;
    }
}

Cette implémentation permet de faire défiler les prénoms un par un à chaque appui sur la touche "+", avec un retour au début une fois tous les prénoms affichés.

</aside>

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

Question 5

voici le programme:

void ascii() {
    char customKey = customKeypad.getKey()-48;
    
    if (customKey >= 0 && customKey < 16) {  // Vérifie si la touche est valide (0-15)
        Tft.fillScreen();  // Efface l'écran
        
        switch(customKey) {
            case 0:  // Cercle
                Tft.drawCircle(120, 160, 50, RED);
                break;
            case 1:  // Carré
                Tft.drawRectangle(70, 110, 170, 210, BLUE);
                break;
            case 2:  // Triangle
                Tft.drawLine(120, 110, 70, 210, GREEN);
                Tft.drawLine(70, 210, 170, 210, GREEN);
                Tft.drawLine(170, 210, 120, 110, GREEN);
                break;
            case 3:  // Rectangle
                Tft.drawRectangle(60, 130, 180, 190, YELLOW);
                break;
            case 4:  // Cercle plein
                Tft.fillCircle(120, 160, 40, CYAN);
                break;
            case 5:  // Carré plein
                Tft.fillRectangle(80, 120, 160, 200, MAGENTA);
                break;
            case 6:  // Ligne horizontale
                Tft.drawLine(40, 160, 200, 160, WHITE);
                break;
            case 7:  // Ligne verticale
                Tft.drawLine(120, 80, 120, 240, RED);
                break;
            case 8:  // Croix
                Tft.drawLine(70, 110, 170, 210, BLUE);
                Tft.drawLine(170, 110, 70, 210, BLUE);
                break;
            case 9:  // Étoile
                for(int i = 0; i < 8; i++) {
                    float angle = i * PI / 4;
                    Tft.drawLine(120, 160,
                        120 + cos(angle) * 50,
                        160 + sin(angle) * 50,
                        GREEN);
                }
                break;
            // Ajoutez d'autres cas pour les touches A-F...
        }
    }
}

1. Structure de base

2. Effacement et dessin

3. Principales fonctions de dessin utilisées

4. Coordonnées

5. Couleurs disponibles

Cette implémentation permet d'avoir une interface interactive où chaque touche déclenche l'affichage d'une nouvelle figure géométrique unique sur l'écran.

</aside>

<aside> <img src="/icons/arrow-right_lightgray.svg" alt="/icons/arrow-right_lightgray.svg" width="40px" />

</aside>