The led_cube library is a graphic library for led cubes.

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?

UserRevisionLine numberNew 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 }