
[By DustyDingo, Public domain, Wikimedia Commons]
Descrición:
Nas anteriores prácticas xa vimos como visualizar datos na consola serie do Arduíno. Nesta sección imos ver algunhas posibilidades máis da comunicación entre o Arduíno e o PC.
Unha vez conectado Arduíno por USB, o primeiro que hai que facer é establecer a comunicación co PC a través do setup()
Serial.begin(9600); Inicia a comunicación serial a unha velocidade de 9600 baudios ou bps.
while(!Serial); Agarda ata que se conecte
Para desactivar a comunicación nalgún momento do programa e poder usar os pins 0 e 1 como E/S dixitais, pódese usar a función: Serial.end();
Para ver a consola ou monitor serie, unha vez cargado o programa no Arduíno, debemos premer na icona que aparece na parte superior dereita:

Algúns comandos:
Enviar datos á consola
Podemos enviar a través da pantalla do ordenador (consola serial) os valores dunha entrada analóxica ou dixital, o valor dunha variable, un comentario de texto, etc. enviado por Arduíno, a través das seguintes instrucións:
| Serial.println(a); | Imprime o valor da variable a | ||
| Serial.print(a); | Imprime o valor da variable a con salto de carro | ||
| Serial.print(a, formato); | Imprime o valor da variable a indicando o sistema de numeración
|
||
| Serial.write(dato); | Imprime na consola un carácter en ASCII
|
| Se queremos imprimir unha cadea de texto hai que utilizar aspas dobres. Para un carácter aspas simples. |
|
||
| Se queremos expresar unha variable enteira como texto e concatenala a unha cadea, previamente témola que transformar a tipo String: |
|
Recibir datos desde a consola
O Arduíno tamén pode recibir datos que lle chegan desde a consola.
| Serial.available(); | Indica se hai datos que chegan da consola (true ou false) | |||
| Serial.parseInt(); | Entrega o enteiro que se escribe no monitor serie | |||
| Serial.parseFloat(); | Entrega o decimal que se escribe no monitor serie | |||
| Serial.read(); | Entrega o decimal correspondente co ASCII | |||
Exemplo:
|
||||
Prácticas:
1. Decide ti os escintileos
1. Decide ti os escintileos: Conectamos un LED coa súa resistencia ao pin 13 e introducimos pola consola o número de veces que queiramos que un LED escintile
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Declaración de variables: int escintileos; int led = 13; // Configuración: void setup(){ Serial.begin(9600); // Inicia a comunicación serial while(!Serial); // Agarda ata que conecte pinMode(led, OUTPUT); } // Programa: void loop(){ Serial.println("Indica cantos escintileos queres (entre 1 e 9)"); while(! Serial.available()); // Agarda a que haxa datos no buffer escintileos = Serial.parseInt(); // lemos o número de escintileos if (escintileos >= 1 && escintileos <= 9){ // Se o valor está entre 1 y 9 Serial.println("O LED vai escintilar "+ String(escintileos) + " veces"); delay(500); for(int i=0;i<escintileos;i++){ // O LED escintila o nº de veces introducido digitalWrite(led, HIGH); delay(100); digitalWrite(led, LOW); delay(200); } } else { Serial.println("O dato debe estar comprendido entre 1 e 9"); } Serial.println(" "); // Imprime unha liña en branco Serial.println("preme a tecla 'r' para repetir de novo"); while(Serial.read() != 'r'); // Agarda ata ler o carácter 'r' Serial.println(" "); } |
2. Xogo binario
2. Xogo binario: Imos facer o seguinte cogo: O ordenador indica un número en binario e hai que introducir o valor en decimal. Se o resultado é correcto acéndese un LED verde, e se é falso acéndese un LED vermello. Ao mesmo tempo indica no monitor a solución.
Poderiamos facelo con calquera sistema de numeración. Para escribir na consola un número nun sistema determinado utilizamos a expresión Serial.println(valor,formato); sendo os formatos posibles DEC (decimal), HEX (hexadecimal), BIN (binario), OCT(octal), BYTE(ASCII)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// Declaración de variables: int ledverde= 13; int ledvermello= 12; int numero; int dato; // Configuración: void setup() { Serial.begin(9600); // Iniciamos a comunicación while(!Serial); // Agarda ata que conecte pinMode(ledverde, OUTPUT); pinMode(ledvermello, OUTPUT); randomSeed (analogRead(A0)); // para que non se repita a secuencia de números aleatorios lemos unha entrada sen conectar } // Programa: void loop(){ Serial.println("Para este número binario, cal é o valor en decimal?"); numero= random(32); // Xera un número aleatorio de 0 a 31 Serial.println(numero,BIN); // Expresa o seu equivalente en binario while(!Serial.available()); // Agarda a que haxa datos no buffer dato= Serial.parseInt(); // Garda o valor introducido na variable dato if(dato== numero){ Serial.println("Correcto! é "+ String(numero)); digitalWrite(ledverde, HIGH); digitalWrite(ledvermello, LOW); } else{ Serial.println("Mal, a solución era " + String(numero)); digitalWrite(ledverde, LOW); digitalWrite(ledvermello, HIGH); } delay(1000); digitalWrite(ledverde, LOW); digitalWrite(ledvermello, LOW); Serial.println(" "); } |
Propostas
- Control do xiro dun servo: Controla o ángulo de xiro dun servo introducíndoo desde o teclado. Coida que o ángulo debe estar comprendido entre 0 e 180º. Podes tomar o exemplo visto en “A posición dun servo” e modificalo.
- Puntuación: Engade ao programa do xogo binario o necesario para establecer a puntuación. Despois de 10 xogadas debe mostrar a puntuación obtida.
- Táboa: Xera na consola unha táboa cos n primeiros números en decimal, hexadecimal e binario. n debe ser introducido polo usuario ao principio do programa.