Oder Text markieren und Enter drücken…

IG Serial Proxy (Arduino an Flash)

IG SerialProxy ist dazu da, Daten von der Seriellen Schnittstelle an Flash weiterzuleiten.

Wegen Sicherheitrestriktionen (Sandbox Prinzip) kann Flash nicht wie Processing oder VVVV auf die Serielle Schnittstelle zugreifen. Damit soll verhindert werden, dass ein Flashfilm der in eine Webseite eingebettet ist, für Schadsoftware missbraucht werden kann. Mit Flash hat man daher prinzipiell nur drei Möglichkeiten externe "Daten" zu übermitteln: Keyboard, Maus und Netzwerk.

Mit dem Programm IG SerialProxy kann allerdings Flash um die Fähigkeit erweitert werden mit der Seriellen Schnittstelle zusammenzuarbeiten. Damit kann Flash jetzt auch beispielsweise mit einem Arduino Board benutzt werden.

Zuerst muss dafür gesorgt werden, dass Arduino Werte an die Serielle Schnittstelle sendet. Das Beispiel "example_arduino" sendet z.B. immer zwei Werte von Pin 0 und 1 an den Computer. Das Datenpacket hat dabei die Strukur: Wert potPinA ; Wert potPinB NewLine also z.B. "423;678\n". Zu Wissen mit welchem Zeichen das Datenpacket beendet (terminiert) wird und mit welcher Baudrate (hier 9600), ist später wichtig für die Konfiguration des IG SerialProxys.

// example_arduino.pde

// this example assumes that you have to potis connected to pin 0 and 1
// select the input pin for the potentiometer

int potPinA = 0;
int potPinB = 1;

void setup() {
  // openserial port to send data to computer
  Serial.begin(9600);
}

void loop(){
  // send potis values (from 0 to 1023)
  Serial.print(analogRead(potPinA));
  Serial.print(';');
  Serial.println(analogRead(potPinB));
  delay(50); // stop for a while
}


Im Idealfall muss jetzt nur noch ig_serialproxy.pde gestartet werden und die entsprechenden Parameter eingestellt werden, in diesem Beispiel: Serial Port (dort wo Arduino angeschlossen ist), Baudrate (9600) und mit welchen Zeichen das Datenpacket (10 new line) terminiert ist. Ist alle richtig eingestellt werden die Linien grün ... im rechten Bild ist beispielsweise nicht der richtige Serial Port gewählt.

proxyproxy2

Bei Bedarf kann ig_serialproxy.pde auch um neue Terminatoren, Baudrates erweitert werden bzw. der Netzwerk Port verändert werden.

...
// ig_serialproxy.pde
int networkPort = 5331;

// baud rate to use for serial communication
// this needs to match the speed used by your external device

int[] serialBaudRates = {
  9600, 14400, 19200};
 
// data package terminators 
String[] terminatorNames = {
  "0 null", "10 new line", "11 tab", "13 carriage return"};
int[] terminatorsASCII = {
  0, 10, 11, 13};
...


Jetzt muss nur noch Flash gestartet werden und in Flash die Werte aus (4) in die Beispieldatei eingetragen werden. Befindet sich die Flash Datei auf dem gleichen Rechner  an dem auch Arduino angeschlossen ist, empfiehlt sich die IP 127.0.0.1 (local host) zu benutzten ansonsten kann mit der IP-Adresse (ip lan) auch von allen anderen Rechner im Netz auf die Werte zugegriffen werden. Dann aber nicht vergessen die Firewall entsprechend einzustellen.

// serial_test.fla

// accumulates data coming from arduino
var sensorData:String = "";

// connects to arduino board
var arduino:SerialPort = new SerialPort();
arduino.addEventListener(DataEvent.DATA, onArduinoData );
arduino.connect( "127.0.0.1", 5331 );

function onArduinoData( event:DataEvent ):void
{
    trace( "onArduinoData", event.data );
    mcDebug.debug.text = event.data
}


Dann ig_serialproxy.pde starten und danach die Flash Datei, ist alles richtig eigestellt, kommen die Werte von Arduino auch in Flash an.

flash

Das Flashbeispiel ist original von http://www.tinker.it/en/Projects/TinkerProxy