Learning   Examples | Foundations | Hacking | Links

Ejemplos > Comunicación.

Llamada y respuesta serie (handshaking) con salida codificada en ASCII.

Un ejemplo de comunicación basada en cadenas entre la Arduino y el ordenador utilizando un método de llamada-respuesta (handshaking).

Este programa envía una cadena ASCII para comenzar y la repite hasta que obtiene una respuesta desde el ordenador. Después envía tres valores, obtenidos de sensores, codificados en ASCII, separados con comas y terminados por un fin de línea con retorno de carro, y espera otra respuesta desde el ordenador.

Puedes usar el monitor serie de Arduino para ver los datos enviados. También pueden ser leidos por Processing (ver código mas adelante), Flash, PD, Max/MSP (ver ejemplo mas adelante), etc. Los ejemplos siguientes dividen las cadenas de entrada con comas y convierten la cadena en números otra vez.

Compara esto con el ejemplo de llamada y respuesta serie. Son similares, ambos utilizan el método del aptretón de manos (handshaking), pero este codifica las lecturas de los sensores como cadenas, mientras que el otro envía valores binarios. Mientras que enviar cadenas codificadas como ASCII consume más bytes, lo cual significa que puedes enviar fácilmente valores mayores de 255 para cada lectura del sensor.

Circuito.

  • Entradas analógicas conectadas a los pines analógicos 0 y 1.
  • Interruptor conectado a la E/S digital 2.

Clicar la imagen para agrandarla.

Imagen generada con Fritzing. Para ver más circuitos de ejemplo, ver la página del proyecto Fritzing.

Esquema.

Pincha sobre la imagen para agrandarla.

Código:

 
     
     
       
  

     
     

Código de Processing.

/*  
 Serial Call and Response in ASCII 
 Language: Processing

 Reads in a string of characters from a serial port until 
 it gets a linefeed (ASCII 10).  Then splits the string into 
 sections separated by commas. Then converts the sections to ints, 
 and prints them out.

 created 2 Jun 2005
 modified 14 Apr 2009
 by Tom Igoe

This example code is in the public domain.
 */

import processing.serial.*;     // import the Processing serial library
Serial myPort;                  // The serial port

float bgcolor;			// Background color
float fgcolor;			// Fill color
float xpos, ypos;	        // Starting position of the ball

void setup() {
  size(640,480);

  // List all the available serial ports
  println(Serial.list());

  // I know that the first port in the serial list on my mac
  // is always my  Arduino module, so I open Serial.list()[0].
  // Change the 0 to the appropriate number of the serial port
  // that your microcontroller is attached to.
  myPort = new Serial(this, Serial.list()[0], 9600);

  // read bytes into a buffer until you get a linefeed (ASCII 10):
  myPort.bufferUntil('\n');

  // draw with smooth edges:
  smooth();
}

void draw() {
  background(bgcolor);
  fill(fgcolor);
  // Draw the shape
  ellipse(xpos, ypos, 20, 20);
}

// serialEvent  method is run automatically by the Processing applet
// whenever the buffer reaches the  byte value set in the bufferUntil() 
// method in the setup():

void serialEvent(Serial myPort) { 
  // read the serial buffer:
  String myString = myPort.readStringUntil('\n');
  // if you got any bytes other than the linefeed:
    myString = trim(myString);

    // split the string at the commas
    // and convert the sections into integers:
    int sensors[] = int(split(myString, ','));

    // print out the values you got:
    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t"); 
    }
    // add a linefeed after all the sensor values are printed:
    println();
    if (sensors.length > 1) {
      xpos = map(sensors[0], 0,1023,0,width);
      ypos = map(sensors[1], 0,1023,0,height);
      fgcolor = sensors[2];
    }
    // send a byte to ask for more data:
    myPort.write("A");
  }

Salida.

Tal como cambia el valor de los sensores analógicos podrás observar movimiento en la bola de la pantalla como en la imagen siguiente. Cuando desconectas el interruptor la bola desaparece.

Código Max.

El esquema Max queda así. El texto del esquema esta unido a la imagen.

Share