...
Code Block |
---|
language | cpp |
---|
title | Arduino |
---|
collapse | true |
---|
|
void setup()
{
// open the serial port with a baudrate of 9600
Serial.begin(9600);
}
void loop()
{
// reading of pins
int firstValue = analogRead(A0);
int secondValue = analogRead(A1);
// writing of a single line to serial "100,200"
Serial.print(firstValue);
Serial.print(',');
Serial.print(secondValue);
Serial.println(); // <- finish of line
} |
...
Code Block |
---|
language | java |
---|
title | Processing |
---|
collapse | true |
---|
|
import processing.serial.*;
Serial myPort;
int firstValue, secondValue;
void setup()
{
size(500, 500);
// print all available ports
println(Serial.list());
// open specific serial port
myPort = new Serial(this, "/dev/cu.usbmodem12131", 9600);
}
void draw()
{
// draw ellipse
background(0);
fill(255);
ellipse(width/2, height/2, firstValue, secondValue);
}
void serialEvent(Serial myPort)
{
// check if data is available
if (myPort.available() == 0)
{
return;
}
// read a line as a string
String str = myPort.readStringUntil('\n');
if (str == null)
{
return;
}
// remove leading and trailing whitespace
str = trim(str);
// split string
String vals[] = split(str, ",");
if (vals.length != 2) {
return;
}
// convert values
firstValue = int(vals[0]);
secondValue = int(vals[1]);
println(firstValue, secondValue);
} |
Processing zu Arduino
Auf der Seite von Processing können wir einfach die Funktion *.write() aus der Serial Library nutzen. Es ist lediglich darauf zu achten, dass Werte als Strings an das Arduino gesendet werden. Mit der Funktion str(value) lässt sich jeder Wert (value) in einen String umwandeln. Zusätzlich senden wir zwischen jedem einzelnen Wert ein ‘,’ als Delimiter und ein carriage-return (“t”) als Indikator für das Ende der Übertragung.Für die Umgekehrte Kommunikation schreiben wir die Daten in Processing auch als Komma getrennte Werde in Zeilen:
Code Block |
---|
language | java |
---|
title | Beispiel Processing zu Arduino |
---|
collapse | true |
---|
|
import processing.serial.*; // Import the Processing Serial Library for communicating with arduino
Serial myPort; // The used Serial Port
void setup()
{
background(0);
size(500, 500);
println(Serial.list()); // Printsprint theall listavailable ofports
serial available devices (Arduino should be on top of the list) println(Serial.list());
// open specific serial port
myPort = new Serial(this, "/dev/cu.usbmodem12131usbmodem14621", 9600); // Open a new port
and connect with Arduino at 9600 baud
}
void draw()
{
// prepare values
int firstValue = 111;
int secondValue = 222;
int thirdValue = 333;
// write values
myPort.write(str(firstValue));
myPort.write(",");
myPort.write(str(secondValue));
myPort.write(",");
myPort.write(str(thirdValue));
myPort.write("\n");
delay(1000);
} |
Um auf der Seite des Arduino auf eingehende Nachrichten über die serielle Schnittstelle zu horchen müssen wir einige Funktionen benutzen. Diese sind:
charAt()
Diese Funktion retourniert das Zeichen in einem String an der angegebenen Position.
substring()
Diese Funktion erstellt einen Ausschnitt eines String von und bis zur angegebenen Position.
toInt()
Diese Funktion wandelt einen Sting in einen Int Auf dem Arduino können wir dann diese Zeilen auch wieder in einzelnen Werte konvertieren:
Code Block |
---|
language | javacpp |
---|
title | Beispiel Werte in Arduino empfangen |
---|
collapse | true |
---|
|
#define LED_PIN 6
#define NUM_OF_VALUES 3
String
incomingString
="";
int incomingValues[NUM_OF_VALUES];
void setup()
{
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
// open the serial port with a baudrate of 9600
Serial.begin(9600);
}
void loop()
{
// check if data is available
if (Serial.available() > 0)
{
// read incomingStringstring
String str = Serial.readStringUntil('\n');
// split data and write to incomingValues
split(incomingStringstr, incomingValues, NUM_OF_VALUES);
}
// take first value and set LED
analogWrite(LED_PIN6, incomingValues[0]);
}
void split(String inputString, int returnData[], int numOfValues)
{
int index = 0;
int lastPos = 0;
for for(int i = 0; i < i<inputStringinputString.length(); i++)
{
if (inputString.charAt(i) == ',' && index < numOfValues)
{
String tempStr = inputString.substring(lastPos, i - 1);
returnData[index] = tempStr.toInt();
index++;
lastPos = i + 1;
}
}
} |