
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.print(a); | Imprime o valor da variable a |
| Serial.println(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.println(78, BIN); // Imprime 1001110 (binario) Serial.println(78,DEC); // Imprime 78 (decimal) Serial.println(78,HEX); // Imprime 4E (hexadecimal) Serial.println(char(78)); // Imprime “N” (78 no ASCII = N) |
| Serial.write(dato); | Imprime na consola un carácter en ASCII
Serial.write(78); // Transmite “N” (78 no ASCII = N) |
| Se queremos imprimir unha cadea de texto hai que utilizar aspas dobres. Para un carácter aspas simples. |
Serial.println("Ola, Bo día");
Serial.print('a');
|
| Se queremos expresar unha variable enteira como texto e concatenala a unha cadea, previamente témola que transformar a tipo String: |
int a; Serial.println( “O resultado é: ” + String(a) + " cm"); |
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:
dato=Serial.read(); // Le un carácter e almacénao en decimal correspondente co ASCII Serial.write(dato); // Imprime na consola o carácter recibido en ASCII |
||
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
// 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)
// 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.