Last active
December 10, 2015 01:28
-
-
Save shinnn/4358353 to your computer and use it in GitHub Desktop.
[for Mac OS X / Linux]
unixUsbSerial() and unixUsbSerials(), functions to open USB serial ports easily in Processing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Return single USB port's name | |
String unixUsbSerial(String device){ | |
return unixUsbSerials(device, 1)[0]; | |
} | |
// Return multiple USB ports' names | |
String[] unixUsbSerials(String device, int... num){ | |
/* Parameter "device" can be "cu" or "tty". | |
* num[0] can be a number of ports required. | |
*/ | |
String[][] deviceSortArr, USBSortArr; | |
deviceSortArr = arrayMatchOrNot(Serial.list(), device + "."); | |
if(deviceSortArr[0].length > 0){ | |
USBSortArr = arrayMatchOrNot(deviceSortArr[0], "usb"); | |
}else{ | |
println("No " + device + ".* devices are available."); | |
return null; // Error | |
} | |
println( | |
"\n" + (USBSortArr[0].length > 0 ? USBSortArr[0].length : "No") | |
+ " " + device + ". USB Serial Port" | |
+ ((USBSortArr[0].length > 1 || USBSortArr[0].length == 0) ? "s are":" is") | |
+ " available." | |
); | |
if(USBSortArr[0].length == 0){ | |
println("Opening from the others temporarily..."); | |
} | |
int openNum = 1; | |
if(num.length == 1){ | |
openNum = num[0]; | |
}else if(USBSortArr[0].length > 0){ | |
openNum = USBSortArr[0].length; | |
} | |
return openResult(USBSortArr, openNum); | |
} | |
/* ========================================================================== | |
* You don't need to call functions below. | |
* ========================================================================== | |
*/ | |
String[][] arrayMatchOrNot(String[] strArr, String searchStr){ | |
String[][] result = { | |
{}, // Array of the matched elements | |
{} // Array of the rest | |
}; | |
for(String elm : strArr){ | |
String[] m = match(elm, ".*" + searchStr + ".*"); | |
if(m != null){ | |
result[0] = append(result[0], m[0]); | |
}else{ | |
result[1] = append(result[1], elm); | |
} | |
} | |
return result; | |
} | |
String[] openResult(String[][] arr, int num){ | |
String[] openPort = {}; | |
// Print the matched elements | |
for(int i=0; i < arr[0].length; i++){ | |
print("[USB] " + arr[0][i]); | |
if(i < num){ | |
print("\t<- OPEN"); | |
openPort = append(openPort, arr[0][i]); | |
} | |
println(); | |
} | |
// Print the rest | |
for(int i=0; i < arr[1].length; i++){ | |
print("[---] " + arr[1][i]); | |
if(arr[0].length == 0 && i < num){ | |
print("\t<- OPEN\t"); | |
openPort = append(openPort, arr[1][i]); | |
} | |
println(); | |
} | |
return openPort; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Example1 : Open single USB port | |
import processing.serial.*; | |
Serial Port; | |
void setup(){ | |
String portName = unixUsbSerial("cu"); | |
Port = new Serial(this, portName, 9600); | |
} | |
void draw(){ | |
if(Port.available() > 0){ | |
String inBuffer = Port.readStringUntil(10); //10 is Linefeed in ASCII | |
if(inBuffer != null){ | |
print(inBuffer); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Example2 : Open all USB ports | |
import processing.serial.*; | |
Serial[] Port; | |
void setup(){ | |
String[] portName = unixUsbSerials("cu"); | |
Port = new Serial[portName.length]; | |
for(int i=0; i < portName.length; i++){ | |
Port[i] = new Serial(this, portName[i], 9600); | |
} | |
} | |
void draw(){ | |
for(int i=0; i < Port.length;){ | |
if(Port[i].available() > 0){ | |
String inBuffer = Port[i].readStringUntil(10); //10 is Linefeed in ASCII | |
if(inBuffer != null){ | |
print("[Port " + (++i) + "] " + inBuffer); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment