Version avec sortie ABCD sur même connecteur
Dependencies: SDFileSystemDMA mbed
Fork of DmdFullRGB_0_1 by
Dmd.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 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 | /* Ouverture de la liaison série */ |
Aganyte | 0:d5f38b9d7c7a | 7 | Serial pc(SERIAL_TX, SERIAL_RX, 9600); |
Aganyte | 0:d5f38b9d7c7a | 8 | |
Aganyte | 0:d5f38b9d7c7a | 9 | // Préparation d'un objet timer pour la gestion du Timer |
Aganyte | 0:d5f38b9d7c7a | 10 | Timer timer; |
Aganyte | 0:d5f38b9d7c7a | 11 | |
Aganyte | 0:d5f38b9d7c7a | 12 | // Mémoire vidéo de 128x32 pixels avec 1 octet par pixel |
Aganyte | 0:d5f38b9d7c7a | 13 | unsigned char Display_Ram[4096]; |
Aganyte | 0:d5f38b9d7c7a | 14 | |
Aganyte | 0:d5f38b9d7c7a | 15 | // Mémoire vidéo Monochrome de 128x32 pixels avec 1 bit par pixel (Octet) |
Aganyte | 0:d5f38b9d7c7a | 16 | unsigned char Mono_Display_Ram[512]; |
Aganyte | 0:d5f38b9d7c7a | 17 | |
Aganyte | 0:d5f38b9d7c7a | 18 | // Mémoire vidéo Monochrome de 128x32 pixels avec 1 bit par pixel(booléen) |
Aganyte | 0:d5f38b9d7c7a | 19 | bool Bool_Display_Ram[4096]; |
Aganyte | 0:d5f38b9d7c7a | 20 | |
Aganyte | 0:d5f38b9d7c7a | 21 | // Mémoire de stockage des Scrolling de la SD |
Aganyte | 0:d5f38b9d7c7a | 22 | unsigned char Scrolling_Buffer[40960]; |
Aganyte | 0:d5f38b9d7c7a | 23 | |
Aganyte | 0:d5f38b9d7c7a | 24 | // Paramètres réglables depuis la SD (avec les valeurs par défaut au démarrage) |
Aganyte | 0:d5f38b9d7c7a | 25 | unsigned char Replay=1; |
Aganyte | 0:d5f38b9d7c7a | 26 | unsigned char Speed=5; |
Aganyte | 0:d5f38b9d7c7a | 27 | char Command[6]; |
Aganyte | 0:d5f38b9d7c7a | 28 | unsigned char Sleep=5; |
Aganyte | 0:d5f38b9d7c7a | 29 | unsigned char Color_R=1; |
Aganyte | 0:d5f38b9d7c7a | 30 | unsigned char Color_G=0; |
Aganyte | 0:d5f38b9d7c7a | 31 | unsigned char Color_B=0; |
Aganyte | 0:d5f38b9d7c7a | 32 | unsigned char Up = 1; |
Aganyte | 0:d5f38b9d7c7a | 33 | unsigned char Left = 1; |
Aganyte | 0:d5f38b9d7c7a | 34 | |
Aganyte | 0:d5f38b9d7c7a | 35 | // définition des entrées/sorties |
Aganyte | 0:d5f38b9d7c7a | 36 | DigitalOut A(D0); |
Aganyte | 0:d5f38b9d7c7a | 37 | DigitalOut B(D1); |
Aganyte | 0:d5f38b9d7c7a | 38 | DigitalOut C(A0); |
Aganyte | 0:d5f38b9d7c7a | 39 | DigitalOut D(D3); |
Aganyte | 0:d5f38b9d7c7a | 40 | DigitalOut CLK(D4); |
Aganyte | 0:d5f38b9d7c7a | 41 | DigitalOut LATCH(D5); |
Aganyte | 0:d5f38b9d7c7a | 42 | DigitalOut EN(D6); |
Aganyte | 0:d5f38b9d7c7a | 43 | DigitalOut R1(D7); |
Aganyte | 0:d5f38b9d7c7a | 44 | DigitalOut G1(A5); |
Aganyte | 0:d5f38b9d7c7a | 45 | DigitalOut B1(A4); |
Aganyte | 0:d5f38b9d7c7a | 46 | DigitalOut R2(A3); |
Aganyte | 0:d5f38b9d7c7a | 47 | DigitalOut G2(A2); |
Aganyte | 0:d5f38b9d7c7a | 48 | DigitalOut B2(A1); |
Aganyte | 0:d5f38b9d7c7a | 49 | DigitalIn mybutton(USER_BUTTON); // Déclaration du bouton présent sur la carte nucleo |
Aganyte | 0:d5f38b9d7c7a | 50 | AnalogIn adc_temp(ADC_TEMP); // Configuration du capteur de temperature |
Aganyte | 0:d5f38b9d7c7a | 51 | AnalogIn adc_vbat(ADC_VBAT); // Configuration de la lecture de tension de batterie |
Aganyte | 0:d5f38b9d7c7a | 52 | |
Aganyte | 0:d5f38b9d7c7a | 53 | /* Masque de décodage */ |
Aganyte | 0:d5f38b9d7c7a | 54 | // En RGB332 (le Bleu possède moins de nuance car l'oeil humain les distinguent moins) |
Aganyte | 0:d5f38b9d7c7a | 55 | // Seulement 7 niveau par masque car la nuance la plus basse correspond à une led éteinte |
Aganyte | 0:d5f38b9d7c7a | 56 | // R => 0x11100000 |
Aganyte | 0:d5f38b9d7c7a | 57 | // G => 0x00011100 |
Aganyte | 0:d5f38b9d7c7a | 58 | // B => 0x00000011 |
Aganyte | 0:d5f38b9d7c7a | 59 | unsigned char Red_Mask[7] = { |
Aganyte | 0:d5f38b9d7c7a | 60 | 0b00100000, // nuance 0, C |
Aganyte | 0:d5f38b9d7c7a | 61 | 0b01000000, // nuance 1, B |
Aganyte | 0:d5f38b9d7c7a | 62 | 0b01100000, // nuance 2, B ET C |
Aganyte | 0:d5f38b9d7c7a | 63 | 0b10000000, // nuance 3, A |
Aganyte | 0:d5f38b9d7c7a | 64 | 0b10100000, // nuance 4, A ET C |
Aganyte | 0:d5f38b9d7c7a | 65 | 0b11000000, // nuance 5, A ET B |
Aganyte | 0:d5f38b9d7c7a | 66 | 0b11100000, // nuance 6, A ET B ET C |
Aganyte | 0:d5f38b9d7c7a | 67 | }; |
Aganyte | 0:d5f38b9d7c7a | 68 | unsigned char Green_Mask[7] = { |
Aganyte | 0:d5f38b9d7c7a | 69 | 0b00000100, // nuance 0, C |
Aganyte | 0:d5f38b9d7c7a | 70 | 0b00001000, // nuance 1, B |
Aganyte | 0:d5f38b9d7c7a | 71 | 0b00001100, // nuance 2, B ET C |
Aganyte | 0:d5f38b9d7c7a | 72 | 0b00010000, // nuance 3, A |
Aganyte | 0:d5f38b9d7c7a | 73 | 0b00010100, // nuance 4, A ET C |
Aganyte | 0:d5f38b9d7c7a | 74 | 0b00011000, // nuance 5, A ET B |
Aganyte | 0:d5f38b9d7c7a | 75 | 0b00011100, // nuance 6, A ET B ET C |
Aganyte | 0:d5f38b9d7c7a | 76 | }; |
Aganyte | 0:d5f38b9d7c7a | 77 | unsigned char Blue_Mask[7] = { // On compte en double pour créer 7 niveaux (Comme R et G) |
Aganyte | 0:d5f38b9d7c7a | 78 | 0b00000001, // nuance 0, B |
Aganyte | 0:d5f38b9d7c7a | 79 | 0b00000001, // nuance 1, B |
Aganyte | 0:d5f38b9d7c7a | 80 | 0b00000010, // nuance 2, A |
Aganyte | 0:d5f38b9d7c7a | 81 | 0b00000010, // naunce 3, A |
Aganyte | 0:d5f38b9d7c7a | 82 | 0b00000011, // nuance 4, A ET B |
Aganyte | 0:d5f38b9d7c7a | 83 | 0b00000011, // nuance 5, A ET B |
Aganyte | 0:d5f38b9d7c7a | 84 | 0b00000011, // nuance 6, A ET B |
Aganyte | 0:d5f38b9d7c7a | 85 | }; |
Aganyte | 0:d5f38b9d7c7a | 86 | |
Aganyte | 0:d5f38b9d7c7a | 87 | /* Fonction qui convertit le buffer monochrome en octet vers le buffer monochrome en booléen |
Aganyte | 0:d5f38b9d7c7a | 88 | * |
Aganyte | 0:d5f38b9d7c7a | 89 | */ |
Aganyte | 0:d5f38b9d7c7a | 90 | void Convert_Mono_To_Bool() |
Aganyte | 0:d5f38b9d7c7a | 91 | { |
Aganyte | 0:d5f38b9d7c7a | 92 | for(unsigned int count = 0; count < 512 ; count++) // lecture des 512 octets |
Aganyte | 0:d5f38b9d7c7a | 93 | { |
Aganyte | 0:d5f38b9d7c7a | 94 | unsigned char buffer = Mono_Display_Ram[count]; // lecture d'un octet |
Aganyte | 0:d5f38b9d7c7a | 95 | for(unsigned char bit = 0; bit < 8; bit++) // remplir 8 booléen |
Aganyte | 0:d5f38b9d7c7a | 96 | { |
Aganyte | 0:d5f38b9d7c7a | 97 | if( (buffer & 0x80) == 0x80) // vers la gauche |
Aganyte | 0:d5f38b9d7c7a | 98 | Bool_Display_Ram[(count*8)+bit] = 1; |
Aganyte | 0:d5f38b9d7c7a | 99 | else |
Aganyte | 0:d5f38b9d7c7a | 100 | Bool_Display_Ram[(count*8)+bit] = 0; |
Aganyte | 0:d5f38b9d7c7a | 101 | buffer <<= 1; |
Aganyte | 0:d5f38b9d7c7a | 102 | } |
Aganyte | 0:d5f38b9d7c7a | 103 | } |
Aganyte | 0:d5f38b9d7c7a | 104 | } |
Aganyte | 0:d5f38b9d7c7a | 105 | |
Aganyte | 0:d5f38b9d7c7a | 106 | /* Fonction de convertion du buffer mono vers le buffer RGB avec superposition |
Aganyte | 0:d5f38b9d7c7a | 107 | * Problème identifié - En cours de debuggage... |
Aganyte | 0:d5f38b9d7c7a | 108 | */ |
Aganyte | 0:d5f38b9d7c7a | 109 | void Convert_Mono_To_RGB() |
Aganyte | 0:d5f38b9d7c7a | 110 | { |
Aganyte | 0:d5f38b9d7c7a | 111 | Convert_Mono_To_Bool(); |
Aganyte | 0:d5f38b9d7c7a | 112 | |
Aganyte | 0:d5f38b9d7c7a | 113 | for(unsigned int count = 0; count < 4096; count++) |
Aganyte | 0:d5f38b9d7c7a | 114 | { |
Aganyte | 0:d5f38b9d7c7a | 115 | if( (Color_R == 1) & (Bool_Display_Ram[count] == 1) ) |
Aganyte | 0:d5f38b9d7c7a | 116 | Display_Ram[count] = Display_Ram[count] | Red_Mask[6]; |
Aganyte | 0:d5f38b9d7c7a | 117 | |
Aganyte | 0:d5f38b9d7c7a | 118 | if( (Color_G == 1) & (Bool_Display_Ram[count] == 1) ) |
Aganyte | 0:d5f38b9d7c7a | 119 | Display_Ram[count] = Display_Ram[count] | Green_Mask[6]; |
Aganyte | 0:d5f38b9d7c7a | 120 | |
Aganyte | 0:d5f38b9d7c7a | 121 | if( (Color_B == 1) & (Bool_Display_Ram[count] == 1) ) |
Aganyte | 0:d5f38b9d7c7a | 122 | Display_Ram[count] = Display_Ram[count] | Blue_Mask[6]; |
Aganyte | 0:d5f38b9d7c7a | 123 | } |
Aganyte | 0:d5f38b9d7c7a | 124 | } |
Aganyte | 0:d5f38b9d7c7a | 125 | |
Aganyte | 0:d5f38b9d7c7a | 126 | /* sous programme de gestion des lignes (tous les modes) */ |
Aganyte | 0:d5f38b9d7c7a | 127 | void Line(unsigned char number) |
Aganyte | 0:d5f38b9d7c7a | 128 | { |
Aganyte | 0:d5f38b9d7c7a | 129 | D = (number>>3) & 0x01; |
Aganyte | 0:d5f38b9d7c7a | 130 | C = (number>>2) & 0x01; |
Aganyte | 0:d5f38b9d7c7a | 131 | B = (number>>1) & 0x01; |
Aganyte | 0:d5f38b9d7c7a | 132 | A = number & 0x01; |
Aganyte | 0:d5f38b9d7c7a | 133 | } |
Aganyte | 0:d5f38b9d7c7a | 134 | |
Aganyte | 0:d5f38b9d7c7a | 135 | /* Envoie de deux octets RGB avec choix de la nuance actuelle (mode RGB332) */ |
Aganyte | 0:d5f38b9d7c7a | 136 | void Transfer(unsigned char Up_RGB, unsigned char Down_RGB, unsigned char shade) |
Aganyte | 0:d5f38b9d7c7a | 137 | { |
Aganyte | 0:d5f38b9d7c7a | 138 | // Préparation de R1 |
Aganyte | 0:d5f38b9d7c7a | 139 | if( (Up_RGB & Red_Mask[shade]) == Red_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 140 | R1 = 1; |
Aganyte | 0:d5f38b9d7c7a | 141 | else |
Aganyte | 0:d5f38b9d7c7a | 142 | R1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 143 | // Préparation de G1 |
Aganyte | 0:d5f38b9d7c7a | 144 | if( (Up_RGB & Green_Mask[shade]) == Green_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 145 | G1 = 1; |
Aganyte | 0:d5f38b9d7c7a | 146 | else |
Aganyte | 0:d5f38b9d7c7a | 147 | G1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 148 | // Préparation de B1 |
Aganyte | 0:d5f38b9d7c7a | 149 | if( (Up_RGB & Blue_Mask[shade]) == Blue_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 150 | B1 = 1; |
Aganyte | 0:d5f38b9d7c7a | 151 | else |
Aganyte | 0:d5f38b9d7c7a | 152 | B1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 153 | |
Aganyte | 0:d5f38b9d7c7a | 154 | // Préparation de R2 |
Aganyte | 0:d5f38b9d7c7a | 155 | if( (Down_RGB & Red_Mask[shade]) == Red_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 156 | R2 = 1; |
Aganyte | 0:d5f38b9d7c7a | 157 | else |
Aganyte | 0:d5f38b9d7c7a | 158 | R2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 159 | // Préparation de G2 |
Aganyte | 0:d5f38b9d7c7a | 160 | if( (Down_RGB & Green_Mask[shade]) == Green_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 161 | G2 = 1; |
Aganyte | 0:d5f38b9d7c7a | 162 | else |
Aganyte | 0:d5f38b9d7c7a | 163 | G2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 164 | // Préparation de B2 |
Aganyte | 0:d5f38b9d7c7a | 165 | if( (Down_RGB & Blue_Mask[shade]) == Blue_Mask[shade] ) |
Aganyte | 0:d5f38b9d7c7a | 166 | B2 = 1; |
Aganyte | 0:d5f38b9d7c7a | 167 | else |
Aganyte | 0:d5f38b9d7c7a | 168 | B2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 169 | |
Aganyte | 0:d5f38b9d7c7a | 170 | CLK = 0; |
Aganyte | 0:d5f38b9d7c7a | 171 | CLK = 1; // Front montant = Envoie de la donnée |
Aganyte | 0:d5f38b9d7c7a | 172 | } |
Aganyte | 0:d5f38b9d7c7a | 173 | |
Aganyte | 0:d5f38b9d7c7a | 174 | /* Envoie de deux octets monochrome avec choix de la couleur (mode monochrome) */ |
Aganyte | 0:d5f38b9d7c7a | 175 | void Transfer_mono(unsigned char Up_RGB, unsigned char Down_RGB) |
Aganyte | 0:d5f38b9d7c7a | 176 | { |
Aganyte | 0:d5f38b9d7c7a | 177 | /* Envoie de 2*8 Bits en série */ |
Aganyte | 0:d5f38b9d7c7a | 178 | for( unsigned char Count_SPI = 0 ; Count_SPI<8 ; Count_SPI++ ) |
Aganyte | 0:d5f38b9d7c7a | 179 | { |
Aganyte | 0:d5f38b9d7c7a | 180 | if(Color_R == 0) |
Aganyte | 0:d5f38b9d7c7a | 181 | R1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 182 | else |
Aganyte | 0:d5f38b9d7c7a | 183 | R1 = Up_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 184 | |
Aganyte | 0:d5f38b9d7c7a | 185 | if(Color_G == 0) |
Aganyte | 0:d5f38b9d7c7a | 186 | G1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 187 | else |
Aganyte | 0:d5f38b9d7c7a | 188 | G1 = Up_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 189 | |
Aganyte | 0:d5f38b9d7c7a | 190 | if(Color_B == 0) |
Aganyte | 0:d5f38b9d7c7a | 191 | B1 = 0; |
Aganyte | 0:d5f38b9d7c7a | 192 | else |
Aganyte | 0:d5f38b9d7c7a | 193 | B1 = Up_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 194 | |
Aganyte | 0:d5f38b9d7c7a | 195 | Up_RGB <<= 1; // Bit suivant |
Aganyte | 0:d5f38b9d7c7a | 196 | |
Aganyte | 0:d5f38b9d7c7a | 197 | if(Color_R == 0) |
Aganyte | 0:d5f38b9d7c7a | 198 | R2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 199 | else |
Aganyte | 0:d5f38b9d7c7a | 200 | R2 = Down_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 201 | |
Aganyte | 0:d5f38b9d7c7a | 202 | if(Color_G == 0) |
Aganyte | 0:d5f38b9d7c7a | 203 | G2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 204 | else |
Aganyte | 0:d5f38b9d7c7a | 205 | G2 = Down_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 206 | |
Aganyte | 0:d5f38b9d7c7a | 207 | if(Color_B == 0) |
Aganyte | 0:d5f38b9d7c7a | 208 | B2 = 0; |
Aganyte | 0:d5f38b9d7c7a | 209 | else |
Aganyte | 0:d5f38b9d7c7a | 210 | B2 = Down_RGB & 0x80; |
Aganyte | 0:d5f38b9d7c7a | 211 | |
Aganyte | 0:d5f38b9d7c7a | 212 | Down_RGB <<= 1; // Bit suivant |
Aganyte | 0:d5f38b9d7c7a | 213 | |
Aganyte | 0:d5f38b9d7c7a | 214 | CLK = 0; |
Aganyte | 0:d5f38b9d7c7a | 215 | CLK = 1; // Front montant = Envoie de la donnée |
Aganyte | 0:d5f38b9d7c7a | 216 | } |
Aganyte | 0:d5f38b9d7c7a | 217 | } |
Aganyte | 0:d5f38b9d7c7a | 218 | |
Aganyte | 0:d5f38b9d7c7a | 219 | /* Envoyer et afficher 256 pixels sur le dot (deux lignes) depuis |
Aganyte | 0:d5f38b9d7c7a | 220 | * la mémoire vidéo avec sélection de la nuance (mode RGB332) |
Aganyte | 0:d5f38b9d7c7a | 221 | */ |
Aganyte | 0:d5f38b9d7c7a | 222 | void Send_256pixels(unsigned char ligne, unsigned char shade) |
Aganyte | 0:d5f38b9d7c7a | 223 | { |
Aganyte | 0:d5f38b9d7c7a | 224 | LATCH = 0 ; // Préparer le front montant pour le Latch |
Aganyte | 0:d5f38b9d7c7a | 225 | |
Aganyte | 0:d5f38b9d7c7a | 226 | unsigned int Up_Ligne_adress = ligne * 128; // calcul du décalage en fonction de la ligne (moitié haute de l'écran) |
Aganyte | 0:d5f38b9d7c7a | 227 | unsigned int Bottom_Ligne_adress = Up_Ligne_adress + 2048; // calcul du décalage en fonction de la ligne (moitié basse de l'écran) |
Aganyte | 0:d5f38b9d7c7a | 228 | |
Aganyte | 0:d5f38b9d7c7a | 229 | /* Envoie de 256 octets (128 octets par ligne) */ |
Aganyte | 0:d5f38b9d7c7a | 230 | for(unsigned char Count_SPI2 = 0 ; Count_SPI2<128 ; Count_SPI2++ ) |
Aganyte | 0:d5f38b9d7c7a | 231 | Transfer(Display_Ram [Count_SPI2 + Up_Ligne_adress], Display_Ram [Count_SPI2 + Bottom_Ligne_adress], shade); |
Aganyte | 0:d5f38b9d7c7a | 232 | |
Aganyte | 0:d5f38b9d7c7a | 233 | EN = 1; // Désactiver la ligne |
Aganyte | 0:d5f38b9d7c7a | 234 | Line(ligne); // Sélectionner la ligne |
Aganyte | 0:d5f38b9d7c7a | 235 | LATCH = 1; // Transferer la donnée sur les latchs |
Aganyte | 0:d5f38b9d7c7a | 236 | EN = 0; // Activer la ligne |
Aganyte | 0:d5f38b9d7c7a | 237 | // Gestion du temps d'affichage de la ligne en fonction de sa nuance |
Aganyte | 0:d5f38b9d7c7a | 238 | if(shade == 0) |
Aganyte | 0:d5f38b9d7c7a | 239 | wait_us(1); |
Aganyte | 0:d5f38b9d7c7a | 240 | |
Aganyte | 0:d5f38b9d7c7a | 241 | if(shade == 1) |
Aganyte | 0:d5f38b9d7c7a | 242 | wait_us(5); |
Aganyte | 0:d5f38b9d7c7a | 243 | |
Aganyte | 0:d5f38b9d7c7a | 244 | if(shade == 2) |
Aganyte | 0:d5f38b9d7c7a | 245 | wait_us(5); |
Aganyte | 0:d5f38b9d7c7a | 246 | |
Aganyte | 0:d5f38b9d7c7a | 247 | if(shade == 3) |
Aganyte | 0:d5f38b9d7c7a | 248 | wait_us(50); |
Aganyte | 0:d5f38b9d7c7a | 249 | |
Aganyte | 0:d5f38b9d7c7a | 250 | if(shade == 4) |
Aganyte | 0:d5f38b9d7c7a | 251 | wait_us(50); |
Aganyte | 0:d5f38b9d7c7a | 252 | |
Aganyte | 0:d5f38b9d7c7a | 253 | if(shade == 5) |
Aganyte | 0:d5f38b9d7c7a | 254 | wait_us(150); |
Aganyte | 0:d5f38b9d7c7a | 255 | |
Aganyte | 0:d5f38b9d7c7a | 256 | if(shade == 6) |
Aganyte | 0:d5f38b9d7c7a | 257 | wait_us(190); |
Aganyte | 0:d5f38b9d7c7a | 258 | EN = 1; // Désactiver la ligne |
Aganyte | 0:d5f38b9d7c7a | 259 | } |
Aganyte | 0:d5f38b9d7c7a | 260 | |
Aganyte | 0:d5f38b9d7c7a | 261 | /* Rafraichir l'écran 1 fois (mode RGB332) */ |
Aganyte | 0:d5f38b9d7c7a | 262 | void refresh() |
Aganyte | 0:d5f38b9d7c7a | 263 | { |
Aganyte | 0:d5f38b9d7c7a | 264 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 0 |
Aganyte | 0:d5f38b9d7c7a | 265 | Send_256pixels(ligne,0); |
Aganyte | 0:d5f38b9d7c7a | 266 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 1 |
Aganyte | 0:d5f38b9d7c7a | 267 | Send_256pixels(ligne,1); |
Aganyte | 0:d5f38b9d7c7a | 268 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 2 |
Aganyte | 0:d5f38b9d7c7a | 269 | Send_256pixels(ligne,2); |
Aganyte | 0:d5f38b9d7c7a | 270 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 3 |
Aganyte | 0:d5f38b9d7c7a | 271 | Send_256pixels(ligne,3); |
Aganyte | 0:d5f38b9d7c7a | 272 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 4 |
Aganyte | 0:d5f38b9d7c7a | 273 | Send_256pixels(ligne,4); |
Aganyte | 0:d5f38b9d7c7a | 274 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 5 |
Aganyte | 0:d5f38b9d7c7a | 275 | Send_256pixels(ligne,5); |
Aganyte | 0:d5f38b9d7c7a | 276 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes de la nuance 6 |
Aganyte | 0:d5f38b9d7c7a | 277 | Send_256pixels(ligne,6); |
Aganyte | 0:d5f38b9d7c7a | 278 | } |
Aganyte | 0:d5f38b9d7c7a | 279 | |
Aganyte | 0:d5f38b9d7c7a | 280 | /* Envoyer et afficher 256 pixels sur le dot (deux lignes) depuis la mémoire vidéo (mode monochrome) */ |
Aganyte | 0:d5f38b9d7c7a | 281 | void Send_256pixels_mono(unsigned char ligne) |
Aganyte | 0:d5f38b9d7c7a | 282 | { |
Aganyte | 0:d5f38b9d7c7a | 283 | LATCH = 0 ; // Préparer le front montant pour le Latch |
Aganyte | 0:d5f38b9d7c7a | 284 | |
Aganyte | 0:d5f38b9d7c7a | 285 | /* Envoie de 32 octets (128 octets par ligne) */ |
Aganyte | 0:d5f38b9d7c7a | 286 | for(unsigned char Count_SPI2 = 0 ; Count_SPI2<16 ; Count_SPI2++ ) |
Aganyte | 0:d5f38b9d7c7a | 287 | Transfer_mono(Mono_Display_Ram[(ligne*16)+Count_SPI2], Mono_Display_Ram[(ligne*16)+256+Count_SPI2]); |
Aganyte | 0:d5f38b9d7c7a | 288 | |
Aganyte | 0:d5f38b9d7c7a | 289 | EN = 1; // Désactiver la ligne |
Aganyte | 0:d5f38b9d7c7a | 290 | Line(ligne); // Sélectionner la ligne |
Aganyte | 0:d5f38b9d7c7a | 291 | LATCH = 1; // Transferer la donnée sur les latchs |
Aganyte | 0:d5f38b9d7c7a | 292 | EN = 0; // Activer la ligne |
Aganyte | 0:d5f38b9d7c7a | 293 | // Gestion du temps d'affichage de la ligne |
Aganyte | 0:d5f38b9d7c7a | 294 | wait_us(500); |
Aganyte | 0:d5f38b9d7c7a | 295 | EN = 1; // Désactiver la ligne |
Aganyte | 0:d5f38b9d7c7a | 296 | } |
Aganyte | 0:d5f38b9d7c7a | 297 | |
Aganyte | 0:d5f38b9d7c7a | 298 | /* Rafraichir l'écran 1 fois avec la mémoire vidéo (mode monochrome) */ |
Aganyte | 0:d5f38b9d7c7a | 299 | void refresh_mono() |
Aganyte | 0:d5f38b9d7c7a | 300 | { |
Aganyte | 0:d5f38b9d7c7a | 301 | for (unsigned char ligne = 0; ligne<16 ; ligne++) // Envoyer 16x2 lignes |
Aganyte | 0:d5f38b9d7c7a | 302 | Send_256pixels_mono(ligne); |
Aganyte | 0:d5f38b9d7c7a | 303 | } |
Aganyte | 0:d5f38b9d7c7a | 304 | |
Aganyte | 0:d5f38b9d7c7a | 305 | /* Fonction affichage d'un scrolling vertical stocké dans le micro-controleur |
Aganyte | 0:d5f38b9d7c7a | 306 | * height => hauteur de l'image en pixels |
Aganyte | 0:d5f38b9d7c7a | 307 | * Array => nom de l'image |
Aganyte | 0:d5f38b9d7c7a | 308 | */ |
Aganyte | 0:d5f38b9d7c7a | 309 | void Scrolling(unsigned int height, const unsigned char *Array) |
Aganyte | 0:d5f38b9d7c7a | 310 | { |
Aganyte | 0:d5f38b9d7c7a | 311 | pc.printf("Affichage d'un scrolling vertical de 128x%d pixels depuis le STM32\n",height); |
Aganyte | 0:d5f38b9d7c7a | 312 | for(unsigned char decal = 0; decal<(height-32); decal++) |
Aganyte | 0:d5f38b9d7c7a | 313 | { |
Aganyte | 0:d5f38b9d7c7a | 314 | // Remplir la mémoire vidéo avec une image |
Aganyte | 0:d5f38b9d7c7a | 315 | for(unsigned int count = 0; count<4096; count++) |
Aganyte | 0:d5f38b9d7c7a | 316 | Display_Ram[count] = Array[(decal*128)+count]; |
Aganyte | 0:d5f38b9d7c7a | 317 | // Affichage de la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 318 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 319 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 320 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 321 | } |
Aganyte | 0:d5f38b9d7c7a | 322 | } |
Aganyte | 0:d5f38b9d7c7a | 323 | |
Aganyte | 0:d5f38b9d7c7a | 324 | /* Fonction affichage d'un scrolling horizontal stocké dans le micro-controleur |
Aganyte | 0:d5f38b9d7c7a | 325 | * width => largeur de l'image en pixels |
Aganyte | 0:d5f38b9d7c7a | 326 | * Array => nom de l'image |
Aganyte | 0:d5f38b9d7c7a | 327 | */ |
Aganyte | 0:d5f38b9d7c7a | 328 | void Horizontal_Scrolling(unsigned int width, const unsigned char *Array) |
Aganyte | 0:d5f38b9d7c7a | 329 | { |
Aganyte | 0:d5f38b9d7c7a | 330 | pc.printf("Affichage d'un scrolling horizontal de %dx32 pixels depuis le STM32\n",width); |
Aganyte | 0:d5f38b9d7c7a | 331 | for(unsigned int image = 0 ; image < width-128; image++) |
Aganyte | 0:d5f38b9d7c7a | 332 | { |
Aganyte | 0:d5f38b9d7c7a | 333 | // Remplir la mémoire vidéo avec une ligne |
Aganyte | 0:d5f38b9d7c7a | 334 | for(unsigned char ligne = 0; ligne<32; ligne++) |
Aganyte | 0:d5f38b9d7c7a | 335 | { |
Aganyte | 0:d5f38b9d7c7a | 336 | for(unsigned char count = 0 ; count<128 ; count++) |
Aganyte | 0:d5f38b9d7c7a | 337 | Display_Ram[count+(ligne*128)] = Array[image+count+(width*ligne)]; |
Aganyte | 0:d5f38b9d7c7a | 338 | } |
Aganyte | 0:d5f38b9d7c7a | 339 | // Affichage de la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 340 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 341 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 342 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 343 | } |
Aganyte | 0:d5f38b9d7c7a | 344 | } |
Aganyte | 0:d5f38b9d7c7a | 345 | |
Aganyte | 0:d5f38b9d7c7a | 346 | /* Fonction affichage d'une animation stockée dans le micro-controleur |
Aganyte | 0:d5f38b9d7c7a | 347 | * Size => nombre de trame |
Aganyte | 0:d5f38b9d7c7a | 348 | * Array => nom de l'animation |
Aganyte | 0:d5f38b9d7c7a | 349 | */ |
Aganyte | 0:d5f38b9d7c7a | 350 | void Animation(unsigned int size, const unsigned char *Array) |
Aganyte | 0:d5f38b9d7c7a | 351 | { |
Aganyte | 0:d5f38b9d7c7a | 352 | pc.printf("Affichage d'une animation de %d images depuis le STM32\n",size); |
Aganyte | 0:d5f38b9d7c7a | 353 | for(unsigned char decal = 0; decal<size; decal++) |
Aganyte | 0:d5f38b9d7c7a | 354 | { |
Aganyte | 0:d5f38b9d7c7a | 355 | // Remplir la mémoire vidéo avec une image |
Aganyte | 0:d5f38b9d7c7a | 356 | for(unsigned int count = 0; count<4096; count++) |
Aganyte | 0:d5f38b9d7c7a | 357 | Display_Ram[count] = Array[(decal*4096)+count]; |
Aganyte | 0:d5f38b9d7c7a | 358 | // Affichage de la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 359 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 360 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 361 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 362 | } |
Aganyte | 0:d5f38b9d7c7a | 363 | } |
Aganyte | 0:d5f38b9d7c7a | 364 | |
Aganyte | 0:d5f38b9d7c7a | 365 | /* Fonction affichage d'une image stockée dans buffer vidéo |
Aganyte | 0:d5f38b9d7c7a | 366 | * time -> nombre de secondes d'affichage de l'image |
Aganyte | 0:d5f38b9d7c7a | 367 | */ |
Aganyte | 0:d5f38b9d7c7a | 368 | void Image(unsigned int time) |
Aganyte | 0:d5f38b9d7c7a | 369 | { |
Aganyte | 0:d5f38b9d7c7a | 370 | timer.reset(); |
Aganyte | 0:d5f38b9d7c7a | 371 | timer.start(); |
Aganyte | 0:d5f38b9d7c7a | 372 | while(timer.read_ms() < 1000*time) |
Aganyte | 0:d5f38b9d7c7a | 373 | refresh(); |
Aganyte | 0:d5f38b9d7c7a | 374 | timer.stop(); |
Aganyte | 0:d5f38b9d7c7a | 375 | } |
Aganyte | 0:d5f38b9d7c7a | 376 | |
Aganyte | 0:d5f38b9d7c7a | 377 | /* Fonction écriture 2 lignes de 8 caractères en Mononchrome */ |
Aganyte | 0:d5f38b9d7c7a | 378 | void print_2_8(const char *chaine,bool Line_2) |
Aganyte | 0:d5f38b9d7c7a | 379 | { |
Aganyte | 0:d5f38b9d7c7a | 380 | unsigned int FontPosData,select = 0; |
Aganyte | 0:d5f38b9d7c7a | 381 | unsigned char Caractere = 0, count = 8; |
Aganyte | 0:d5f38b9d7c7a | 382 | |
Aganyte | 0:d5f38b9d7c7a | 383 | if(Line_2 == true) select = 256; |
Aganyte | 0:d5f38b9d7c7a | 384 | |
Aganyte | 0:d5f38b9d7c7a | 385 | while(count!=0) |
Aganyte | 0:d5f38b9d7c7a | 386 | { |
Aganyte | 0:d5f38b9d7c7a | 387 | FontPosData=((*chaine++)-32)*32; // FontPosData détermine la position dans font.h du caractére à afficher. |
Aganyte | 0:d5f38b9d7c7a | 388 | for(unsigned char Count=0 ; Count<16; Count++) // Font de 16 lignes de haut |
Aganyte | 0:d5f38b9d7c7a | 389 | { |
Aganyte | 0:d5f38b9d7c7a | 390 | for(unsigned char cT=0; cT<2; cT++) // Font de 2 octets de large |
Aganyte | 0:d5f38b9d7c7a | 391 | { |
Aganyte | 0:d5f38b9d7c7a | 392 | Mono_Display_Ram[select+cT+(16*Count)+(2*Caractere)] = Robot[(FontPosData+2*Count)+cT]; |
Aganyte | 0:d5f38b9d7c7a | 393 | } |
Aganyte | 0:d5f38b9d7c7a | 394 | } |
Aganyte | 0:d5f38b9d7c7a | 395 | Caractere++; // Passer au caractère suivant |
Aganyte | 0:d5f38b9d7c7a | 396 | count--; |
Aganyte | 0:d5f38b9d7c7a | 397 | } |
Aganyte | 0:d5f38b9d7c7a | 398 | } |
Aganyte | 0:d5f38b9d7c7a | 399 | |
Aganyte | 0:d5f38b9d7c7a | 400 | /* Effacer la mémoire vidéo Monochrome */ |
Aganyte | 0:d5f38b9d7c7a | 401 | void Clear_Mono_Buffer() |
Aganyte | 0:d5f38b9d7c7a | 402 | { |
Aganyte | 0:d5f38b9d7c7a | 403 | for ( unsigned int count = 0; count < 512 ; count++) |
Aganyte | 0:d5f38b9d7c7a | 404 | Mono_Display_Ram[count] = 0x00; |
Aganyte | 0:d5f38b9d7c7a | 405 | } |
Aganyte | 0:d5f38b9d7c7a | 406 | |
Aganyte | 0:d5f38b9d7c7a | 407 | /* Rafraichir l'écran avec la mémoire Monochrome pendant X millisecondes (en Blanc si non précisé) */ |
Aganyte | 0:d5f38b9d7c7a | 408 | void Refresh_in_seconds() |
Aganyte | 0:d5f38b9d7c7a | 409 | { |
Aganyte | 0:d5f38b9d7c7a | 410 | timer.reset(); // Remise à zéro du timer |
Aganyte | 0:d5f38b9d7c7a | 411 | timer.start(); // Démarrer le timer |
Aganyte | 0:d5f38b9d7c7a | 412 | while(timer.read_ms() < (1000*Sleep) ) // Tant que le timer n'a pas atteind la valeur |
Aganyte | 0:d5f38b9d7c7a | 413 | refresh_mono(); // Rafraichir l'écran |
Aganyte | 0:d5f38b9d7c7a | 414 | timer.stop(); // Arreter le timer |
Aganyte | 0:d5f38b9d7c7a | 415 | Clear_Mono_Buffer(); // Effacer la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 416 | } |
Aganyte | 0:d5f38b9d7c7a | 417 | |
Aganyte | 0:d5f38b9d7c7a | 418 | /* Inversion de 8 bits pour le mode 2 lignes de 16 caractères (font inversée) */ |
Aganyte | 0:d5f38b9d7c7a | 419 | unsigned char bit_reverse8(unsigned char n) |
Aganyte | 0:d5f38b9d7c7a | 420 | { |
Aganyte | 0:d5f38b9d7c7a | 421 | n = (n << 4) | (n >> 4); |
Aganyte | 0:d5f38b9d7c7a | 422 | n = ((n << 2) & 0xCC) | ((n >> 2) & 0x33); |
Aganyte | 0:d5f38b9d7c7a | 423 | n = ((n << 1) & 0xAA) | ((n >> 1) & 0x55); |
Aganyte | 0:d5f38b9d7c7a | 424 | return n; |
Aganyte | 0:d5f38b9d7c7a | 425 | } |
Aganyte | 0:d5f38b9d7c7a | 426 | |
Aganyte | 0:d5f38b9d7c7a | 427 | /* Fonction écriture d'une ligne en RAM par superposition avec choix de la ligne (mode 4 lignes de 16 caractères) */ |
Aganyte | 0:d5f38b9d7c7a | 428 | void print_4_16(const char *chaine, unsigned char line) |
Aganyte | 0:d5f38b9d7c7a | 429 | { |
Aganyte | 0:d5f38b9d7c7a | 430 | unsigned int select = 0; |
Aganyte | 0:d5f38b9d7c7a | 431 | if(line > 2) |
Aganyte | 0:d5f38b9d7c7a | 432 | { |
Aganyte | 0:d5f38b9d7c7a | 433 | select = 256; |
Aganyte | 0:d5f38b9d7c7a | 434 | line-=2; |
Aganyte | 0:d5f38b9d7c7a | 435 | } |
Aganyte | 0:d5f38b9d7c7a | 436 | unsigned int FontPosData; |
Aganyte | 0:d5f38b9d7c7a | 437 | unsigned char Count, Buffer, Caractere = 0; |
Aganyte | 0:d5f38b9d7c7a | 438 | while(*chaine !='\0') |
Aganyte | 0:d5f38b9d7c7a | 439 | { |
Aganyte | 0:d5f38b9d7c7a | 440 | FontPosData=((*chaine++)-32)*8; // FontPosData détermine la position dans font.h du caractére à afficher. |
Aganyte | 0:d5f38b9d7c7a | 441 | |
Aganyte | 0:d5f38b9d7c7a | 442 | for(Count=0 ; Count<8; Count++) // Font de 8 lignes de haut |
Aganyte | 0:d5f38b9d7c7a | 443 | { |
Aganyte | 0:d5f38b9d7c7a | 444 | Buffer = bit_reverse8(Font88[FontPosData+Count]); |
Aganyte | 0:d5f38b9d7c7a | 445 | if(line == 1) Mono_Display_Ram[select+(16*Count)+Caractere] = Mono_Display_Ram[select+(16*Count)+Caractere] | Buffer; |
Aganyte | 0:d5f38b9d7c7a | 446 | else Mono_Display_Ram[select+128+(16*Count)+Caractere] = Mono_Display_Ram[select+128+(16*Count)+Caractere] | Buffer; |
Aganyte | 0:d5f38b9d7c7a | 447 | } |
Aganyte | 0:d5f38b9d7c7a | 448 | Caractere++; // Passer au caractère suivant |
Aganyte | 0:d5f38b9d7c7a | 449 | } |
Aganyte | 0:d5f38b9d7c7a | 450 | } |
Aganyte | 0:d5f38b9d7c7a | 451 | |
Aganyte | 0:d5f38b9d7c7a | 452 | /* Fonction affichage de la date et de l'heure */ |
Aganyte | 0:d5f38b9d7c7a | 453 | void Clock() |
Aganyte | 0:d5f38b9d7c7a | 454 | { |
Aganyte | 0:d5f38b9d7c7a | 455 | char buffer[16]; |
Aganyte | 0:d5f38b9d7c7a | 456 | timer.reset(); // Remise à zéro du timer |
Aganyte | 0:d5f38b9d7c7a | 457 | timer.start(); // Démarrer le timer |
Aganyte | 0:d5f38b9d7c7a | 458 | while(timer.read_ms() < (1000*Sleep) ) // Tant que le timer n'a pas atteind la valeur |
Aganyte | 0:d5f38b9d7c7a | 459 | { |
Aganyte | 0:d5f38b9d7c7a | 460 | Clear_Mono_Buffer(); // Effacer la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 461 | time(&Time); // Mettre à jour l'heure |
Aganyte | 0:d5f38b9d7c7a | 462 | print_4_16(" ",1); // Ligne 1 |
Aganyte | 0:d5f38b9d7c7a | 463 | strftime(buffer, 16," %d/%m/%y", localtime(&Time)); // Date au format JJ/MM/AA |
Aganyte | 0:d5f38b9d7c7a | 464 | print_4_16(buffer,2); // Ligne 2 |
Aganyte | 0:d5f38b9d7c7a | 465 | print_4_16(" ",3); // Ligne 3 |
Aganyte | 0:d5f38b9d7c7a | 466 | //strftime(buffer, 16, " %I:%M:%S %p", localtime(&Time)); // heure au format 0-12 |
Aganyte | 0:d5f38b9d7c7a | 467 | strftime(buffer, 16," %H:%M:%S", localtime(&Time)); // heure au format 0-24 |
Aganyte | 0:d5f38b9d7c7a | 468 | print_4_16(buffer,4); // Ligne 4 |
Aganyte | 0:d5f38b9d7c7a | 469 | refresh_mono(); // Rafraichir l'écran |
Aganyte | 0:d5f38b9d7c7a | 470 | } |
Aganyte | 0:d5f38b9d7c7a | 471 | timer.stop(); // Arreter le timer |
Aganyte | 0:d5f38b9d7c7a | 472 | Clear_Mono_Buffer(); // Effacer la mémoire vidéo |
Aganyte | 0:d5f38b9d7c7a | 473 | } |
Aganyte | 0:d5f38b9d7c7a | 474 | |
Aganyte | 0:d5f38b9d7c7a | 475 | /* Fonction affichage de la temperature */ |
Aganyte | 0:d5f38b9d7c7a | 476 | void Temperature() |
Aganyte | 0:d5f38b9d7c7a | 477 | { |
Aganyte | 0:d5f38b9d7c7a | 478 | char buffer[16]; |
Aganyte | 0:d5f38b9d7c7a | 479 | print_4_16(" TEMPERATURE ",1); // Ligne 1 |
Aganyte | 0:d5f38b9d7c7a | 480 | print_4_16(" ",2); // Ligne 2 |
Aganyte | 0:d5f38b9d7c7a | 481 | sprintf(buffer," %.2f DEGRES", (adc_temp.read()*100)); |
Aganyte | 0:d5f38b9d7c7a | 482 | print_4_16(buffer,3); // Ligne 3 |
Aganyte | 0:d5f38b9d7c7a | 483 | print_4_16(" ",4); // Ligne 4 |
Aganyte | 0:d5f38b9d7c7a | 484 | Refresh_in_seconds(); // Rafraichir l'écran pendant une seconde (2000 millisecondes) |
Aganyte | 0:d5f38b9d7c7a | 485 | } |
Aganyte | 0:d5f38b9d7c7a | 486 | |
Aganyte | 0:d5f38b9d7c7a | 487 | /* Fonction affichage de la tension de la pile de sauvegarde */ |
Aganyte | 0:d5f38b9d7c7a | 488 | void Backup() |
Aganyte | 0:d5f38b9d7c7a | 489 | { |
Aganyte | 0:d5f38b9d7c7a | 490 | char buffer[16]; |
Aganyte | 0:d5f38b9d7c7a | 491 | print_4_16(" PILE ",1); // Ligne 1 |
Aganyte | 0:d5f38b9d7c7a | 492 | print_4_16(" DE SAUVEGARDE ",2); // Ligne 2 |
Aganyte | 0:d5f38b9d7c7a | 493 | sprintf(buffer," %.2f VOLT", adc_vbat.read()); |
Aganyte | 0:d5f38b9d7c7a | 494 | print_4_16(buffer,3); // Ligne 3 |
Aganyte | 0:d5f38b9d7c7a | 495 | print_4_16(" ",4); // Ligne 4 |
Aganyte | 0:d5f38b9d7c7a | 496 | Refresh_in_seconds(); // Rafraichir l'écran pendant une seconde (2000 millisecondes) |
Aganyte | 0:d5f38b9d7c7a | 497 | } |
Aganyte | 0:d5f38b9d7c7a | 498 | |
Aganyte | 0:d5f38b9d7c7a | 499 | /* Fonction affichage de l'intro */ |
Aganyte | 0:d5f38b9d7c7a | 500 | void Intro() |
Aganyte | 0:d5f38b9d7c7a | 501 | { |
Aganyte | 0:d5f38b9d7c7a | 502 | pc.printf("Affichage de l'intro pendant %d secondes avec R=%d,G=%d,B=%d\n",Sleep,Color_R,Color_G,Color_B); |
Aganyte | 0:d5f38b9d7c7a | 503 | print_4_16(" DIY DMD-CLOCK ",1); // Ligne 1 |
Aganyte | 0:d5f38b9d7c7a | 504 | print_4_16(" 128x32 Pixels ",2); // Ligne 2 |
Aganyte | 0:d5f38b9d7c7a | 505 | print_4_16("v0.1 256 colors",3); // Ligne 3 |
Aganyte | 0:d5f38b9d7c7a | 506 | print_4_16("By Aganyte/Iro ",4); // Ligne 4 |
Aganyte | 0:d5f38b9d7c7a | 507 | Refresh_in_seconds(); // Rafraichir l'écran pendant une seconde (5000 millisecondes) |
Aganyte | 0:d5f38b9d7c7a | 508 | } |