Condicional If
A continuación vamos a introducirnos con el condicional if, el sketch que acompaña esta publicación es un tanto particular, con él obtenemos por consola la tabla ASCII con su valor decimal, hexadecimal, octal y su valor char, a este programa yo le llamo "Utilidad" y así lo tengo guardado en su correspondiente carpeta.
El código ASCII es interesante tenerlo siempre a mano. Las particularidades de este scketch son dos, la primera es que vamos a controlar el flujo a través de un condicional IF, bueno en realidad hay que saber que la función void loop() va a seguir ejecutándose lo que hacemos es imprimir por pantalla UNA sola vez lo que nos interesa. (Lineas 33 y 58)
Y la otra particularidad está en la función write() que utilizamos en este caso para que nos haga un casting del valor decimal al valor de su Char correspondiente. (Linea 53) Como los valores Char no son todos imprimibles he tenido que auxiliarlo con un array de Strings, que imprime en su caso la actuación que lleva a cabo.
Nótese que la cabecera se imprime desde el void setup() que como ya sabemos solo se ejecutará una vez. También hay que fijarse en los nuevos parámetros que la función print() reconoce DEC, HEX, OCT y BIN, la función convierte o hace una especie de casting; coge el valor del primer parámetro, lo convierte al formato del segundo parámetro e imprime el resultado.
Aquí debajo os dejo una captura del resultado por consola:
Y a continuación el código:
A continuación vamos a introducirnos con el condicional if, el sketch que acompaña esta publicación es un tanto particular, con él obtenemos por consola la tabla ASCII con su valor decimal, hexadecimal, octal y su valor char, a este programa yo le llamo "Utilidad" y así lo tengo guardado en su correspondiente carpeta.
El código ASCII es interesante tenerlo siempre a mano. Las particularidades de este scketch son dos, la primera es que vamos a controlar el flujo a través de un condicional IF, bueno en realidad hay que saber que la función void loop() va a seguir ejecutándose lo que hacemos es imprimir por pantalla UNA sola vez lo que nos interesa. (Lineas 33 y 58)
Y la otra particularidad está en la función write() que utilizamos en este caso para que nos haga un casting del valor decimal al valor de su Char correspondiente. (Linea 53) Como los valores Char no son todos imprimibles he tenido que auxiliarlo con un array de Strings, que imprime en su caso la actuación que lleva a cabo.
Nótese que la cabecera se imprime desde el void setup() que como ya sabemos solo se ejecutará una vez. También hay que fijarse en los nuevos parámetros que la función print() reconoce DEC, HEX, OCT y BIN, la función convierte o hace una especie de casting; coge el valor del primer parámetro, lo convierte al formato del segundo parámetro e imprime el resultado.
Aquí debajo os dejo una captura del resultado por consola:
Y a continuación el código:
int i, x; // las variables declaradas aqui tienen un alcance global y seran reconocidas tanto por el void setup como por el void loop // las variables anteriores NO se han inicializado, al hacer esto la variable toma su valor inicial por defecto, que es cero. // declaramos un array de tipo String (que contendra cadenas de caracteres) llamada noImpr y que tendra 33 elementos String noImpr[33]= {"[NULL],Caracter Nulo", "[SQH],Inicio Cabecera", "[STX],Inicio Texto", "[ETX],Fin texto", "[EOT],Fin Transmison", "[ENQ],Identificacion", "[ACK],Acuse recibo", "[BEL],Timbre", "[BS],Retroceso", "[HT],Tab. horizontal", "[LF],Nueva Linea", "[VT],Tab. vertical", "[FF],Nueva Pagina", "[CR],Retorno carro", "[SO],Desplaza afuera", "[SI],Desplaza adentro", "[DLE],Esc. vinculo datos", "[DC1],Control disp.1", "[DC2],Control disp.2", "[DC3],Control disp.3", "[DC4],Control disp.4", "[NAK],Conf. negativa", "[SYN],Inactividad sincr.", "[ETB],Fin bloque trans.", "[CAN],Cancelar", "[EM],Fin del Medio", "[SUB],Sustitucion", "[ESC],Escape", "[FS],Separacion arch.", "[GS],Separacion grupos", "[RS],Separacion registros", "[US],Separacion Unid.", "[ ],Espacio en blanco" }; void setup() { Serial.begin(9600); // abre el puerto serie a 9600 bps para mostrar los resultados por consola // imprime la cabecera Serial.print("DEC\t"); // imprime la cabecera DEC y tabula por \t Serial.print("HEX\t"); // imprime la cabecera HEX y tabula por \t Serial.print("OCT\t"); // imprime la cabecera OCT y tabula por \t Serial.print("BIN\t"); // imprime la cabecera BIN y tabula por \t Serial.print("Char\n");// imprime la cabecera Char y hace salto de linea por \n } void loop() { if (x < 128){ // Cuando x sea igual o mayor a 128 dejara de entrar en este condicional // imprime la salida en varios formatos: Serial.print(i, DEC); // imprime como un ASCII-codificado decimal Serial.print("\t"); // imprime un tab Serial.print(i, HEX); //imprime como un ASCII-codificado hexadecimal Serial.print("\t"); // imprime un tab Serial.print(i, OCT); // imprime como un ASCII-codificado octal Serial.print("\t"); // imprime un tab Serial.print(i, BIN); // imprime como un ASCII-codificado binario Serial.print("\t"); // imprime un tab if(i==127){Serial.print("[DEL],Suprimir");} // imprime el valor indicado, si i es igual a 127 if(i<33){ // si i es inferior a 33 entra aqui Serial.println(noImpr[i]); // Toma la cadena del array noImpr } else { // si i NO es inferior a 33 entra aqui Serial.write(i); // imprime el valor char de ASCII Serial.println(); // imprime un salto de linea } i++; // suma un valor a i x++; // suma un valor a x } // cierra el condicional de x } // Cierra void loop
Por cierto, el código ASCII se diferencia en tres grupos; 1- Los no imprimibles (éstos son los que he incluido en el array noImpr[], para que sepais lo que hace) 2- Los imprimibles (son los que si se imprimen) y 3 - ASCII extendido; si deseas emplear algún "simbolito extraño" basta que cambies la linea 33: 'x < 128' por 'x < 256'
No hay comentarios:
Publicar un comentario
Gracias por tu comentario, en breve lo revisaremos.