Nathan MONNIER
/
Projet_S3
Projet_S3
LED2.h@6:edb27e228558, 2018-10-12 (annotated)
- Committer:
- dujardin
- Date:
- Fri Oct 12 09:16:23 2018 +0000
- Revision:
- 6:edb27e228558
- Child:
- 8:cfcf73c16fab
version octobre
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dujardin | 6:edb27e228558 | 1 | // variables propres Affichage vers led en 16 bandes |
dujardin | 6:edb27e228558 | 2 | int AL ; int AP ; int AT ; // Affichae AL ligne AP pix AT temps |
dujardin | 6:edb27e228558 | 3 | int g1 ; int g2 ; int g3 ; int g4 ; // durée des 4 temps d'allumage |
dujardin | 6:edb27e228558 | 4 | char mm ; |
dujardin | 6:edb27e228558 | 5 | char T[64][16][3]; // Tableau à afficher format R1R2V1V2B1B2 en 4 temps |
dujardin | 6:edb27e228558 | 6 | // variables propres pix vers T en P dans 16 bandes |
dujardin | 6:edb27e228558 | 7 | int PL ; int PP ; int PT ; // position PL ligne AP pix AT temps |
dujardin | 6:edb27e228558 | 8 | int pB ; // pB 0 ou 1 bande |
dujardin | 6:edb27e228558 | 9 | char T0 ; char T1 ; char T2 ; char T3; // recup tab 0 1 2 3 |
dujardin | 6:edb27e228558 | 10 | int ZL ; int ZP ; int ZT ; // position PL ligne AP pix AT temps |
dujardin | 6:edb27e228558 | 11 | |
dujardin | 6:edb27e228558 | 12 | // variables liées à l'acceleromètre |
dujardin | 6:edb27e228558 | 13 | int acx1; int acx2; int acx3 ; int acx4; |
dujardin | 6:edb27e228558 | 14 | int acy1; int acy2; int acy3 ; int acy4; |
dujardin | 6:edb27e228558 | 15 | float xin; float yin; // lecture accelero |
dujardin | 6:edb27e228558 | 16 | |
dujardin | 6:edb27e228558 | 17 | void accel(void) |
dujardin | 6:edb27e228558 | 18 | { |
dujardin | 6:edb27e228558 | 19 | yin = canx.read(); xin= cany.read(); // lire accéléro |
dujardin | 6:edb27e228558 | 20 | acx4 = acx3 ; acx3 = acx2 ; acx2 = acx1 ; |
dujardin | 6:edb27e228558 | 21 | acy4 = acy3 ; acy3 = acy2 ; acy2 = acy1 ; |
dujardin | 6:edb27e228558 | 22 | acx1 = xin * 150-75; |
dujardin | 6:edb27e228558 | 23 | acy1 = yin * 150 - 75 ; // + calculs |
dujardin | 6:edb27e228558 | 24 | ccx = ( acx1 + acx2 + acx3 + acx4)/4 ; |
dujardin | 6:edb27e228558 | 25 | ccy = ( acy1 + acy2 + acy3 + acy4)/4 ; |
dujardin | 6:edb27e228558 | 26 | } |
dujardin | 6:edb27e228558 | 27 | |
dujardin | 6:edb27e228558 | 28 | void coul( int cc ) |
dujardin | 6:edb27e228558 | 29 | { |
dujardin | 6:edb27e228558 | 30 | switch (cc) |
dujardin | 6:edb27e228558 | 31 | { |
dujardin | 6:edb27e228558 | 32 | case 0 : |
dujardin | 6:edb27e228558 | 33 | ZR = 7 ; ZV = 0 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 34 | break; |
dujardin | 6:edb27e228558 | 35 | case 1 : |
dujardin | 6:edb27e228558 | 36 | ZR = 0 ; ZV = 7 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 37 | break; |
dujardin | 6:edb27e228558 | 38 | case 2 : |
dujardin | 6:edb27e228558 | 39 | ZR = 0 ; ZV = 0 ; ZB = 7 ; |
dujardin | 6:edb27e228558 | 40 | break; |
dujardin | 6:edb27e228558 | 41 | case 3 : |
dujardin | 6:edb27e228558 | 42 | ZR = 7 ; ZV = 2 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 43 | break; |
dujardin | 6:edb27e228558 | 44 | case 4 : |
dujardin | 6:edb27e228558 | 45 | ZR = 7 ; ZV = 0 ; ZB = 2 ; |
dujardin | 6:edb27e228558 | 46 | break; |
dujardin | 6:edb27e228558 | 47 | case 6 : |
dujardin | 6:edb27e228558 | 48 | ZR = 5 ; ZV = 15 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 49 | break; |
dujardin | 6:edb27e228558 | 50 | case 7 : |
dujardin | 6:edb27e228558 | 51 | ZR = 0 ; ZV = 7 ; ZB = 2 ; |
dujardin | 6:edb27e228558 | 52 | break; |
dujardin | 6:edb27e228558 | 53 | case 8 : |
dujardin | 6:edb27e228558 | 54 | ZR = 0 ; ZV = 2 ; ZB = 7 ; |
dujardin | 6:edb27e228558 | 55 | break; |
dujardin | 6:edb27e228558 | 56 | case 9 : |
dujardin | 6:edb27e228558 | 57 | ZR = 15 ; ZV = 0 ; ZB = 15 ; |
dujardin | 6:edb27e228558 | 58 | break; |
dujardin | 6:edb27e228558 | 59 | case 10 : |
dujardin | 6:edb27e228558 | 60 | ZR = 0 ; ZV = 7 ; ZB = 7 ; |
dujardin | 6:edb27e228558 | 61 | break; |
dujardin | 6:edb27e228558 | 62 | case 11 : |
dujardin | 6:edb27e228558 | 63 | ZR = 7 ; ZV = 0 ; ZB = 7 ; |
dujardin | 6:edb27e228558 | 64 | break; |
dujardin | 6:edb27e228558 | 65 | case 12 : |
dujardin | 6:edb27e228558 | 66 | ZR = 7 ; ZV = 7 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 67 | break; |
dujardin | 6:edb27e228558 | 68 | case 13 : |
dujardin | 6:edb27e228558 | 69 | ZR = 7 ; ZV = 7 ; ZB = 7 ; |
dujardin | 6:edb27e228558 | 70 | break; |
dujardin | 6:edb27e228558 | 71 | case 14 : |
dujardin | 6:edb27e228558 | 72 | ZR = 2 ; ZV = 0 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 73 | break; |
dujardin | 6:edb27e228558 | 74 | case 15 : |
dujardin | 6:edb27e228558 | 75 | ZR = 0 ; ZV = 2 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 76 | break; |
dujardin | 6:edb27e228558 | 77 | default: |
dujardin | 6:edb27e228558 | 78 | ZR = 0 ; ZV = 0 ; ZB = 0 ; |
dujardin | 6:edb27e228558 | 79 | break; |
dujardin | 6:edb27e228558 | 80 | } |
dujardin | 6:edb27e228558 | 81 | } |
dujardin | 6:edb27e228558 | 82 | void Tr2 () // T reset |
dujardin | 6:edb27e228558 | 83 | {// efface tableau T led faire en x16 |
dujardin | 6:edb27e228558 | 84 | for ( ZL = 0 ; ZL < 16 ; ZL++ ) |
dujardin | 6:edb27e228558 | 85 | { |
dujardin | 6:edb27e228558 | 86 | for ( ZT = 0 ; ZT < 3 ; ZT++ ) |
dujardin | 6:edb27e228558 | 87 | { |
dujardin | 6:edb27e228558 | 88 | for ( ZP = 0 ; ZP < 64 ; ZP++) T[ZP][ZL][ZT] = 0 ; |
dujardin | 6:edb27e228558 | 89 | } |
dujardin | 6:edb27e228558 | 90 | } |
dujardin | 6:edb27e228558 | 91 | } |
dujardin | 6:edb27e228558 | 92 | |
dujardin | 6:edb27e228558 | 93 | |
dujardin | 6:edb27e228558 | 94 | void pix( int X, int Y , char cr , char cv , char cb ) |
dujardin | 6:edb27e228558 | 95 | { // place un pixel RVB dans I en 64/32 max x y 0 normal |
dujardin | 6:edb27e228558 | 96 | |
dujardin | 6:edb27e228558 | 97 | if ( X < 0 ) X = 0; // limites avant usage |
dujardin | 6:edb27e228558 | 98 | if ( Y < 0 ) Y = 0; |
dujardin | 6:edb27e228558 | 99 | if ( X > 63 ) X = 63; |
dujardin | 6:edb27e228558 | 100 | if ( Y > 31 ) Y = 31; |
dujardin | 6:edb27e228558 | 101 | if ( cr > 7 ) cr = 7; // max 7 niveaux de puissance |
dujardin | 6:edb27e228558 | 102 | if ( cv > 7 ) cv = 7; |
dujardin | 6:edb27e228558 | 103 | if ( cb > 7 ) cb = 7; |
dujardin | 6:edb27e228558 | 104 | //calcul position PL et PP dans bande de 64 T[PP][PL][AT] |
dujardin | 6:edb27e228558 | 105 | PP = X ; |
dujardin | 6:edb27e228558 | 106 | pB = 0 ; |
dujardin | 6:edb27e228558 | 107 | PL = Y ; |
dujardin | 6:edb27e228558 | 108 | if (Y > 15 ) {PP = X-1 ; pB = 1 ;} |
dujardin | 6:edb27e228558 | 109 | |
dujardin | 6:edb27e228558 | 110 | |
dujardin | 6:edb27e228558 | 111 | T0= T[PP][PL][0]; T1= T[PP][PL][1]; T2 =T[PP][PL][2] ; |
dujardin | 6:edb27e228558 | 112 | if ( pB ==1 ) |
dujardin | 6:edb27e228558 | 113 | { |
dujardin | 6:edb27e228558 | 114 | T0 = T0 & 62 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 115 | if ( ( cb & 1 ) == 1 ) T0 = T0 + 1; // mis a 1 |
dujardin | 6:edb27e228558 | 116 | T0 = T0 & 59 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 117 | if ( ( cv & 1 ) == 1 ) T0 = T0 + 4; // mis a 1 |
dujardin | 6:edb27e228558 | 118 | T0 = T0 & 47 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 119 | if ( ( cr & 1 ) == 1 ) T0 = T0 + 16; // mis a 1 |
dujardin | 6:edb27e228558 | 120 | T[PP][PL][0] = T0; // retour dedans |
dujardin | 6:edb27e228558 | 121 | |
dujardin | 6:edb27e228558 | 122 | T1 = T1 & 62 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 123 | if ( ( cb & 2 ) == 2 ) T1 = T1 + 1; // mis a 1 |
dujardin | 6:edb27e228558 | 124 | T1 = T1 & 59 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 125 | if ( ( cv & 2 ) == 2 ) T1 = T1 + 4; // mis a 1 |
dujardin | 6:edb27e228558 | 126 | T1 = T1 & 47 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 127 | if ( ( cr & 2 ) == 2 ) T1 = T1 + 16; // mis a 1 |
dujardin | 6:edb27e228558 | 128 | T[PP][PL][1] = T1; // retour dedans |
dujardin | 6:edb27e228558 | 129 | |
dujardin | 6:edb27e228558 | 130 | T2 = T2 & 62 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 131 | if ( ( cb & 4 ) == 4 ) T2 = T2 + 1; // mis a 1 |
dujardin | 6:edb27e228558 | 132 | T2 = T2 & 59 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 133 | if ( ( cv & 4 ) == 4 ) T2 = T2 + 4; // mis a 1 |
dujardin | 6:edb27e228558 | 134 | T2 = T2 & 47 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 135 | if ( ( cr & 4 ) == 4 ) T2 = T2 + 16; // mis a 1 |
dujardin | 6:edb27e228558 | 136 | T[PP][PL][2] = T2; // retour dedans |
dujardin | 6:edb27e228558 | 137 | } |
dujardin | 6:edb27e228558 | 138 | |
dujardin | 6:edb27e228558 | 139 | if ( pB ==0) |
dujardin | 6:edb27e228558 | 140 | { |
dujardin | 6:edb27e228558 | 141 | T0 = T0 & 61 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 142 | if ( ( cb & 1 ) == 1 ) T0 = T0 + 2; // mis a 1 |
dujardin | 6:edb27e228558 | 143 | T0 = T0 & 55 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 144 | if ( ( cv & 1 ) == 1 ) T0 = T0 + 8; // mis a 1 |
dujardin | 6:edb27e228558 | 145 | T0 = T0 & 31 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 146 | if ( ( cr & 1 ) == 1 ) T0 = T0 + 32; // mis a 1 |
dujardin | 6:edb27e228558 | 147 | T[PP][PL][0] = T0; // retour dedans |
dujardin | 6:edb27e228558 | 148 | |
dujardin | 6:edb27e228558 | 149 | T1 = T1 & 61 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 150 | if ( ( cb & 2 ) == 2 ) T1 = T1 + 2; // mis a 1 |
dujardin | 6:edb27e228558 | 151 | T1 = T1 & 55 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 152 | if ( ( cv & 2 ) == 2 ) T1 = T1 + 8; // mis a 1 |
dujardin | 6:edb27e228558 | 153 | T1 = T1 & 31 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 154 | if ( ( cr & 2 ) == 2 ) T1 = T1 + 32; // mis a 1 |
dujardin | 6:edb27e228558 | 155 | T[PP][PL][1] = T1; // retour dedans |
dujardin | 6:edb27e228558 | 156 | |
dujardin | 6:edb27e228558 | 157 | T2 = T2 & 61 ; // b0 = 0 |
dujardin | 6:edb27e228558 | 158 | if ( ( cb & 4 ) == 4 ) T2 = T2 + 2; // mis a 1 |
dujardin | 6:edb27e228558 | 159 | T2 = T2 & 55 ; // v0 = 0 |
dujardin | 6:edb27e228558 | 160 | if ( ( cv & 4 ) == 4 ) T2 = T2 + 8; // mis a 1 |
dujardin | 6:edb27e228558 | 161 | T2 = T2 & 31 ; // r0 = 0 |
dujardin | 6:edb27e228558 | 162 | if ( ( cr & 4 ) == 4 ) T2 = T2 + 32; // mis a 1 |
dujardin | 6:edb27e228558 | 163 | T[PP][PL][2] = T2; // retour dedans |
dujardin | 6:edb27e228558 | 164 | } |
dujardin | 6:edb27e228558 | 165 | } |
dujardin | 6:edb27e228558 | 166 | |
dujardin | 6:edb27e228558 | 167 | void Taffi() |
dujardin | 6:edb27e228558 | 168 | { // variables propres AL AT AP |
dujardin | 6:edb27e228558 | 169 | OE = HIGH; // Disable output |
dujardin | 6:edb27e228558 | 170 | for ( AL = 0 ; AL < 16 ; AL++) |
dujardin | 6:edb27e228558 | 171 | { |
dujardin | 6:edb27e228558 | 172 | ABCD = AL; //adresse ligne dans L |
dujardin | 6:edb27e228558 | 173 | for ( AT = 0 ; AT < 3 ; AT++) |
dujardin | 6:edb27e228558 | 174 | { |
dujardin | 6:edb27e228558 | 175 | for( AP =0 ; AP < 32 ; AP++) // |
dujardin | 6:edb27e228558 | 176 | { |
dujardin | 6:edb27e228558 | 177 | mm = T[AP][AL][AT]; |
dujardin | 6:edb27e228558 | 178 | B1 = mm & 1 ; |
dujardin | 6:edb27e228558 | 179 | B0 = mm & 2 ; |
dujardin | 6:edb27e228558 | 180 | V1 = mm & 4 ; |
dujardin | 6:edb27e228558 | 181 | V0 = mm & 8 ; |
dujardin | 6:edb27e228558 | 182 | R1 = mm & 16 ; |
dujardin | 6:edb27e228558 | 183 | R0 = mm & 32 ; |
dujardin | 6:edb27e228558 | 184 | |
dujardin | 6:edb27e228558 | 185 | CLK = HIGH; // tick (clock bit in) |
dujardin | 6:edb27e228558 | 186 | CLK = LOW; // tock |
dujardin | 6:edb27e228558 | 187 | } |
dujardin | 6:edb27e228558 | 188 | LAT = HIGH; // Latch ligne |
dujardin | 6:edb27e228558 | 189 | LAT = LOW; |
dujardin | 6:edb27e228558 | 190 | OE = LOW; // Enable output |
dujardin | 6:edb27e228558 | 191 | if ( AT == 0 ) wait_us(g1); |
dujardin | 6:edb27e228558 | 192 | if ( AT == 1 ) wait_us(g2); |
dujardin | 6:edb27e228558 | 193 | if ( AT == 2 ) wait_us(g3); // 8*8*8 niveaux rapidement |
dujardin | 6:edb27e228558 | 194 | OE = HIGH; // disable output |
dujardin | 6:edb27e228558 | 195 | } |
dujardin | 6:edb27e228558 | 196 | } |
dujardin | 6:edb27e228558 | 197 | } |
dujardin | 6:edb27e228558 | 198 | |
dujardin | 6:edb27e228558 | 199 | void circle(int px , int py , int r ) |
dujardin | 6:edb27e228558 | 200 | { |
dujardin | 6:edb27e228558 | 201 | int rx = 0; int ry = 0 ; |
dujardin | 6:edb27e228558 | 202 | for ( rx = r ; ry <= rx ; rx-- ) |
dujardin | 6:edb27e228558 | 203 | { |
dujardin | 6:edb27e228558 | 204 | while((rx*rx+ry*ry)<(r*r)) |
dujardin | 6:edb27e228558 | 205 | { |
dujardin | 6:edb27e228558 | 206 | pix ( px+rx , py+ry , br , bv , bb ); |
dujardin | 6:edb27e228558 | 207 | pix ( px+rx , py-ry , br , bv , bb ); |
dujardin | 6:edb27e228558 | 208 | pix ( px-rx , py+ry , br , bv , bb ); |
dujardin | 6:edb27e228558 | 209 | pix ( px-rx , py-ry , br , bv , bb ); |
dujardin | 6:edb27e228558 | 210 | pix ( px+ry , py+rx , br , bv , bb ); |
dujardin | 6:edb27e228558 | 211 | pix ( px-ry , py+rx , br , bv , bb ); |
dujardin | 6:edb27e228558 | 212 | pix ( px+ry , py-rx , br , bv , bb ); |
dujardin | 6:edb27e228558 | 213 | pix ( px-ry , py-rx , br , bv , bb ); |
dujardin | 6:edb27e228558 | 214 | ry++; |
dujardin | 6:edb27e228558 | 215 | } |
dujardin | 6:edb27e228558 | 216 | } |
dujardin | 6:edb27e228558 | 217 | |
dujardin | 6:edb27e228558 | 218 | pix ( px , py , br , bv , bb ); |
dujardin | 6:edb27e228558 | 219 | } |
dujardin | 6:edb27e228558 | 220 |