Cambios

Ir a la navegación Ir a la búsqueda
Busca en cnbGuatemala con Google

Página creada con «{{Título}} Cuando se envía más de un dato del Arduino a otro sistema es necesario implementar reglas de comunicación adicionales para poder distinguir a que dato corre...»
{{Título}}

Cuando se envía más de un dato del Arduino a otro sistema es necesario implementar reglas de comunicación adicionales para poder distinguir a que dato corresponde cada uno de los paquetes de bytes recibidos. Una manera simple y eficiente de hacer esto es jugando al “toma y dame”. Arduino no enviará los valores de los sensores hasta que Processing no le envíe también un valor por el puerto serial y Processing, a su vez, no enviara ese valor hasta no tener los datos que espera completos.

Este sería el código para Arduino usando tres potenciómetros en los últimos tres pines analógicos del ATmega:
[[Archivo:Arduino ATmega con tres potenciómetros conectados en últimos 3 pines analógicos.png|alt=Arduino ATmega con tres potenciómetros conectados en últimos 3 pines analógicos|centre|frameless|354x354px|Arduino ATmega con tres potenciómetros conectados en últimos 3 pines analógicos]]

'''Codigo para cargar en la tarjeta Arduino desde el IDE Arduino'''

<code>int pot1= 0; // valores de los sensores analógicos</code>

<code>int pot2= 0;</code>

<code>int pot3= 0;</code>

<code>int inByte = 0; // valor entrante de Processing</code>

<code>void setup()</code>

<code>{</code>

<code>Serial.begin(9600);</code>

<code>}</code>

<code>void loop()</code>

<code>{</code>

<code>if (Serial.available() > 0) { // sólo si algo ha llegado</code>

<code>inByte = Serial.read(); // lo lee</code>

<code>// hace la lectura de los sensores en pines 3,4y 5 (análogos)</code>

<code>pot1 = analogRead(3)/4;</code>

<code>pot2 = analogRead(4)/4;</code>

<code>pot3 = analogRead(5)/4; </code>

<code>// y los envía Serial.print(pot1, BYTE); Serial.print(pot2, BYTE); Serial.print(pot3, BYTE);</code>

<code>}</code>

<code>}</code>

Una vez cargado este programa en la tarjeta Arduino está en disposición de enviar los datos de las lecturas de los potenciómetros cuando le sean demandados por el programa que los requiera. En nuestro ejemplo vamos a escribir un programa en el IDE Processing y será este el que se ocupe de leer los datos y con ellos modificar la posición de una bola que aparecerá en pantalla

Será processing quién empezará el “toma y dame” y deberá reconocer cada dato. Este es el código:

'''Código para Processing'''

<code>import processing.serial.*;</code>

<code>Serial puerto;</code>

<code>int[] datosEntrantes = new int[3]; // arreglo para recibir los tres datos</code>

<code>int cuantosDatos = 0; // contador</code>

<code>int posX, posY, posZ; // posición de un objeto 3D</code>

<code>boolean hayDatos = false; // control de verdad</code>

<code>void setup() {</code>

<code>size(400, 400, P3D);</code>

<code>noStroke();</code>

<code>println(Serial.list());// puertos serie disponibles</code>

<code>puerto = new Serial(this, Serial.list()[0], 9600); // Configuración del puerto</code>

<code>puerto.write(65);</code>

<code>// Envía el primer dato para iniciar el toma y dame</code>

<code>}</code>

<code>void draw() {</code>

<code>background(0);</code>

<code>lights();</code>

<code>fill(30,255,20);</code>

<code>translate(width/2 + posX, height/2 + posY, posZ); sphere(40);</code>

<code>if (hayDatos == false) { //si no hay datos envía uno</code>

<code>puerto.write(65);</code>

<code>}</code>

<code>}</code>

<code>// esta función corre cada vez que llega un dato serial </code>

<code>void serialEvent(Serial puerto) {</code>

<code>if (hayDatos == false) {</code>

<code>hayDatos = true; // de ahora en adelante el dato de envío se dará por el toma y dame</code>

<code>}</code>

<code>// Lee el dato y lo añade al arreglo en su última casilla</code>

<code>datosEntrantes[cuantosDatos] = puerto.read();</code>

<code>cuantosDatos++;</code>

<code>if (cuantosDatos > 2 ) { // Si ya hay tres datos en el arreglo</code>

<code>posX = datosEntrantes[0];</code>

<code>posY = datosEntrantes[1];</code>

<code>posZ = datosEntrantes[2];</code>

<code>println("Valores de los potenciometros: " + posX + "," + posY + "," + posZ);</code>

<code>puerto.write(65); // y envía para pedir más</code>

<code>cuantosDatos = 0; // y todo empieza de nuevo</code>

<code>}</code>

<code>}</code> 
[[Archivo:Imagen pantalla - punto verde.png.png|alt=Imagen pantalla - punto verde.png|centre|frameless|267x267px|Imagen pantalla - punto verde.png]]
[[Archivo:IDE processing con captura de valres de tres potenciómetros - captura de pantalla Windows.png|alt=IDE processing con captura de valres de tres potenciómetros - captura de pantalla Windows|centre|frameless|492x492px|IDE processing con captura de valres de tres potenciómetros - captura de pantalla Windows]]
Aspecto del IDE Processing cuando esta en funcionamiento el programa de captura de valores de los tres potenciómetros. 
[[Categoría:Tecnología]]

Menú de navegación