INDICE
- Ordenadores
- Arduino
- Cómo enviar múltiples señales desde el Arduino a Processing
Libro Relacionado
Arduino Para Dummies
Por John Nussey
Lo único mejor que enviar señales a Procesamiento es enviar múltiples señales, ¿verdad? Sin embargo, el envío de múltiples señales es a menudo un escollo, ya que aunque el envío de valores desde múltiples sensores es fácil, su manejo en el orden correcto en el otro extremo a menudo puede ser difícil.
Necesitas:
- Un Arduino Uno
- Una protoboard
- Dos potenciómetros de 10k ohmios
- Un pulsador
- Una resistencia de 10k ohmios
- Alambres de salto
El circuito es una combinación de tres entradas separadas. Aunque todos utilizan la misma potencia y tierra, puede pensar en las entradas individualmente. Dos potenciómetros proporcionan dos valores. Estos están cableados de la misma manera que un sensor de temperatura, con un lado cableado a 5V y el otro cableado a la clavija de entrada analógica que lo está leyendo, así como a GND a través de una resistencia.
Estos pueden ser reemplazados por cualquier entrada analógica con las resistencias apropiadas. El botón también proporciona una entrada digital. Un lado del pulsador está conectado a 5V y el otro al pin digital que lo lee, así como a GND a través de una resistencia.
Cómo configurar el código de Arduino
Después de ensamblar su circuito, necesita el software apropiado para usarlo. En el menú Arduino, elige File→Examples→04.Communication→SerialCallResponse. Este sketch contiene tanto el código de Arduino como el código de Processing relevante para que el sketch funcione. El código Processing bajo el código de Arduino está comentado para evitar interferencias con el sketch de Arduino.
/* Idioma de llamada en serie y respuesta: Wiring/Arduino Este programa envía un ASCII A (byte de valor 65) al inicio y lo repite hasta que recibe algunos datos. Luego espera un byte en el puerto serie y envía tres valores de sensor cada vez que recibe un byte. Gracias a Greg Shakar y Scott Fitzgerald por las mejoras del circuito: * Este código de ejemplo es de dominio público. http://www.arduino.cc/en/Tutorial/SerialCallResponse */int firstSensor = 0; // primer sensor analógico y segundo sensor analógico y tercer sensor; // segundo sensor analógico y tercer sensor; // digital sensorint inByte = 0; // configuración de entrada de byte serie bytevoid setup(){ // inicio puerto serie a 9600 bps: Serial.begin(9600); mientras que (!Serial) { ; // espera a que se conecte el puerto serie. Necesario sólo para Leonardo } pinMode(2, INPUT); // el sensor digital está en el pin digital 2 establishContact(); // enviar un byte para establecer contacto hasta que el receptor // responda}void loop(){ // si obtenemos un byte válido, leer las entradas analógicas: si (Serial.available() > 0) { // obtener el byte entrante: inByte = Serial.read(); // leer la primera entrada analógica, dividir por 4 para hacer el rango 0-255: firstSensor = analogRead(A0)/4; // retrasar 10ms para que el ADC se recupere: delay(10); // leer la segunda entrada analógica, dividir por 4 para hacer el rango 0-255: secondSensor = analogRead(1)/4; // leer el interruptor, mapearlo a 0 o 255L thirdSensor = map(digitalRead(2), 0, 0, 1, 0, 255); // enviar los valores del sensor: Serial.write(firstSensor); Serial.write(secondSensor); Serial.write(thirdSensor); }}}void establishContact() { while (Serial.available() <= 0) { Serial.print('A'); // send a capital A delay(300); }}.
Sube este código a tu Arduino.
Cómo configurar el código de procesamiento
El código de Processing se encuentra en los marcadores de comentarios multilínea (/* */) en la parte inferior del sketch SerialCallResponse de Arduino. Copie el código dentro de los marcadores de comentarios en un nuevo bosquejo de Processing y guárdelo con un nombre apropiado.
// Este código de ejemplo está en el dominio público.import processing.serial.*int bgcolor; // Background colorint fgcolor; // Fill colorSerial myPort; // The serial portint[] serialInArray = new int[3]; // Donde pondremos lo que recibimos serialCount = 0; // A count of how many bytes we receiveint xpos, ypos; // Starting position of the ballboolean firstContact = false; // Si hemos oído hablar de la configuración de evitar el microcontrolador // { size(256, 256); // Stage size noStroke(); // No border on the next thing drawn // Establezca la posición inicial de la bola (en el centro del escenario) / Expos = width/2; ypos = height/2; // Imprima una lista de los puertos seriales, para propósitos de depuración: println(Serial.list()); // Sé que el primer puerto en la lista serial de mi mac // es siempre mi adaptador FTDI, así que abro Serial.list()[0]. // En máquinas Windows, esto generalmente abre COM1. // Abre el puerto que estés usando. String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600);}void draw() { background(bgcolor); fill(fgcolor); // Draw the shape ellipse(xpos, ypos, 20, 20);}void serialEvent(Serial myPort) { // read a byte from the serial port: int inByte = myPort.read(); // si este es el primer byte recibido, y es una A, // borra el buffer serial y nota que has // tenido el primer contacto del microcontrolador. // De lo contrario, agregue el byte entrante a la matriz: si (firstContact == false) { si (inByte == 'A') { myPort.clear(); // borre el buffer del puerto serie firstContact = true; // ha tenido el primer contacto desde el microcontrolador myPort.write('A'); // pida más }. else { // Añadir el último byte del puerto serie a la matriz: serialInArray[serialCount] = inByte; serialCount++; // Si tenemos 3 bytes: if (serialCount > 2) { xpos = serialInArray[0]; ypos = serialInArray[1]; fgcolor = serialInArray[2]; // imprimir los valores (sólo con fines de depuración): println(xpos + "t" + ypos + "t" + fgcolor); // Enviar una A mayúscula para solicitar nuevas lecturas de sensor: myPort.write('A'); // Reset serialCount: serialCount = 0; } }}
Haga clic en el botón Ejecutar para ejecutar el sketch de Procesamiento y aparecerá un applet. El applet tiene un fondo negro, y cada vez que se presiona el botón pulsador, aparece un punto blanco. Mueva los potenciómetros para mover el punto horizontal y verticalmente. Al soltar el pulsador, el punto desaparece.