Version avec sortie ABCD sur même connecteur
Dependencies: SDFileSystemDMA mbed
Fork of DmdFullRGB_0_1 by
SD.h@0:d5f38b9d7c7a, 2017-12-02 (annotated)
- Committer:
- Aganyte
- Date:
- Sat Dec 02 12:27:01 2017 +0000
- Revision:
- 0:d5f38b9d7c7a
- Child:
- 1:353c1902483f
DMD-Clock 128x32 RGB version 0.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Aganyte | 0:d5f38b9d7c7a | 1 | /* Librairie de gestion de la carte SD d'un DMD RGB 128x32 pixels |
Aganyte | 0:d5f38b9d7c7a | 2 | * - 256 Couleurs mode RGB332 et Monochrome - |
Aganyte | 0:d5f38b9d7c7a | 3 | * decembre 2017 par Christophe Girardot Aka Aganyte |
Aganyte | 0:d5f38b9d7c7a | 4 | */ |
Aganyte | 0:d5f38b9d7c7a | 5 | |
Aganyte | 0:d5f38b9d7c7a | 6 | #define SPI_CLOCK_HZ ( 25 * 1000000 ) // Vitesse de communication SPI 25 MHz |
Aganyte | 0:d5f38b9d7c7a | 7 | |
Aganyte | 0:d5f38b9d7c7a | 8 | SDFileSystem sd(MOSI, MISO, SCLK, CS, "sd", SPI_CLOCK_HZ); // Ouverture de la liaison SPI |
Aganyte | 0:d5f38b9d7c7a | 9 | |
Aganyte | 0:d5f38b9d7c7a | 10 | FileHandle* file; // Création d'un objet pour la gestion du fichier de donnée |
Aganyte | 0:d5f38b9d7c7a | 11 | FileHandle* Index; // Création d'un objet pour la gestion du fichier d'index |
Aganyte | 0:d5f38b9d7c7a | 12 | |
Aganyte | 0:d5f38b9d7c7a | 13 | char FileName[13]; // Stockage du nom du fichier actuellement en cours de lecture 8 Caractères + ".BIN" + "\0" |
Aganyte | 0:d5f38b9d7c7a | 14 | char Character[1]; // Stockage d'un caractère (doit être un tableau) |
Aganyte | 0:d5f38b9d7c7a | 15 | char Line_Buffer[17]; // Stockage d'une ligne de 16 caractères + "\0" |
Aganyte | 0:d5f38b9d7c7a | 16 | |
Aganyte | 0:d5f38b9d7c7a | 17 | /* Fonction qui vide une chaine de caractère |
Aganyte | 0:d5f38b9d7c7a | 18 | * |
Aganyte | 0:d5f38b9d7c7a | 19 | */ |
Aganyte | 0:d5f38b9d7c7a | 20 | void Flush_ascii_buffer(char *buffer) |
Aganyte | 0:d5f38b9d7c7a | 21 | { |
Aganyte | 0:d5f38b9d7c7a | 22 | unsigned int count = 0; |
Aganyte | 0:d5f38b9d7c7a | 23 | while(buffer[count] != 0) |
Aganyte | 0:d5f38b9d7c7a | 24 | { |
Aganyte | 0:d5f38b9d7c7a | 25 | buffer[count]=0; |
Aganyte | 0:d5f38b9d7c7a | 26 | count++; |
Aganyte | 0:d5f38b9d7c7a | 27 | } |
Aganyte | 0:d5f38b9d7c7a | 28 | } |
Aganyte | 0:d5f38b9d7c7a | 29 | |
Aganyte | 0:d5f38b9d7c7a | 30 | /* Fonction de lecture d'un fichier de donnée (les données lues son placées dans le buffer de lecture) |
Aganyte | 0:d5f38b9d7c7a | 31 | * Renvois le nombre de caractères lu, 0 si rien à lire |
Aganyte | 0:d5f38b9d7c7a | 32 | */ |
Aganyte | 0:d5f38b9d7c7a | 33 | unsigned int read4KB() |
Aganyte | 0:d5f38b9d7c7a | 34 | { |
Aganyte | 0:d5f38b9d7c7a | 35 | unsigned int readed = 0; |
Aganyte | 0:d5f38b9d7c7a | 36 | |
Aganyte | 0:d5f38b9d7c7a | 37 | if (file != NULL) |
Aganyte | 0:d5f38b9d7c7a | 38 | readed = file->read(Display_Ram, 4096); |
Aganyte | 0:d5f38b9d7c7a | 39 | else |
Aganyte | 0:d5f38b9d7c7a | 40 | pc.printf("Impossible de lire le fichier\n"); |
Aganyte | 0:d5f38b9d7c7a | 41 | |
Aganyte | 0:d5f38b9d7c7a | 42 | return(readed); |
Aganyte | 0:d5f38b9d7c7a | 43 | } |
Aganyte | 0:d5f38b9d7c7a | 44 | |
Aganyte | 0:d5f38b9d7c7a | 45 | /* Fonction de lecture d'un fichier de donnée de scrolling (les données lues son placées dans le buffer du scrolling) |
Aganyte | 0:d5f38b9d7c7a | 46 | * Renvois le nombre de caractères lu, 0 si rien à lire |
Aganyte | 0:d5f38b9d7c7a | 47 | */ |
Aganyte | 0:d5f38b9d7c7a | 48 | unsigned int read40KB() |
Aganyte | 0:d5f38b9d7c7a | 49 | { |
Aganyte | 0:d5f38b9d7c7a | 50 | unsigned int readed = 0; |
Aganyte | 0:d5f38b9d7c7a | 51 | |
Aganyte | 0:d5f38b9d7c7a | 52 | if (file != NULL) |
Aganyte | 0:d5f38b9d7c7a | 53 | readed = file->read(Scrolling_Buffer, 40960); |
Aganyte | 0:d5f38b9d7c7a | 54 | else |
Aganyte | 0:d5f38b9d7c7a | 55 | pc.printf("Impossible de lire le fichier\n"); |
Aganyte | 0:d5f38b9d7c7a | 56 | |
Aganyte | 0:d5f38b9d7c7a | 57 | return(readed); |
Aganyte | 0:d5f38b9d7c7a | 58 | } |
Aganyte | 0:d5f38b9d7c7a | 59 | |
Aganyte | 0:d5f38b9d7c7a | 60 | /* Fonction qui recherche un caractère dans le fichier index.txt |
Aganyte | 0:d5f38b9d7c7a | 61 | * ou revient au début si fin du fichier |
Aganyte | 0:d5f38b9d7c7a | 62 | */ |
Aganyte | 0:d5f38b9d7c7a | 63 | void Search_Char(char ThisChar) |
Aganyte | 0:d5f38b9d7c7a | 64 | { |
Aganyte | 0:d5f38b9d7c7a | 65 | char Char[1]; |
Aganyte | 0:d5f38b9d7c7a | 66 | if(Index==NULL) |
Aganyte | 0:d5f38b9d7c7a | 67 | Index = sd.open("index.TXT", O_RDONLY); // Si besoin, première ouverture du fichier index |
Aganyte | 0:d5f38b9d7c7a | 68 | while( Char[0] != ThisChar ) // Chercher le signe = |
Aganyte | 0:d5f38b9d7c7a | 69 | { |
Aganyte | 0:d5f38b9d7c7a | 70 | Index->read(Char, 1); // lire un caractère |
Aganyte | 0:d5f38b9d7c7a | 71 | if(Char[0] == '#')// si fin de fichier |
Aganyte | 0:d5f38b9d7c7a | 72 | { |
Aganyte | 0:d5f38b9d7c7a | 73 | pc.printf("Fin du fichier index.txt\n"); |
Aganyte | 0:d5f38b9d7c7a | 74 | delete Index; // Fermer le fichier |
Aganyte | 0:d5f38b9d7c7a | 75 | Index = sd.open("index.TXT", O_RDONLY); // ré-ouvrir le fichier index |
Aganyte | 0:d5f38b9d7c7a | 76 | } |
Aganyte | 0:d5f38b9d7c7a | 77 | } |
Aganyte | 0:d5f38b9d7c7a | 78 | } |
Aganyte | 0:d5f38b9d7c7a | 79 | |
Aganyte | 0:d5f38b9d7c7a | 80 | /* Fonction qui lit le fichier timestamp.txt |
Aganyte | 0:d5f38b9d7c7a | 81 | */ |
Aganyte | 0:d5f38b9d7c7a | 82 | void Read_Timestamp() |
Aganyte | 0:d5f38b9d7c7a | 83 | { |
Aganyte | 0:d5f38b9d7c7a | 84 | unsigned char try_read = 0; |
Aganyte | 0:d5f38b9d7c7a | 85 | FileHandle* Timestamp; |
Aganyte | 0:d5f38b9d7c7a | 86 | while(1) |
Aganyte | 0:d5f38b9d7c7a | 87 | { |
Aganyte | 0:d5f38b9d7c7a | 88 | delete Timestamp; |
Aganyte | 0:d5f38b9d7c7a | 89 | Timestamp = sd.open("time.TXT", O_RDONLY); // ouverture du fichier timestamp.TXT |
Aganyte | 0:d5f38b9d7c7a | 90 | if(Timestamp != NULL) |
Aganyte | 0:d5f38b9d7c7a | 91 | { |
Aganyte | 0:d5f38b9d7c7a | 92 | pc.printf("Fichier time.txt ouvert\n"); |
Aganyte | 0:d5f38b9d7c7a | 93 | break; // Si le fichier est bien ouvert, quitter |
Aganyte | 0:d5f38b9d7c7a | 94 | } |
Aganyte | 0:d5f38b9d7c7a | 95 | try_read++; |
Aganyte | 0:d5f38b9d7c7a | 96 | if(try_read > 10) { // Si le fichier n'est pas ouvert après 10 tentative quitter |
Aganyte | 0:d5f38b9d7c7a | 97 | pc.printf("Plus de 10 tentatives de lecture du fichier -> probleme sur le fichier time.txt\n"); |
Aganyte | 0:d5f38b9d7c7a | 98 | break; |
Aganyte | 0:d5f38b9d7c7a | 99 | } |
Aganyte | 0:d5f38b9d7c7a | 100 | } |
Aganyte | 0:d5f38b9d7c7a | 101 | |
Aganyte | 0:d5f38b9d7c7a | 102 | Timestamp->read(Line_Buffer, 10); // lire 16 caractères |
Aganyte | 0:d5f38b9d7c7a | 103 | Actual_timestamp = atol(Line_Buffer) + 3600; // Convertion de la valeur de Ascii vers un entier et rajouter une heure pour la France |
Aganyte | 0:d5f38b9d7c7a | 104 | pc.printf("lecture de %d dans le fichier time.TXT\n",Actual_timestamp); |
Aganyte | 0:d5f38b9d7c7a | 105 | Flush_ascii_buffer(Line_Buffer); // Vider le tampon |
Aganyte | 0:d5f38b9d7c7a | 106 | delete Timestamp; // Fermer le fichier |
Aganyte | 0:d5f38b9d7c7a | 107 | } |
Aganyte | 0:d5f38b9d7c7a | 108 | |
Aganyte | 0:d5f38b9d7c7a | 109 | /* Fonction d'ouverture d'un fichier sur la carte SD |
Aganyte | 0:d5f38b9d7c7a | 110 | * avec 10 tentatives de lecture avant de déclarer un problème |
Aganyte | 0:d5f38b9d7c7a | 111 | */ |
Aganyte | 0:d5f38b9d7c7a | 112 | void Try_Open_File() |
Aganyte | 0:d5f38b9d7c7a | 113 | { |
Aganyte | 0:d5f38b9d7c7a | 114 | unsigned char try_read = 0; |
Aganyte | 0:d5f38b9d7c7a | 115 | while(1) |
Aganyte | 0:d5f38b9d7c7a | 116 | { |
Aganyte | 0:d5f38b9d7c7a | 117 | delete file; // effacer l'objet file |
Aganyte | 0:d5f38b9d7c7a | 118 | file = sd.open(FileName, O_RDONLY); |
Aganyte | 0:d5f38b9d7c7a | 119 | if(file != NULL) |
Aganyte | 0:d5f38b9d7c7a | 120 | break; // Si le fichier est bien ouvert, quitter |
Aganyte | 0:d5f38b9d7c7a | 121 | try_read++; |
Aganyte | 0:d5f38b9d7c7a | 122 | if(try_read > 10) // Si le fichier n'est pas ouvert après 10 tentative quitter |
Aganyte | 0:d5f38b9d7c7a | 123 | { |
Aganyte | 0:d5f38b9d7c7a | 124 | pc.printf("Plus de 10 tentatives de lecture du fichier -> probleme sur le fichier\n"); |
Aganyte | 0:d5f38b9d7c7a | 125 | break; |
Aganyte | 0:d5f38b9d7c7a | 126 | } |
Aganyte | 0:d5f38b9d7c7a | 127 | } |
Aganyte | 0:d5f38b9d7c7a | 128 | } |
Aganyte | 0:d5f38b9d7c7a | 129 | |
Aganyte | 0:d5f38b9d7c7a | 130 | /* Fonction de lecture d'une animation présente sur la carte SD |
Aganyte | 0:d5f38b9d7c7a | 131 | * Attention, le nom du fichier à lire doit déjà être en mémoire |
Aganyte | 0:d5f38b9d7c7a | 132 | */ |
Aganyte | 0:d5f38b9d7c7a | 133 | void Animation_SD() |
Aganyte | 0:d5f38b9d7c7a | 134 | { |
Aganyte | 0:d5f38b9d7c7a | 135 | for(unsigned char count = 0; count < Replay; count++) // Jouer l'animation en fonction du nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 136 | { |
Aganyte | 0:d5f38b9d7c7a | 137 | Try_Open_File(); // Essayer d'ouvrir le fichier |
Aganyte | 0:d5f38b9d7c7a | 138 | int readed = 0; |
Aganyte | 0:d5f38b9d7c7a | 139 | unsigned int image = 0; |
Aganyte | 0:d5f38b9d7c7a | 140 | while(1) |
Aganyte | 0:d5f38b9d7c7a | 141 | { |
Aganyte | 0:d5f38b9d7c7a | 142 | // Charger une trame dans la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 143 | readed = read4KB(); |
Aganyte | 0:d5f38b9d7c7a | 144 | // détection de la fin de l'animation |
Aganyte | 0:d5f38b9d7c7a | 145 | if(readed == 0) |
Aganyte | 0:d5f38b9d7c7a | 146 | break; |
Aganyte | 0:d5f38b9d7c7a | 147 | // détection d'un problème de lecture |
Aganyte | 0:d5f38b9d7c7a | 148 | if(readed == -1) |
Aganyte | 0:d5f38b9d7c7a | 149 | { |
Aganyte | 0:d5f38b9d7c7a | 150 | pc.printf("Erreur de lecture du fichier %s apres %d image(s)\n",FileName,image); |
Aganyte | 0:d5f38b9d7c7a | 151 | break; |
Aganyte | 0:d5f38b9d7c7a | 152 | } |
Aganyte | 0:d5f38b9d7c7a | 153 | // Affichage de la trame avec gestion de la vitesse |
Aganyte | 0:d5f38b9d7c7a | 154 | for(unsigned char count = 0; count < (10-Speed); count++) |
Aganyte | 0:d5f38b9d7c7a | 155 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 156 | // Incrémenter le compteur d'image |
Aganyte | 0:d5f38b9d7c7a | 157 | image++; |
Aganyte | 0:d5f38b9d7c7a | 158 | } |
Aganyte | 0:d5f38b9d7c7a | 159 | } |
Aganyte | 0:d5f38b9d7c7a | 160 | pc.printf("fin de l'animation %s\n\n",FileName); |
Aganyte | 0:d5f38b9d7c7a | 161 | } |
Aganyte | 0:d5f38b9d7c7a | 162 | |
Aganyte | 0:d5f38b9d7c7a | 163 | /* Fonction de lecture d'une commande d'animation dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 164 | * |
Aganyte | 0:d5f38b9d7c7a | 165 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 166 | * |
Aganyte | 0:d5f38b9d7c7a | 167 | * >Animation FileName=test0000.BIN Repeat=2 Speed=8 |
Aganyte | 0:d5f38b9d7c7a | 168 | */ |
Aganyte | 0:d5f38b9d7c7a | 169 | void Read_Animation() |
Aganyte | 0:d5f38b9d7c7a | 170 | { |
Aganyte | 0:d5f38b9d7c7a | 171 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 172 | Index->read(FileName, 12); // lire le nom de fichier |
Aganyte | 0:d5f38b9d7c7a | 173 | |
Aganyte | 0:d5f38b9d7c7a | 174 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 175 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 176 | Replay = Character[0]-'0'; // Stocker le nombre de lecture à effectuer |
Aganyte | 0:d5f38b9d7c7a | 177 | |
Aganyte | 0:d5f38b9d7c7a | 178 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 179 | Index->read(Character, 1); // Lire la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 180 | Speed = Character[0]-'0'; // stocker la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 181 | |
Aganyte | 0:d5f38b9d7c7a | 182 | // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 183 | pc.printf("Lecture de %s\n",FileName); |
Aganyte | 0:d5f38b9d7c7a | 184 | pc.printf("Nombre de repetition du fichier : %d\n",Replay); |
Aganyte | 0:d5f38b9d7c7a | 185 | pc.printf("Vitesse de lecture : %d\n",Speed); |
Aganyte | 0:d5f38b9d7c7a | 186 | |
Aganyte | 0:d5f38b9d7c7a | 187 | Animation_SD(); // Lancer l'animation |
Aganyte | 0:d5f38b9d7c7a | 188 | } |
Aganyte | 0:d5f38b9d7c7a | 189 | |
Aganyte | 0:d5f38b9d7c7a | 190 | /* Fonction de lecture d'une commande Image dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 191 | * |
Aganyte | 0:d5f38b9d7c7a | 192 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 193 | * |
Aganyte | 0:d5f38b9d7c7a | 194 | * >Animation FileName=test0000.BIN time=2 |
Aganyte | 0:d5f38b9d7c7a | 195 | */ |
Aganyte | 0:d5f38b9d7c7a | 196 | void Image_SD() |
Aganyte | 0:d5f38b9d7c7a | 197 | { |
Aganyte | 0:d5f38b9d7c7a | 198 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 199 | Index->read(FileName, 12); // lire le nom de fichier |
Aganyte | 0:d5f38b9d7c7a | 200 | |
Aganyte | 0:d5f38b9d7c7a | 201 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 202 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 203 | Sleep = Character[0]-'0'; // Stocker le temps de lecture |
Aganyte | 0:d5f38b9d7c7a | 204 | |
Aganyte | 0:d5f38b9d7c7a | 205 | // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 206 | pc.printf("Affichage de l'image %s pendant %d secondes\n\n",FileName,Sleep); |
Aganyte | 0:d5f38b9d7c7a | 207 | |
Aganyte | 0:d5f38b9d7c7a | 208 | Try_Open_File(); // Essayer d'ouvrir le fichier |
Aganyte | 0:d5f38b9d7c7a | 209 | |
Aganyte | 0:d5f38b9d7c7a | 210 | read4KB(); // Charger une trame dans la mémoire vidéo RGB |
Aganyte | 0:d5f38b9d7c7a | 211 | |
Aganyte | 0:d5f38b9d7c7a | 212 | Image(Sleep); // Afficher l'image |
Aganyte | 0:d5f38b9d7c7a | 213 | } |
Aganyte | 0:d5f38b9d7c7a | 214 | |
Aganyte | 0:d5f38b9d7c7a | 215 | /* Fonction de lecture d'une commande de texte dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 216 | * |
Aganyte | 0:d5f38b9d7c7a | 217 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 218 | * |
Aganyte | 0:d5f38b9d7c7a | 219 | * >Write Temp=5 L1=XXXXXXXXXXXXXXXX L2=XXXXXXXXXXXXXXXX L3=XXXXXXXXXXXXXXXX L4=XXXXXXXXXXXXXXXX |
Aganyte | 0:d5f38b9d7c7a | 220 | */ |
Aganyte | 0:d5f38b9d7c7a | 221 | void Read_Text() |
Aganyte | 0:d5f38b9d7c7a | 222 | { |
Aganyte | 0:d5f38b9d7c7a | 223 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 224 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 225 | Sleep = Character[0]-'0'; // Stocker le temps d'affichage |
Aganyte | 0:d5f38b9d7c7a | 226 | |
Aganyte | 0:d5f38b9d7c7a | 227 | pc.printf("Affichage d'un texte pendant %d secondes\n",Sleep); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 228 | |
Aganyte | 0:d5f38b9d7c7a | 229 | // Placer les 4 lignes dans le buffer vidéo monochrome |
Aganyte | 0:d5f38b9d7c7a | 230 | for(unsigned char count = 1; count<5; count++) |
Aganyte | 0:d5f38b9d7c7a | 231 | { |
Aganyte | 0:d5f38b9d7c7a | 232 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 233 | Index->read(Line_Buffer, 16); // lire la ligne |
Aganyte | 0:d5f38b9d7c7a | 234 | print_4_16(Line_Buffer,count); // Ecrire la ligne dans le buffer vidéo monochrome |
Aganyte | 0:d5f38b9d7c7a | 235 | pc.printf("Ligne %d = %s\n",count,Line_Buffer); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 236 | } |
Aganyte | 0:d5f38b9d7c7a | 237 | pc.printf("\n"); |
Aganyte | 0:d5f38b9d7c7a | 238 | Refresh_in_seconds(); // Rafraichir l'écran pendant x secondes |
Aganyte | 0:d5f38b9d7c7a | 239 | } |
Aganyte | 0:d5f38b9d7c7a | 240 | |
Aganyte | 0:d5f38b9d7c7a | 241 | /* Fonction de lecture d'une commande qui superpose une image et du texte dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 242 | * |
Aganyte | 0:d5f38b9d7c7a | 243 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 244 | * |
Aganyte | 0:d5f38b9d7c7a | 245 | * >Score FileName=test0000.BIN Temp=5 L1=XXXXXXXXXXXXXXXX L2=XXXXXXXXXXXXXXXX L3=XXXXXXXXXXXXXXXX L4=XXXXXXXXXXXXXXXX |
Aganyte | 0:d5f38b9d7c7a | 246 | */ |
Aganyte | 0:d5f38b9d7c7a | 247 | void Score_SD() |
Aganyte | 0:d5f38b9d7c7a | 248 | { |
Aganyte | 0:d5f38b9d7c7a | 249 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 250 | Index->read(FileName, 12); // lire le nom de fichier |
Aganyte | 0:d5f38b9d7c7a | 251 | |
Aganyte | 0:d5f38b9d7c7a | 252 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 253 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 254 | Sleep = Character[0]-'0'; // Stocker le temps d'affichage |
Aganyte | 0:d5f38b9d7c7a | 255 | |
Aganyte | 0:d5f38b9d7c7a | 256 | pc.printf("Affichage d'un score pendant %d secondes\n",Sleep); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 257 | |
Aganyte | 0:d5f38b9d7c7a | 258 | // Placer les 4 lignes dans le buffer vidéo monochrome |
Aganyte | 0:d5f38b9d7c7a | 259 | for(unsigned char count = 1; count<5; count++) |
Aganyte | 0:d5f38b9d7c7a | 260 | { |
Aganyte | 0:d5f38b9d7c7a | 261 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 262 | Index->read(Line_Buffer, 16); // lire la ligne |
Aganyte | 0:d5f38b9d7c7a | 263 | print_4_16(Line_Buffer,count); // Ecrire la ligne dans le buffer vidéo monochrome |
Aganyte | 0:d5f38b9d7c7a | 264 | pc.printf("Ligne %d = %s\n",count,Line_Buffer); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 265 | } |
Aganyte | 0:d5f38b9d7c7a | 266 | pc.printf("\n"); |
Aganyte | 0:d5f38b9d7c7a | 267 | Try_Open_File(); // Essayer d'ouvrir le fichier |
Aganyte | 0:d5f38b9d7c7a | 268 | |
Aganyte | 0:d5f38b9d7c7a | 269 | read4KB(); // Charger une trame dans la mémoire vidéo RGB |
Aganyte | 0:d5f38b9d7c7a | 270 | |
Aganyte | 0:d5f38b9d7c7a | 271 | Convert_Mono_To_RGB(); // Convertir le buffer mono avec superposition dans le buffer couleur |
Aganyte | 0:d5f38b9d7c7a | 272 | |
Aganyte | 0:d5f38b9d7c7a | 273 | Image(Sleep); // Afficher l'image |
Aganyte | 0:d5f38b9d7c7a | 274 | |
Aganyte | 0:d5f38b9d7c7a | 275 | //Refresh_in_seconds(); |
Aganyte | 0:d5f38b9d7c7a | 276 | } |
Aganyte | 0:d5f38b9d7c7a | 277 | |
Aganyte | 0:d5f38b9d7c7a | 278 | /* Fonction de lecture d'une commande de réglage des couleurs |
Aganyte | 0:d5f38b9d7c7a | 279 | * |
Aganyte | 0:d5f38b9d7c7a | 280 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 281 | * |
Aganyte | 0:d5f38b9d7c7a | 282 | * >SetColor R=1 G=0 B=0 |
Aganyte | 0:d5f38b9d7c7a | 283 | */ |
Aganyte | 0:d5f38b9d7c7a | 284 | void Set_Color() |
Aganyte | 0:d5f38b9d7c7a | 285 | { |
Aganyte | 0:d5f38b9d7c7a | 286 | unsigned char CR; |
Aganyte | 0:d5f38b9d7c7a | 287 | unsigned char CG; |
Aganyte | 0:d5f38b9d7c7a | 288 | unsigned char CB; |
Aganyte | 0:d5f38b9d7c7a | 289 | |
Aganyte | 0:d5f38b9d7c7a | 290 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 291 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 292 | CR = Character[0]-'0'; // stocker la valeur de la couleur rouge |
Aganyte | 0:d5f38b9d7c7a | 293 | |
Aganyte | 0:d5f38b9d7c7a | 294 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 295 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 296 | CG = Character[0]-'0'; // stocker la valeur de la couleur vert |
Aganyte | 0:d5f38b9d7c7a | 297 | |
Aganyte | 0:d5f38b9d7c7a | 298 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 299 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 300 | CB = Character[0]-'0'; // stocker la valeur de la couleur bleu |
Aganyte | 0:d5f38b9d7c7a | 301 | |
Aganyte | 0:d5f38b9d7c7a | 302 | pc.printf("Reglages des couleurs du mode monochrome avec R=%d,G=%d,B=%d\n\n",CR,CG,CB); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 303 | Color_R = CR; |
Aganyte | 0:d5f38b9d7c7a | 304 | Color_B = CB; |
Aganyte | 0:d5f38b9d7c7a | 305 | Color_G = CG; |
Aganyte | 0:d5f38b9d7c7a | 306 | } |
Aganyte | 0:d5f38b9d7c7a | 307 | |
Aganyte | 0:d5f38b9d7c7a | 308 | /* Fonction de lecture d'une commande horloge |
Aganyte | 0:d5f38b9d7c7a | 309 | * |
Aganyte | 0:d5f38b9d7c7a | 310 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 311 | * |
Aganyte | 0:d5f38b9d7c7a | 312 | * >Clock Temp=5 |
Aganyte | 0:d5f38b9d7c7a | 313 | */ |
Aganyte | 0:d5f38b9d7c7a | 314 | void Read_Clock() |
Aganyte | 0:d5f38b9d7c7a | 315 | { |
Aganyte | 0:d5f38b9d7c7a | 316 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 317 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 318 | Sleep = Character[0]-'0'; // Stocker le temps d'affichage |
Aganyte | 0:d5f38b9d7c7a | 319 | |
Aganyte | 0:d5f38b9d7c7a | 320 | pc.printf("Affichage de l'heure pendant %d secondes\n\n",Sleep); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 321 | |
Aganyte | 0:d5f38b9d7c7a | 322 | Clock(); |
Aganyte | 0:d5f38b9d7c7a | 323 | } |
Aganyte | 0:d5f38b9d7c7a | 324 | |
Aganyte | 0:d5f38b9d7c7a | 325 | /* Fonction de lecture d'une commande temperature |
Aganyte | 0:d5f38b9d7c7a | 326 | * |
Aganyte | 0:d5f38b9d7c7a | 327 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 328 | * |
Aganyte | 0:d5f38b9d7c7a | 329 | * >Temperature Temp=5 |
Aganyte | 0:d5f38b9d7c7a | 330 | */ |
Aganyte | 0:d5f38b9d7c7a | 331 | void Read_Temperature() |
Aganyte | 0:d5f38b9d7c7a | 332 | { |
Aganyte | 0:d5f38b9d7c7a | 333 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 334 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 335 | Sleep = Character[0]-'0'; // Stocker le temps d'affichage |
Aganyte | 0:d5f38b9d7c7a | 336 | |
Aganyte | 0:d5f38b9d7c7a | 337 | pc.printf("Affichage de la temperature pendant %d secondes\n\n",Sleep); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 338 | |
Aganyte | 0:d5f38b9d7c7a | 339 | Temperature(); |
Aganyte | 0:d5f38b9d7c7a | 340 | } |
Aganyte | 0:d5f38b9d7c7a | 341 | |
Aganyte | 0:d5f38b9d7c7a | 342 | |
Aganyte | 0:d5f38b9d7c7a | 343 | /* Fonction de lecture d'une commande lecture de la pile de backup |
Aganyte | 0:d5f38b9d7c7a | 344 | * |
Aganyte | 0:d5f38b9d7c7a | 345 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 346 | * |
Aganyte | 0:d5f38b9d7c7a | 347 | * >Battery Temp=5 |
Aganyte | 0:d5f38b9d7c7a | 348 | */ |
Aganyte | 0:d5f38b9d7c7a | 349 | void Read_Backup() |
Aganyte | 0:d5f38b9d7c7a | 350 | { |
Aganyte | 0:d5f38b9d7c7a | 351 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 352 | Index->read(Character, 1); // Lire le nombre de répétition |
Aganyte | 0:d5f38b9d7c7a | 353 | Sleep = Character[0]-'0'; // Stocker le temps d'affichage |
Aganyte | 0:d5f38b9d7c7a | 354 | |
Aganyte | 0:d5f38b9d7c7a | 355 | pc.printf("Affichage de la tension de la batterie pendant %d secondes\n\n",Sleep); // affichage dans la console |
Aganyte | 0:d5f38b9d7c7a | 356 | |
Aganyte | 0:d5f38b9d7c7a | 357 | Backup(); |
Aganyte | 0:d5f38b9d7c7a | 358 | } |
Aganyte | 0:d5f38b9d7c7a | 359 | |
Aganyte | 0:d5f38b9d7c7a | 360 | /* Fonction de lecture d'une commande de scrolling vertical dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 361 | * ATTENTION => La hauteur est à remplir sur 3 digits (max 320 pixels de haut) |
Aganyte | 0:d5f38b9d7c7a | 362 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 363 | * |
Aganyte | 0:d5f38b9d7c7a | 364 | * >Vertical FileName=test0000.BIN height=128 Speed=8 Up=1 |
Aganyte | 0:d5f38b9d7c7a | 365 | */ |
Aganyte | 0:d5f38b9d7c7a | 366 | void Vertical_Scrolling_SD() |
Aganyte | 0:d5f38b9d7c7a | 367 | { |
Aganyte | 0:d5f38b9d7c7a | 368 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 369 | Index->read(FileName, 12); // lire le nom de fichier |
Aganyte | 0:d5f38b9d7c7a | 370 | |
Aganyte | 0:d5f38b9d7c7a | 371 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 372 | Index->read(Line_Buffer, 3); // lire 16 caractères |
Aganyte | 0:d5f38b9d7c7a | 373 | unsigned int height = atoi(Line_Buffer); // Convertion de la valeur de Ascii vers un entier |
Aganyte | 0:d5f38b9d7c7a | 374 | |
Aganyte | 0:d5f38b9d7c7a | 375 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 376 | Index->read(Character, 1); // Lire la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 377 | Speed = Character[0]-'0'; // stocker la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 378 | |
Aganyte | 0:d5f38b9d7c7a | 379 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 380 | Index->read(Character, 1); // Lire le sens de lecture |
Aganyte | 0:d5f38b9d7c7a | 381 | Up = Character[0]-'0'; // stocker le sens de lecture |
Aganyte | 0:d5f38b9d7c7a | 382 | |
Aganyte | 0:d5f38b9d7c7a | 383 | Try_Open_File(); // Ouvrir le fichier |
Aganyte | 0:d5f38b9d7c7a | 384 | |
Aganyte | 0:d5f38b9d7c7a | 385 | read40KB(); // Charger le scrolling dans la mémoire |
Aganyte | 0:d5f38b9d7c7a | 386 | |
Aganyte | 0:d5f38b9d7c7a | 387 | pc.printf("Affichage du scrolling vertical %s de 128x%d pixels depuis la carte SD a la vitesse de %d avec Up=%d\n\n",FileName,height,Speed,Up); |
Aganyte | 0:d5f38b9d7c7a | 388 | |
Aganyte | 0:d5f38b9d7c7a | 389 | if(Up!=1) |
Aganyte | 0:d5f38b9d7c7a | 390 | { |
Aganyte | 0:d5f38b9d7c7a | 391 | for(unsigned char decal = 0; decal<(height-32); decal++) { |
Aganyte | 0:d5f38b9d7c7a | 392 | // Remplir la mémoire vidéo avec une image |
Aganyte | 0:d5f38b9d7c7a | 393 | for(unsigned int count = 0; count<4096; count++) |
Aganyte | 0:d5f38b9d7c7a | 394 | Display_Ram[count] = Scrolling_Buffer[(decal*128)+count]; |
Aganyte | 0:d5f38b9d7c7a | 395 | // Affichage de la trame avec gestion de la vitesse |
Aganyte | 0:d5f38b9d7c7a | 396 | for(unsigned char count = 0; count < (10-Speed); count++) |
Aganyte | 0:d5f38b9d7c7a | 397 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 398 | } |
Aganyte | 0:d5f38b9d7c7a | 399 | } |
Aganyte | 0:d5f38b9d7c7a | 400 | else |
Aganyte | 0:d5f38b9d7c7a | 401 | { |
Aganyte | 0:d5f38b9d7c7a | 402 | |
Aganyte | 0:d5f38b9d7c7a | 403 | for(unsigned char decal = (height-32); decal!=0; decal--) { |
Aganyte | 0:d5f38b9d7c7a | 404 | // Remplir la mémoire vidéo avec une image |
Aganyte | 0:d5f38b9d7c7a | 405 | for(unsigned int count = 0; count<4096; count++) |
Aganyte | 0:d5f38b9d7c7a | 406 | Display_Ram[count] = Scrolling_Buffer[(decal*128)+count]; |
Aganyte | 0:d5f38b9d7c7a | 407 | // Affichage de la trame avec gestion de la vitesse |
Aganyte | 0:d5f38b9d7c7a | 408 | for(unsigned char count = 0; count < (10-Speed); count++) |
Aganyte | 0:d5f38b9d7c7a | 409 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 410 | } |
Aganyte | 0:d5f38b9d7c7a | 411 | } |
Aganyte | 0:d5f38b9d7c7a | 412 | Flush_ascii_buffer(Line_Buffer); |
Aganyte | 0:d5f38b9d7c7a | 413 | } |
Aganyte | 0:d5f38b9d7c7a | 414 | |
Aganyte | 0:d5f38b9d7c7a | 415 | /* Fonction de lecture d'une commande de scrolling horizontal dans le fichier Index.txt |
Aganyte | 0:d5f38b9d7c7a | 416 | * ATTENTION => La hauteur est à remplir sur 4 digits (max 1280 pixels de large) |
Aganyte | 0:d5f38b9d7c7a | 417 | * Exemple d'utilisation: |
Aganyte | 0:d5f38b9d7c7a | 418 | * |
Aganyte | 0:d5f38b9d7c7a | 419 | * >Horizontal FileName=test0000.BIN height=0128 Speed=8 |
Aganyte | 0:d5f38b9d7c7a | 420 | */ |
Aganyte | 0:d5f38b9d7c7a | 421 | void Horizontal_Scrolling_SD() |
Aganyte | 0:d5f38b9d7c7a | 422 | { |
Aganyte | 0:d5f38b9d7c7a | 423 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 424 | Index->read(FileName, 12); // lire le nom de fichier |
Aganyte | 0:d5f38b9d7c7a | 425 | |
Aganyte | 0:d5f38b9d7c7a | 426 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 427 | Index->read(Line_Buffer, 4); // lire 16 caractères |
Aganyte | 0:d5f38b9d7c7a | 428 | unsigned int width = atoi(Line_Buffer); // Convertion de la valeur de Ascii vers un entier |
Aganyte | 0:d5f38b9d7c7a | 429 | |
Aganyte | 0:d5f38b9d7c7a | 430 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 431 | Index->read(Character, 1); // Lire la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 432 | Speed = Character[0]-'0'; // stocker la vitesse de lecture |
Aganyte | 0:d5f38b9d7c7a | 433 | |
Aganyte | 0:d5f38b9d7c7a | 434 | Search_Char('='); // lire jusqu'au prochain = |
Aganyte | 0:d5f38b9d7c7a | 435 | Index->read(Character, 1); // Lire le sens de lecture |
Aganyte | 0:d5f38b9d7c7a | 436 | Left = Character[0]-'0'; // stocker le sens de lecture |
Aganyte | 0:d5f38b9d7c7a | 437 | |
Aganyte | 0:d5f38b9d7c7a | 438 | Try_Open_File(); // Ouvrir le fichier |
Aganyte | 0:d5f38b9d7c7a | 439 | |
Aganyte | 0:d5f38b9d7c7a | 440 | read40KB(); // Charger le scrolling dans la mémoire |
Aganyte | 0:d5f38b9d7c7a | 441 | |
Aganyte | 0:d5f38b9d7c7a | 442 | pc.printf("Affichage du scrolling horizontal %s de %dx32 pixels depuis la carte SD a la vitesse de %d avec Left=%d\n\n",FileName,width,Speed,Left); |
Aganyte | 0:d5f38b9d7c7a | 443 | |
Aganyte | 0:d5f38b9d7c7a | 444 | if(Left==1) |
Aganyte | 0:d5f38b9d7c7a | 445 | { |
Aganyte | 0:d5f38b9d7c7a | 446 | for(unsigned int image = 0 ; image < width-128; image++) { |
Aganyte | 0:d5f38b9d7c7a | 447 | // Remplir la mémoire vidéo avec une ligne |
Aganyte | 0:d5f38b9d7c7a | 448 | for(unsigned char ligne = 0; ligne<32; ligne++) { |
Aganyte | 0:d5f38b9d7c7a | 449 | for(unsigned char count = 0 ; count<128 ; count++) |
Aganyte | 0:d5f38b9d7c7a | 450 | Display_Ram[count+(ligne*128)] = Scrolling_Buffer[image+count+(width*ligne)]; |
Aganyte | 0:d5f38b9d7c7a | 451 | } |
Aganyte | 0:d5f38b9d7c7a | 452 | // Affichage de la trame avec gestion de la vitesse |
Aganyte | 0:d5f38b9d7c7a | 453 | for(unsigned char count = 0; count < (10-Speed); count++) |
Aganyte | 0:d5f38b9d7c7a | 454 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 455 | } |
Aganyte | 0:d5f38b9d7c7a | 456 | } |
Aganyte | 0:d5f38b9d7c7a | 457 | else |
Aganyte | 0:d5f38b9d7c7a | 458 | { |
Aganyte | 0:d5f38b9d7c7a | 459 | for(unsigned int image = width-128 ; image !=0 ; image--) { |
Aganyte | 0:d5f38b9d7c7a | 460 | // Remplir la mémoire vidéo avec une ligne |
Aganyte | 0:d5f38b9d7c7a | 461 | for(unsigned char ligne = 0; ligne<32; ligne++) { |
Aganyte | 0:d5f38b9d7c7a | 462 | for(unsigned char count = 0 ; count<128 ; count++) |
Aganyte | 0:d5f38b9d7c7a | 463 | Display_Ram[count+(ligne*128)] = Scrolling_Buffer[image+count+(width*ligne)]; |
Aganyte | 0:d5f38b9d7c7a | 464 | } |
Aganyte | 0:d5f38b9d7c7a | 465 | // Affichage de la trame avec gestion de la vitesse |
Aganyte | 0:d5f38b9d7c7a | 466 | for(unsigned char count = 0; count < (10-Speed); count++) |
Aganyte | 0:d5f38b9d7c7a | 467 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 468 | } |
Aganyte | 0:d5f38b9d7c7a | 469 | } |
Aganyte | 0:d5f38b9d7c7a | 470 | Flush_ascii_buffer(Line_Buffer); |
Aganyte | 0:d5f38b9d7c7a | 471 | } |
Aganyte | 0:d5f38b9d7c7a | 472 | |
Aganyte | 0:d5f38b9d7c7a | 473 | /* Lire et effectuer la prochaine commade du fichier index.txt */ |
Aganyte | 0:d5f38b9d7c7a | 474 | void Read_Next_Command() |
Aganyte | 0:d5f38b9d7c7a | 475 | { |
Aganyte | 0:d5f38b9d7c7a | 476 | Search_Char('>'); // Chercher le prochain début de commande |
Aganyte | 0:d5f38b9d7c7a | 477 | Index->read(Command, 5); // lire la commande |
Aganyte | 0:d5f38b9d7c7a | 478 | |
Aganyte | 0:d5f38b9d7c7a | 479 | if( strcmp("Anima", Command) == 0) // A => Animation |
Aganyte | 0:d5f38b9d7c7a | 480 | Read_Animation(); |
Aganyte | 0:d5f38b9d7c7a | 481 | else if(strcmp("Write", Command) == 0) // W => Write |
Aganyte | 0:d5f38b9d7c7a | 482 | Read_Text(); |
Aganyte | 0:d5f38b9d7c7a | 483 | else if(strcmp("Clock", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 484 | Read_Clock(); // C => Clock |
Aganyte | 0:d5f38b9d7c7a | 485 | else if(strcmp("Tempe", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 486 | Read_Temperature(); // T => Temperature |
Aganyte | 0:d5f38b9d7c7a | 487 | else if(strcmp("Backu", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 488 | Read_Backup(); // B => pile de Backup |
Aganyte | 0:d5f38b9d7c7a | 489 | else if(strcmp("Setco", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 490 | Set_Color(); // S => changement des couleurs du mode monochrome |
Aganyte | 0:d5f38b9d7c7a | 491 | else if(strcmp("Verti", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 492 | Vertical_Scrolling_SD(); // V => Scrolling vertical depuis la SD |
Aganyte | 0:d5f38b9d7c7a | 493 | else if(strcmp("Horiz", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 494 | Horizontal_Scrolling_SD(); // H => Scrolling Horizontal depuis la SD |
Aganyte | 0:d5f38b9d7c7a | 495 | else if(strcmp("Image", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 496 | Image_SD(); // I => Image depuis la SD |
Aganyte | 0:d5f38b9d7c7a | 497 | else if(strcmp("Score", Command) == 0) |
Aganyte | 0:d5f38b9d7c7a | 498 | Score_SD(); // I => Superposer une Image avec du texte depuis la SD (scores) |
Aganyte | 0:d5f38b9d7c7a | 499 | else |
Aganyte | 0:d5f38b9d7c7a | 500 | pc.printf("Aucune Commande dans le fichier index.ini\n"); |
Aganyte | 0:d5f38b9d7c7a | 501 | } |