adafruit_bno055 / examples / bunny / processing / cuberotate / cuberotate.pde @ 77d1c83c
History | View | Annotate | Download (4.27 KB)
| 1 |
import processing.serial.*; |
|---|---|
| 2 |
import java.awt.datatransfer.*; |
| 3 |
import java.awt.Toolkit; |
| 4 |
import processing.opengl.*; |
| 5 |
import saito.objloader.*; |
| 6 |
import g4p_controls.*; |
| 7 |
|
| 8 |
float roll = 0.0F; |
| 9 |
float pitch = 0.0F; |
| 10 |
float yaw = 0.0F; |
| 11 |
float temp = 0.0F; |
| 12 |
float alt = 0.0F; |
| 13 |
|
| 14 |
OBJModel model; |
| 15 |
|
| 16 |
// Serial port state. |
| 17 |
Serial port; |
| 18 |
String buffer = ""; |
| 19 |
final String serialConfigFile = "serialconfig.txt"; |
| 20 |
boolean printSerial = false; |
| 21 |
|
| 22 |
// UI controls. |
| 23 |
GPanel configPanel; |
| 24 |
GDropList serialList; |
| 25 |
GLabel serialLabel; |
| 26 |
GCheckbox printSerialCheckbox; |
| 27 |
|
| 28 |
void setup() |
| 29 |
{
|
| 30 |
size(400, 550, OPENGL); |
| 31 |
frameRate(30); |
| 32 |
model = new OBJModel(this); |
| 33 |
model.load("bunny.obj");
|
| 34 |
model.scale(20); |
| 35 |
|
| 36 |
// Serial port setup. |
| 37 |
// Grab list of serial ports and choose one that was persisted earlier or default to the first port. |
| 38 |
int selectedPort = 0; |
| 39 |
String[] availablePorts = Serial.list(); |
| 40 |
if (availablePorts == null) {
|
| 41 |
println("ERROR: No serial ports available!");
|
| 42 |
exit(); |
| 43 |
} |
| 44 |
String[] serialConfig = loadStrings(serialConfigFile); |
| 45 |
if (serialConfig != null && serialConfig.length > 0) {
|
| 46 |
String savedPort = serialConfig[0]; |
| 47 |
// Check if saved port is in available ports. |
| 48 |
for (int i = 0; i < availablePorts.length; ++i) {
|
| 49 |
if (availablePorts[i].equals(savedPort)) {
|
| 50 |
selectedPort = i; |
| 51 |
} |
| 52 |
} |
| 53 |
} |
| 54 |
// Build serial config UI. |
| 55 |
configPanel = new GPanel(this, 10, 10, width-20, 90, "Configuration (click to hide/show)"); |
| 56 |
serialLabel = new GLabel(this, 0, 20, 80, 25, "Serial port:"); |
| 57 |
configPanel.addControl(serialLabel); |
| 58 |
serialList = new GDropList(this, 90, 20, 200, 200, 6); |
| 59 |
serialList.setItems(availablePorts, selectedPort); |
| 60 |
configPanel.addControl(serialList); |
| 61 |
printSerialCheckbox = new GCheckbox(this, 5, 50, 200, 20, "Print serial data"); |
| 62 |
printSerialCheckbox.setSelected(printSerial); |
| 63 |
configPanel.addControl(printSerialCheckbox); |
| 64 |
// Set serial port. |
| 65 |
setSerialPort(serialList.getSelectedText()); |
| 66 |
} |
| 67 |
|
| 68 |
void draw() |
| 69 |
{
|
| 70 |
background(0,0,0); |
| 71 |
|
| 72 |
// Set a new co-ordinate space |
| 73 |
pushMatrix(); |
| 74 |
|
| 75 |
// Simple 3 point lighting for dramatic effect. |
| 76 |
// Slightly red light in upper right, slightly blue light in upper left, and white light from behind. |
| 77 |
pointLight(255, 200, 200, 400, 400, 500); |
| 78 |
pointLight(200, 200, 255, -400, 400, 500); |
| 79 |
pointLight(255, 255, 255, 0, 0, -500); |
| 80 |
|
| 81 |
// Displace objects from 0,0 |
| 82 |
translate(200, 300, 0); |
| 83 |
|
| 84 |
// Rotate shapes around the X/Y/Z axis (values in radians, 0..Pi*2) |
| 85 |
rotateZ(radians(roll)); |
| 86 |
rotateX(radians(pitch)); |
| 87 |
rotateY(radians(yaw)); |
| 88 |
|
| 89 |
pushMatrix(); |
| 90 |
noStroke(); |
| 91 |
model.draw(); |
| 92 |
popMatrix(); |
| 93 |
popMatrix(); |
| 94 |
//print("draw");
|
| 95 |
} |
| 96 |
|
| 97 |
void serialEvent(Serial p) |
| 98 |
{
|
| 99 |
String incoming = p.readString(); |
| 100 |
if (printSerial) {
|
| 101 |
println(incoming); |
| 102 |
} |
| 103 |
|
| 104 |
if ((incoming.length() > 8)) |
| 105 |
{
|
| 106 |
String[] list = split(incoming, " "); |
| 107 |
if ( (list.length > 0) && (list[0].equals("Orientation:")) )
|
| 108 |
{
|
| 109 |
roll = float(list[3]); // Roll = Z |
| 110 |
pitch = float(list[2]); // Pitch = Y |
| 111 |
yaw = float(list[1]); // Yaw/Heading = X |
| 112 |
buffer = incoming; |
| 113 |
} |
| 114 |
if ( (list.length > 0) && (list[0].equals("Alt:")) )
|
| 115 |
{
|
| 116 |
alt = float(list[1]); |
| 117 |
buffer = incoming; |
| 118 |
} |
| 119 |
if ( (list.length > 0) && (list[0].equals("Temp:")) )
|
| 120 |
{
|
| 121 |
temp = float(list[1]); |
| 122 |
buffer = incoming; |
| 123 |
} |
| 124 |
} |
| 125 |
} |
| 126 |
|
| 127 |
// Set serial port to desired value. |
| 128 |
void setSerialPort(String portName) {
|
| 129 |
// Close the port if it's currently open. |
| 130 |
if (port != null) {
|
| 131 |
port.stop(); |
| 132 |
} |
| 133 |
try {
|
| 134 |
// Open port. |
| 135 |
port = new Serial(this, portName, 115200); |
| 136 |
port.bufferUntil('\n');
|
| 137 |
// Persist port in configuration. |
| 138 |
saveStrings(serialConfigFile, new String[] { portName });
|
| 139 |
} |
| 140 |
catch (RuntimeException ex) {
|
| 141 |
// Swallow error if port can't be opened, keep port closed. |
| 142 |
port = null; |
| 143 |
} |
| 144 |
} |
| 145 |
|
| 146 |
// UI event handlers |
| 147 |
|
| 148 |
void handlePanelEvents(GPanel panel, GEvent event) {
|
| 149 |
// Panel events, do nothing. |
| 150 |
} |
| 151 |
|
| 152 |
void handleDropListEvents(GDropList list, GEvent event) {
|
| 153 |
// Drop list events, check if new serial port is selected. |
| 154 |
if (list == serialList) {
|
| 155 |
setSerialPort(serialList.getSelectedText()); |
| 156 |
} |
| 157 |
} |
| 158 |
|
| 159 |
void handleToggleControlEvents(GToggleControl checkbox, GEvent event) {
|
| 160 |
// Checkbox toggle events, check if print events is toggled. |
| 161 |
if (checkbox == printSerialCheckbox) {
|
| 162 |
printSerial = printSerialCheckbox.isSelected(); |
| 163 |
} |
| 164 |
} |