Monitor serie

320px-arduino_usb_socket-1
[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:

monitor_serie

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

  1. 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.
  2. 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.
  3. 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.

 


Deixa un comentario