The led_cube library is a graphic library for led cubes.
led_cube.cpp@0:bd6527c8f5f3, 2010-10-23 (annotated)
- Committer:
- Fiuba
- Date:
- Sat Oct 23 01:00:09 2010 +0000
- Revision:
- 0:bd6527c8f5f3
First revision of the code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Fiuba | 0:bd6527c8f5f3 | 1 | #include "led_cube.h" |
Fiuba | 0:bd6527c8f5f3 | 2 | #include "mbed.h" |
Fiuba | 0:bd6527c8f5f3 | 3 | |
Fiuba | 0:bd6527c8f5f3 | 4 | // Constructor, inicializamos las variables |
Fiuba | 0:bd6527c8f5f3 | 5 | led_cube::led_cube (void) { |
Fiuba | 0:bd6527c8f5f3 | 6 | int ind[] = {6, 5, 7, 4, 8, 1, 10, 2, 9, 3, 17, 15, 18, 14, 19, 11, 21, 12, 20, 13, 22, 23, 24, 25, 26}; |
Fiuba | 0:bd6527c8f5f3 | 7 | int col_esp[] = {0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 4, 4, 4, 3, 2, 1, 1, 1, 1, 2, 3, 3, 3, 2, 2}; |
Fiuba | 0:bd6527c8f5f3 | 8 | int fil_esp[] = {0, 1, 2, 3, 4, 4, 4, 4, 4, 3, 2, 1, 0, 0, 0, 0, 1, 2, 3, 3, 3, 2, 1, 1, 2}; |
Fiuba | 0:bd6527c8f5f3 | 9 | |
Fiuba | 0:bd6527c8f5f3 | 10 | // Inicializamos las variables |
Fiuba | 0:bd6527c8f5f3 | 11 | for (int i=0; i<25; i++) { |
Fiuba | 0:bd6527c8f5f3 | 12 | indices[i] = ind[i]; |
Fiuba | 0:bd6527c8f5f3 | 13 | col_espiral[i] = col_esp[i]; |
Fiuba | 0:bd6527c8f5f3 | 14 | fil_espiral[i] = fil_esp[i]; |
Fiuba | 0:bd6527c8f5f3 | 15 | } |
Fiuba | 0:bd6527c8f5f3 | 16 | vibora_viva = false; |
Fiuba | 0:bd6527c8f5f3 | 17 | ind_demo = 0; |
Fiuba | 0:bd6527c8f5f3 | 18 | |
Fiuba | 0:bd6527c8f5f3 | 19 | // Apagamos todos los leds |
Fiuba | 0:bd6527c8f5f3 | 20 | apagar_leds(); |
Fiuba | 0:bd6527c8f5f3 | 21 | } |
Fiuba | 0:bd6527c8f5f3 | 22 | |
Fiuba | 0:bd6527c8f5f3 | 23 | |
Fiuba | 0:bd6527c8f5f3 | 24 | inline void led_cube::apagar_leds (void) { |
Fiuba | 0:bd6527c8f5f3 | 25 | memset(&GS_data, 0, 5*32*sizeof(int)); |
Fiuba | 0:bd6527c8f5f3 | 26 | } |
Fiuba | 0:bd6527c8f5f3 | 27 | |
Fiuba | 0:bd6527c8f5f3 | 28 | inline void led_cube::prender_leds (void) { |
Fiuba | 0:bd6527c8f5f3 | 29 | memset(&GS_data, 0xFF, 5*32*sizeof(int)); |
Fiuba | 0:bd6527c8f5f3 | 30 | } |
Fiuba | 0:bd6527c8f5f3 | 31 | |
Fiuba | 0:bd6527c8f5f3 | 32 | void led_cube::prender_un_led (int piso, int fila, int columna) { |
Fiuba | 0:bd6527c8f5f3 | 33 | GS_data[piso][indices[5*fila+columna]] = 0xFF; |
Fiuba | 0:bd6527c8f5f3 | 34 | } |
Fiuba | 0:bd6527c8f5f3 | 35 | |
Fiuba | 0:bd6527c8f5f3 | 36 | void led_cube::apagar_un_led (int piso, int fila, int columna) { |
Fiuba | 0:bd6527c8f5f3 | 37 | GS_data[piso][indices[5*fila+columna]] = 0x00; |
Fiuba | 0:bd6527c8f5f3 | 38 | } |
Fiuba | 0:bd6527c8f5f3 | 39 | |
Fiuba | 0:bd6527c8f5f3 | 40 | void led_cube::next_led (void) { |
Fiuba | 0:bd6527c8f5f3 | 41 | static int p = 0; |
Fiuba | 0:bd6527c8f5f3 | 42 | static int f = 0; |
Fiuba | 0:bd6527c8f5f3 | 43 | static int c = 0; |
Fiuba | 0:bd6527c8f5f3 | 44 | |
Fiuba | 0:bd6527c8f5f3 | 45 | prender_un_led(p, f, c); |
Fiuba | 0:bd6527c8f5f3 | 46 | if ( ++c > 4 ) { |
Fiuba | 0:bd6527c8f5f3 | 47 | c = 0; |
Fiuba | 0:bd6527c8f5f3 | 48 | if ( ++f > 4 ) { |
Fiuba | 0:bd6527c8f5f3 | 49 | f = 0; |
Fiuba | 0:bd6527c8f5f3 | 50 | if ( ++p > 4 ) p = 0; |
Fiuba | 0:bd6527c8f5f3 | 51 | } |
Fiuba | 0:bd6527c8f5f3 | 52 | } |
Fiuba | 0:bd6527c8f5f3 | 53 | } |
Fiuba | 0:bd6527c8f5f3 | 54 | |
Fiuba | 0:bd6527c8f5f3 | 55 | void led_cube::prender_alto (int fila, int col) { |
Fiuba | 0:bd6527c8f5f3 | 56 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 57 | GS_data[i][indices[5*fila+col]] = 0xFF; |
Fiuba | 0:bd6527c8f5f3 | 58 | } |
Fiuba | 0:bd6527c8f5f3 | 59 | |
Fiuba | 0:bd6527c8f5f3 | 60 | |
Fiuba | 0:bd6527c8f5f3 | 61 | void led_cube::apagar_alto (int fila, int col) { |
Fiuba | 0:bd6527c8f5f3 | 62 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 63 | GS_data[i][indices[5*fila+col]] = 0x00; |
Fiuba | 0:bd6527c8f5f3 | 64 | } |
Fiuba | 0:bd6527c8f5f3 | 65 | |
Fiuba | 0:bd6527c8f5f3 | 66 | void led_cube::next_alto (void) { |
Fiuba | 0:bd6527c8f5f3 | 67 | static int f = 0; |
Fiuba | 0:bd6527c8f5f3 | 68 | static int c = 0; |
Fiuba | 0:bd6527c8f5f3 | 69 | static bool prender = true; |
Fiuba | 0:bd6527c8f5f3 | 70 | |
Fiuba | 0:bd6527c8f5f3 | 71 | if (prender) prender_alto(f, c); |
Fiuba | 0:bd6527c8f5f3 | 72 | else apagar_alto(f, c); |
Fiuba | 0:bd6527c8f5f3 | 73 | |
Fiuba | 0:bd6527c8f5f3 | 74 | if ( ++c > 4 ) { |
Fiuba | 0:bd6527c8f5f3 | 75 | c = 0; |
Fiuba | 0:bd6527c8f5f3 | 76 | if ( ++f > 4 ) { |
Fiuba | 0:bd6527c8f5f3 | 77 | f = 0; |
Fiuba | 0:bd6527c8f5f3 | 78 | prender = not prender; |
Fiuba | 0:bd6527c8f5f3 | 79 | } |
Fiuba | 0:bd6527c8f5f3 | 80 | } |
Fiuba | 0:bd6527c8f5f3 | 81 | } |
Fiuba | 0:bd6527c8f5f3 | 82 | |
Fiuba | 0:bd6527c8f5f3 | 83 | void led_cube::next_alto_espiral (void) { |
Fiuba | 0:bd6527c8f5f3 | 84 | static int ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 85 | static bool prender = true; |
Fiuba | 0:bd6527c8f5f3 | 86 | |
Fiuba | 0:bd6527c8f5f3 | 87 | if (prender) prender_alto(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 88 | else apagar_alto(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 89 | |
Fiuba | 0:bd6527c8f5f3 | 90 | if ( ++ind > 25 ) { |
Fiuba | 0:bd6527c8f5f3 | 91 | ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 92 | prender = not prender; |
Fiuba | 0:bd6527c8f5f3 | 93 | } |
Fiuba | 0:bd6527c8f5f3 | 94 | } |
Fiuba | 0:bd6527c8f5f3 | 95 | |
Fiuba | 0:bd6527c8f5f3 | 96 | void led_cube::prender_largo (int piso, int fila) { |
Fiuba | 0:bd6527c8f5f3 | 97 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 98 | GS_data[piso][indices[5*fila+i]] = 0xFF; |
Fiuba | 0:bd6527c8f5f3 | 99 | } |
Fiuba | 0:bd6527c8f5f3 | 100 | |
Fiuba | 0:bd6527c8f5f3 | 101 | |
Fiuba | 0:bd6527c8f5f3 | 102 | void led_cube::apagar_largo (int piso, int fila) { |
Fiuba | 0:bd6527c8f5f3 | 103 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 104 | GS_data[piso][indices[5*fila+i]] = 0x00; |
Fiuba | 0:bd6527c8f5f3 | 105 | } |
Fiuba | 0:bd6527c8f5f3 | 106 | |
Fiuba | 0:bd6527c8f5f3 | 107 | void led_cube::next_largo_espiral (void) { |
Fiuba | 0:bd6527c8f5f3 | 108 | static int ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 109 | static bool prender = true; |
Fiuba | 0:bd6527c8f5f3 | 110 | |
Fiuba | 0:bd6527c8f5f3 | 111 | if (prender) prender_largo(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 112 | else apagar_largo(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 113 | |
Fiuba | 0:bd6527c8f5f3 | 114 | if ( ++ind > 25 ) { |
Fiuba | 0:bd6527c8f5f3 | 115 | ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 116 | prender = not prender; |
Fiuba | 0:bd6527c8f5f3 | 117 | } |
Fiuba | 0:bd6527c8f5f3 | 118 | } |
Fiuba | 0:bd6527c8f5f3 | 119 | |
Fiuba | 0:bd6527c8f5f3 | 120 | void led_cube::prender_ancho (int piso, int col) { |
Fiuba | 0:bd6527c8f5f3 | 121 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 122 | GS_data[piso][indices[5*i+col]] = 0xFF; |
Fiuba | 0:bd6527c8f5f3 | 123 | } |
Fiuba | 0:bd6527c8f5f3 | 124 | |
Fiuba | 0:bd6527c8f5f3 | 125 | |
Fiuba | 0:bd6527c8f5f3 | 126 | void led_cube::apagar_ancho (int piso, int col) { |
Fiuba | 0:bd6527c8f5f3 | 127 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 128 | GS_data[piso][indices[5*i+col]] = 0x00; |
Fiuba | 0:bd6527c8f5f3 | 129 | } |
Fiuba | 0:bd6527c8f5f3 | 130 | |
Fiuba | 0:bd6527c8f5f3 | 131 | |
Fiuba | 0:bd6527c8f5f3 | 132 | void led_cube::next_ancho_espiral (void) { |
Fiuba | 0:bd6527c8f5f3 | 133 | static int ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 134 | static bool prender = true; |
Fiuba | 0:bd6527c8f5f3 | 135 | |
Fiuba | 0:bd6527c8f5f3 | 136 | if (prender) prender_ancho(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 137 | else apagar_ancho(fil_espiral[ind], col_espiral[ind]); |
Fiuba | 0:bd6527c8f5f3 | 138 | |
Fiuba | 0:bd6527c8f5f3 | 139 | if ( ++ind > 25 ) { |
Fiuba | 0:bd6527c8f5f3 | 140 | ind = 0; |
Fiuba | 0:bd6527c8f5f3 | 141 | prender = not prender; |
Fiuba | 0:bd6527c8f5f3 | 142 | } |
Fiuba | 0:bd6527c8f5f3 | 143 | } |
Fiuba | 0:bd6527c8f5f3 | 144 | |
Fiuba | 0:bd6527c8f5f3 | 145 | void led_cube::uba_gode (void) { |
Fiuba | 0:bd6527c8f5f3 | 146 | prender_leds(); |
Fiuba | 0:bd6527c8f5f3 | 147 | |
Fiuba | 0:bd6527c8f5f3 | 148 | apagar_ancho(1,1); |
Fiuba | 0:bd6527c8f5f3 | 149 | apagar_ancho(1,2); |
Fiuba | 0:bd6527c8f5f3 | 150 | apagar_ancho(1,3); |
Fiuba | 0:bd6527c8f5f3 | 151 | apagar_ancho(2,1); |
Fiuba | 0:bd6527c8f5f3 | 152 | apagar_ancho(2,2); |
Fiuba | 0:bd6527c8f5f3 | 153 | apagar_ancho(2,3); |
Fiuba | 0:bd6527c8f5f3 | 154 | apagar_ancho(3,1); |
Fiuba | 0:bd6527c8f5f3 | 155 | apagar_ancho(3,2); |
Fiuba | 0:bd6527c8f5f3 | 156 | apagar_ancho(3,3); |
Fiuba | 0:bd6527c8f5f3 | 157 | apagar_ancho(4,1); |
Fiuba | 0:bd6527c8f5f3 | 158 | apagar_ancho(4,2); |
Fiuba | 0:bd6527c8f5f3 | 159 | apagar_ancho(4,3); |
Fiuba | 0:bd6527c8f5f3 | 160 | |
Fiuba | 0:bd6527c8f5f3 | 161 | apagar_largo(4,0); |
Fiuba | 0:bd6527c8f5f3 | 162 | apagar_largo(1,1); |
Fiuba | 0:bd6527c8f5f3 | 163 | apagar_largo(2,1); |
Fiuba | 0:bd6527c8f5f3 | 164 | apagar_largo(3,1); |
Fiuba | 0:bd6527c8f5f3 | 165 | apagar_largo(4,2); |
Fiuba | 0:bd6527c8f5f3 | 166 | apagar_largo(1,3); |
Fiuba | 0:bd6527c8f5f3 | 167 | apagar_largo(2,3); |
Fiuba | 0:bd6527c8f5f3 | 168 | apagar_largo(3,3); |
Fiuba | 0:bd6527c8f5f3 | 169 | apagar_largo(4,4); |
Fiuba | 0:bd6527c8f5f3 | 170 | |
Fiuba | 0:bd6527c8f5f3 | 171 | apagar_alto(0,1); |
Fiuba | 0:bd6527c8f5f3 | 172 | apagar_alto(0,2); |
Fiuba | 0:bd6527c8f5f3 | 173 | apagar_alto(0,3); |
Fiuba | 0:bd6527c8f5f3 | 174 | apagar_alto(1,1); |
Fiuba | 0:bd6527c8f5f3 | 175 | apagar_alto(1,2); |
Fiuba | 0:bd6527c8f5f3 | 176 | apagar_alto(1,3); |
Fiuba | 0:bd6527c8f5f3 | 177 | apagar_alto(3,1); |
Fiuba | 0:bd6527c8f5f3 | 178 | apagar_alto(3,2); |
Fiuba | 0:bd6527c8f5f3 | 179 | apagar_alto(3,3); |
Fiuba | 0:bd6527c8f5f3 | 180 | } |
Fiuba | 0:bd6527c8f5f3 | 181 | |
Fiuba | 0:bd6527c8f5f3 | 182 | // Prende y apaga leds de manera aleatoria |
Fiuba | 0:bd6527c8f5f3 | 183 | void led_cube::aleatorio (void) { |
Fiuba | 0:bd6527c8f5f3 | 184 | int x, y, z, on; |
Fiuba | 0:bd6527c8f5f3 | 185 | |
Fiuba | 0:bd6527c8f5f3 | 186 | x = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 187 | y = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 188 | z = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 189 | on = rand()%2; |
Fiuba | 0:bd6527c8f5f3 | 190 | |
Fiuba | 0:bd6527c8f5f3 | 191 | if (on == 1) |
Fiuba | 0:bd6527c8f5f3 | 192 | prender_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 193 | else |
Fiuba | 0:bd6527c8f5f3 | 194 | apagar_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 195 | } |
Fiuba | 0:bd6527c8f5f3 | 196 | |
Fiuba | 0:bd6527c8f5f3 | 197 | // Prende un solo led en todo el cubo |
Fiuba | 0:bd6527c8f5f3 | 198 | void led_cube::un_led_aleatorio (void) { |
Fiuba | 0:bd6527c8f5f3 | 199 | static int x, y, z; |
Fiuba | 0:bd6527c8f5f3 | 200 | |
Fiuba | 0:bd6527c8f5f3 | 201 | apagar_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 202 | |
Fiuba | 0:bd6527c8f5f3 | 203 | x = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 204 | y = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 205 | z = rand()%5; |
Fiuba | 0:bd6527c8f5f3 | 206 | |
Fiuba | 0:bd6527c8f5f3 | 207 | prender_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 208 | } |
Fiuba | 0:bd6527c8f5f3 | 209 | |
Fiuba | 0:bd6527c8f5f3 | 210 | // Un led camina aleatoriamente |
Fiuba | 0:bd6527c8f5f3 | 211 | void led_cube::un_led_caminando (void) { |
Fiuba | 0:bd6527c8f5f3 | 212 | static int x, y, z; |
Fiuba | 0:bd6527c8f5f3 | 213 | |
Fiuba | 0:bd6527c8f5f3 | 214 | apagar_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 215 | |
Fiuba | 0:bd6527c8f5f3 | 216 | x += rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 217 | y += rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 218 | z += rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 219 | |
Fiuba | 0:bd6527c8f5f3 | 220 | x = (x<0)? 0: (x>4)?4:x ; |
Fiuba | 0:bd6527c8f5f3 | 221 | y = (y<0)? 0: (y>4)?4:y ; |
Fiuba | 0:bd6527c8f5f3 | 222 | z = (z<0)? 0: (z>4)?4:z ; |
Fiuba | 0:bd6527c8f5f3 | 223 | |
Fiuba | 0:bd6527c8f5f3 | 224 | prender_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 225 | } |
Fiuba | 0:bd6527c8f5f3 | 226 | |
Fiuba | 0:bd6527c8f5f3 | 227 | // Rutina de generacion de la vibora |
Fiuba | 0:bd6527c8f5f3 | 228 | void led_cube::vibora_inicia (void) { |
Fiuba | 0:bd6527c8f5f3 | 229 | int vibora_tmp[5][3] = {{0,0,0},{0,0,1},{0,0,2},{0,0,3},{0,0,4}}; |
Fiuba | 0:bd6527c8f5f3 | 230 | for (int i=0; i<5; i++) { |
Fiuba | 0:bd6527c8f5f3 | 231 | for (int j=0; j<3; j++) vibora_leds[i][j] = vibora_tmp[i][j]; |
Fiuba | 0:bd6527c8f5f3 | 232 | prender_un_led(vibora_leds[i][0], vibora_leds[i][1], vibora_leds[i][2]); |
Fiuba | 0:bd6527c8f5f3 | 233 | } |
Fiuba | 0:bd6527c8f5f3 | 234 | } |
Fiuba | 0:bd6527c8f5f3 | 235 | |
Fiuba | 0:bd6527c8f5f3 | 236 | // Rutina de la vibora caminando |
Fiuba | 0:bd6527c8f5f3 | 237 | void led_cube::vibora_camina (void) { |
Fiuba | 0:bd6527c8f5f3 | 238 | int x, y, z; |
Fiuba | 0:bd6527c8f5f3 | 239 | bool seguir_tirando = true; |
Fiuba | 0:bd6527c8f5f3 | 240 | |
Fiuba | 0:bd6527c8f5f3 | 241 | if ( !vibora_viva ) { |
Fiuba | 0:bd6527c8f5f3 | 242 | vibora_inicia(); |
Fiuba | 0:bd6527c8f5f3 | 243 | vibora_viva = true; |
Fiuba | 0:bd6527c8f5f3 | 244 | } else { |
Fiuba | 0:bd6527c8f5f3 | 245 | // Eliminamos el ultimo led |
Fiuba | 0:bd6527c8f5f3 | 246 | apagar_un_led(vibora_leds[4][0], vibora_leds[4][1], vibora_leds[4][2]); |
Fiuba | 0:bd6527c8f5f3 | 247 | // Caminamos un paso |
Fiuba | 0:bd6527c8f5f3 | 248 | while (seguir_tirando) { |
Fiuba | 0:bd6527c8f5f3 | 249 | x = vibora_leds[0][0] + rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 250 | y = vibora_leds[0][1] + rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 251 | z = vibora_leds[0][2] + rand()%3-1; |
Fiuba | 0:bd6527c8f5f3 | 252 | |
Fiuba | 0:bd6527c8f5f3 | 253 | x = (x<0)? 0: (x>4)?4:x ; |
Fiuba | 0:bd6527c8f5f3 | 254 | y = (y<0)? 0: (y>4)?4:y ; |
Fiuba | 0:bd6527c8f5f3 | 255 | z = (z<0)? 0: (z>4)?4:z ; |
Fiuba | 0:bd6527c8f5f3 | 256 | |
Fiuba | 0:bd6527c8f5f3 | 257 | if (GS_data[x][indices[5*y+z]] == 0x00) seguir_tirando = false; |
Fiuba | 0:bd6527c8f5f3 | 258 | } |
Fiuba | 0:bd6527c8f5f3 | 259 | for (int i=4; i>=0; i--) { |
Fiuba | 0:bd6527c8f5f3 | 260 | for (int j=0; j<3; j++) { |
Fiuba | 0:bd6527c8f5f3 | 261 | vibora_leds[i+1][j] = vibora_leds[i][j]; |
Fiuba | 0:bd6527c8f5f3 | 262 | } |
Fiuba | 0:bd6527c8f5f3 | 263 | } |
Fiuba | 0:bd6527c8f5f3 | 264 | vibora_leds[0][0] = x; |
Fiuba | 0:bd6527c8f5f3 | 265 | vibora_leds[0][1] = y; |
Fiuba | 0:bd6527c8f5f3 | 266 | vibora_leds[0][2] = z; |
Fiuba | 0:bd6527c8f5f3 | 267 | |
Fiuba | 0:bd6527c8f5f3 | 268 | prender_un_led(x, y, z); |
Fiuba | 0:bd6527c8f5f3 | 269 | } |
Fiuba | 0:bd6527c8f5f3 | 270 | } |
Fiuba | 0:bd6527c8f5f3 | 271 | |
Fiuba | 0:bd6527c8f5f3 | 272 | void led_cube::prender_piso (int piso) { |
Fiuba | 0:bd6527c8f5f3 | 273 | for (int i=0; i<5; i++) |
Fiuba | 0:bd6527c8f5f3 | 274 | prender_ancho(piso, i); |
Fiuba | 0:bd6527c8f5f3 | 275 | } |
Fiuba | 0:bd6527c8f5f3 | 276 | |
Fiuba | 0:bd6527c8f5f3 | 277 | void led_cube::sube_ola_vert (int piso) { |
Fiuba | 0:bd6527c8f5f3 | 278 | switch (piso) { |
Fiuba | 0:bd6527c8f5f3 | 279 | case 0: |
Fiuba | 0:bd6527c8f5f3 | 280 | prender_piso(0); |
Fiuba | 0:bd6527c8f5f3 | 281 | break; |
Fiuba | 0:bd6527c8f5f3 | 282 | case 5: |
Fiuba | 0:bd6527c8f5f3 | 283 | prender_piso(4); |
Fiuba | 0:bd6527c8f5f3 | 284 | break; |
Fiuba | 0:bd6527c8f5f3 | 285 | default: |
Fiuba | 0:bd6527c8f5f3 | 286 | for (int i=1; i<4; i++) { |
Fiuba | 0:bd6527c8f5f3 | 287 | for (int j=1; j<4; j++) prender_un_led(piso, i, j); |
Fiuba | 0:bd6527c8f5f3 | 288 | } |
Fiuba | 0:bd6527c8f5f3 | 289 | prender_largo(piso-1, 0); |
Fiuba | 0:bd6527c8f5f3 | 290 | prender_largo(piso-1, 4); |
Fiuba | 0:bd6527c8f5f3 | 291 | prender_ancho(piso-1, 0); |
Fiuba | 0:bd6527c8f5f3 | 292 | prender_ancho(piso-1, 4); |
Fiuba | 0:bd6527c8f5f3 | 293 | } |
Fiuba | 0:bd6527c8f5f3 | 294 | } |
Fiuba | 0:bd6527c8f5f3 | 295 | |
Fiuba | 0:bd6527c8f5f3 | 296 | void led_cube::baja_ola_vert (int piso) { |
Fiuba | 0:bd6527c8f5f3 | 297 | switch (piso) { |
Fiuba | 0:bd6527c8f5f3 | 298 | case 0: |
Fiuba | 0:bd6527c8f5f3 | 299 | prender_piso(0); |
Fiuba | 0:bd6527c8f5f3 | 300 | break; |
Fiuba | 0:bd6527c8f5f3 | 301 | case 5: |
Fiuba | 0:bd6527c8f5f3 | 302 | prender_piso(4); |
Fiuba | 0:bd6527c8f5f3 | 303 | break; |
Fiuba | 0:bd6527c8f5f3 | 304 | default: |
Fiuba | 0:bd6527c8f5f3 | 305 | for (int i=1; i<4; i++) { |
Fiuba | 0:bd6527c8f5f3 | 306 | for (int j=1; j<4; j++) prender_un_led(piso-1, i, j); |
Fiuba | 0:bd6527c8f5f3 | 307 | } |
Fiuba | 0:bd6527c8f5f3 | 308 | prender_largo(piso, 0); |
Fiuba | 0:bd6527c8f5f3 | 309 | prender_largo(piso, 4); |
Fiuba | 0:bd6527c8f5f3 | 310 | prender_ancho(piso, 0); |
Fiuba | 0:bd6527c8f5f3 | 311 | prender_ancho(piso, 4); |
Fiuba | 0:bd6527c8f5f3 | 312 | } |
Fiuba | 0:bd6527c8f5f3 | 313 | } |
Fiuba | 0:bd6527c8f5f3 | 314 | |
Fiuba | 0:bd6527c8f5f3 | 315 | void led_cube::mueve_ola (void) { |
Fiuba | 0:bd6527c8f5f3 | 316 | static int p = 0; |
Fiuba | 0:bd6527c8f5f3 | 317 | static bool sube = true; |
Fiuba | 0:bd6527c8f5f3 | 318 | |
Fiuba | 0:bd6527c8f5f3 | 319 | apagar_leds(); |
Fiuba | 0:bd6527c8f5f3 | 320 | if ( sube ) { |
Fiuba | 0:bd6527c8f5f3 | 321 | sube_ola_vert(p); |
Fiuba | 0:bd6527c8f5f3 | 322 | if ( ++p > 4 ) sube = false; |
Fiuba | 0:bd6527c8f5f3 | 323 | } else { |
Fiuba | 0:bd6527c8f5f3 | 324 | baja_ola_vert(p); |
Fiuba | 0:bd6527c8f5f3 | 325 | if ( --p < 1 ) sube = true; |
Fiuba | 0:bd6527c8f5f3 | 326 | } |
Fiuba | 0:bd6527c8f5f3 | 327 | } |
Fiuba | 0:bd6527c8f5f3 | 328 | |
Fiuba | 0:bd6527c8f5f3 | 329 | // Cambia el demo que muestra |
Fiuba | 0:bd6527c8f5f3 | 330 | void led_cube::demo_inc (void) { |
Fiuba | 0:bd6527c8f5f3 | 331 | apagar_leds(); |
Fiuba | 0:bd6527c8f5f3 | 332 | if (++ind_demo > 7) { |
Fiuba | 0:bd6527c8f5f3 | 333 | ind_demo = 0; |
Fiuba | 0:bd6527c8f5f3 | 334 | vibora_viva = false; |
Fiuba | 0:bd6527c8f5f3 | 335 | } |
Fiuba | 0:bd6527c8f5f3 | 336 | } |
Fiuba | 0:bd6527c8f5f3 | 337 | |
Fiuba | 0:bd6527c8f5f3 | 338 | // Rutina que muestra el demo segun el indice |
Fiuba | 0:bd6527c8f5f3 | 339 | void led_cube::demo_show (void) { |
Fiuba | 0:bd6527c8f5f3 | 340 | switch (ind_demo) { |
Fiuba | 0:bd6527c8f5f3 | 341 | case 0: |
Fiuba | 0:bd6527c8f5f3 | 342 | prender_leds(); |
Fiuba | 0:bd6527c8f5f3 | 343 | break; |
Fiuba | 0:bd6527c8f5f3 | 344 | case 1: |
Fiuba | 0:bd6527c8f5f3 | 345 | uba_gode(); |
Fiuba | 0:bd6527c8f5f3 | 346 | break; |
Fiuba | 0:bd6527c8f5f3 | 347 | case 2: |
Fiuba | 0:bd6527c8f5f3 | 348 | next_alto(); |
Fiuba | 0:bd6527c8f5f3 | 349 | break; |
Fiuba | 0:bd6527c8f5f3 | 350 | case 3: |
Fiuba | 0:bd6527c8f5f3 | 351 | next_alto_espiral(); |
Fiuba | 0:bd6527c8f5f3 | 352 | break; |
Fiuba | 0:bd6527c8f5f3 | 353 | case 4: |
Fiuba | 0:bd6527c8f5f3 | 354 | un_led_caminando(); |
Fiuba | 0:bd6527c8f5f3 | 355 | break; |
Fiuba | 0:bd6527c8f5f3 | 356 | case 5: |
Fiuba | 0:bd6527c8f5f3 | 357 | //vibora_camina(); |
Fiuba | 0:bd6527c8f5f3 | 358 | //break; |
Fiuba | 0:bd6527c8f5f3 | 359 | case 6: |
Fiuba | 0:bd6527c8f5f3 | 360 | mueve_ola(); |
Fiuba | 0:bd6527c8f5f3 | 361 | break; |
Fiuba | 0:bd6527c8f5f3 | 362 | default: |
Fiuba | 0:bd6527c8f5f3 | 363 | un_led_aleatorio(); |
Fiuba | 0:bd6527c8f5f3 | 364 | } |
Fiuba | 0:bd6527c8f5f3 | 365 | } |