Miguel me envía un interesante proyecto realizado por James Alliban. Se trata de una pantalla táctil casera que utiliza dos sensores PING))) de Parallax para detectar la distancia vertical. Ha utilizado un pequeña script en Flash AS3 junto con Serproxy para dibujar unos botones e incluso un pequeño sistema de partículas.
No os perdais video y enlace a continuación...
Gracias Miguel por la noticia!
Enlace: Flash range sensor
Configuración serproxy
newlines_to_nils=false comm_ports=3 comm_baud=57600 comm_databits=8 comm_stopbits=1 comm_parity=none timeout=300 net_port3=5333
ActionScript
/*
Author James Alliban - https://jamesalliban.wordpress.com
This code has been writted specifically to be used for interfacing with the PING Ultrasonic
Range Finder using the Arduino microcontroller and communicating via SerProxy. If anyone makes
anything interesting with it, or improves upon it in any way, please email me at
me@jamesalliban.co.uk
*/
package
{
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.net.Socket;
import flash.events.ProgressEvent;
public class RangeFinderData
extends Sprite
{
private var s : Socket;
private var prevInput : String; // the previously processed input (returned value)
private var currInput : String; // the currently processed input
private var finalInput : String; // the input after processing
public function RangeFinderData()
{
init();
}
public function init() : void
{
s = new Socket("127.0.0.1", 5333);
s.addEventListener(ProgressEvent.SOCKET_DATA, sData);
}
private function sData( e:ProgressEvent ) : void
{
// read the correct data from the socket. In this instance. This arrives in millimeters
// preceeded by "A"
var sData:String = s.readUTFBytes( s.bytesAvailable );
if (isDataCorrect(sData)) {
if (sData.indexOf( "A" ) == 0) {
prevInput = currInput;
currInput = sData.substr( 1 );
} else {
currInput += sData;
}
trace( "prevInput = '" + prevInput + "'" );
}
}
function isDataCorrect( sData:String ) : Boolean
{
// occasionally, between real results the data returned consists of a carriage return
// then a zero.
if (parseInt(sData) == 0 && sData.length > 1) return false;
// another occasional unwanted reult
if (sData == "") return false;
if (sData == "0") return false;
return true;
}
}
}
Programa Arduino
/* Ultrasound Sensor
*------------------
*
* Reads values (00014-01199) from an ultrasound sensor (3m sensor)
* and writes the values to the serialport.
*
* https://www.xlab.se | https://www.0j0.org
* copyleft 2005 Mackie for XLAB | DojoDave for DojoCorp
*
*/
int ultraSoundSignal = 7; // Ultrasound signal pin
int val = 0;
int ultrasoundValue = 0;
int timecount = 0; // Echo counter
int ledPin = 13; // LED connected to digital pin 13
void setup() {
Serial.begin(9600); // Sets the baud rate to 9600 - was Serial.begin(9600);
pinMode(ledPin, OUTPUT); // Sets the digital pin as output
}
void loop() {
timecount = 0;
val = 0;
pinMode(ultraSoundSignal, OUTPUT); // Switch signalpin to output
/* Send low-high-low pulse to activate the trigger pulse of the sensor
* -------------------------------------------------------------------
*/
digitalWrite(ultraSoundSignal, LOW); // Send low pulse
delayMicroseconds(2); // Wait for 2 microseconds
digitalWrite(ultraSoundSignal, HIGH); // Send high pulse
delayMicroseconds(5); // Wait for 5 microseconds
digitalWrite(ultraSoundSignal, LOW); // Holdoff
/* Listening for echo pulse
* -------------------------------------------------------------------
*/
pinMode(ultraSoundSignal, INPUT); // Switch signalpin to input
val = digitalRead(ultraSoundSignal); // Append signal value to val
while(val == LOW) { // Loop until pin reads a high value
val = digitalRead(ultraSoundSignal);
}
while(val == HIGH) { // Loop until pin reads a high value
val = digitalRead(ultraSoundSignal);
timecount = timecount +1; // Count echo pulse time
}
/* Writing out values to the serial port
* -------------------------------------------------------------------
*/
ultrasoundValue = timecount; // Append echo pulse time to ultrasoundValue
serialWrite('A'); // Example identifier for the sensor
printInteger(ultrasoundValue);
serialWrite(10);
serialWrite(13);
/* Lite up LED if any value is passed by the echo pulse
* -------------------------------------------------------------------
*/
if(timecount > 0){
digitalWrite(ledPin, HIGH);
}
/* Delay of program
* -------------------------------------------------------------------
*/
Serial.print( "val = " + val );
delay(100);
}
