Expecting EOF, found 'import'
in
Programming Questions
•
29 days ago
Hello guys, I have started using Processing yesterday and am trying to visualise brainwave reading data by using the following processing. A code is from GitHub so following all instructions. However, Processing shows expecting EOF, found 'import'. The code is below,,, I have been reading previous discussions about EOF issues but do you think it might have something to do with an importing error? Here is a screenshot.file://localhost/Users/Insoo/Desktop/Screen%20Shot%202013-09-18%20at%2001.55.27.png
As you can see, 'Arduinoscope' is not showing sub layers. Could it be a problem?
I would really appreciate your help.
/*
A simple oscilliscope widget test
(c) 2009 David Konsumer <
david.konsumer@gmail.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
*/
/**** MindSetBTViewer.pde ****
** Modified from TestOscope.pde by Sean M. Montgomery 2010/09
** Arduinoscope program written for use with NeuroSky MindSet and
** the MindSet Java library written by Robert King.
**
** -- Select the serialPort and plotVars to display (See User
** Selected Setup Variables below.)
** -- Data may be written to a csv file using the "RECORD" button.
** -- y-axis scale may be adjusted using the "*2" and "/2" buttons.
** -- y-axis scale and offset defaults may be adjusted in code below.
**
** See
http://www.produceconsumerobot.com/mindset/ for additional
** installation and usage instructions.
******************************/
/**** User Selected Setup Variables ****/
/***************************************/
// Use serialPort to select the correct serial port of your MindSet.
// See list printed on program start for serial port options.
String serialPort = "RS232";
/* plotVars determines which variables are plotted and in which order
Options are:
Raw
BatteryLevel
ErrorRate
Attention
Meditation
Delta
Theta
Alpha1
Alpha2
Beta1
Beta2
Gamma1
Gamma2
*/
String[] plotVars = {
"Raw", "Alpha2", "Meditation", "ErrorRate"
};
// yOffsets sets the y-axis offset for each plotVar
// offset the raw data (1st variable) by half the default scope resolution
// to prevent negative values from extending into other windows
int[] yOffsets = {
512, 1, 1, 1, 1, 1, 1, 1, 1, 1
};
// yFactors sets the default y-axis scale for each plotVar
// yFactors can also be adjusted using buttons in the display window
float[] yFactors = {
1f, 1/64f, 1*8f, 1*8f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f
};
// Directory and name of your saved MindSet data. Make sure you
// have write privileges to that location.
String saveDir = ".\\";
String[] fName = {
saveDir, "MindSetData", nf(year(), 4), nf(month(), 2), nf(day(), 2),
nf(hour(), 2), nf(minute(), 2), nf(second(), 2), "csv"
};
String saveFileName = join(fName, '.');
// Choose window dimensions in number of pixels
int windowWidth = 1200;
int windowHeight = 800;
/*******************************************/
/**** END User Selected Setup Variables ****/
int numScopes = plotVars.length;
// all plots default to off
int plotRaw = -1;
int plotBatteryLevel = -1;
int plotErrorRate = -1;
int plotAttention = -1;
int plotMeditation = -1;
int plotDelta = -1;
int plotTheta = -1;
int plotAlpha1 = -1;
int plotAlpha2 = -1;
int plotBeta1 = -1;
int plotBeta2 = -1;
int plotGamma1 = -1;
int plotGamma2 = -1;
boolean saveDataBool = false; // wait until user turns on recording
boolean firstSave = true; // data has not been saved yet
import arduinoscope.*;
import processing.serial.*;
import controlP5.*;
import mindset.*;
MindSet mindset;
Oscilloscope[] scopes = new Oscilloscope[numScopes];
Serial port;
ControlP5 controlP5;
PrintWriter output = null;
int LINE_FEED=10;
int[] vals;
void setup() {
size(windowWidth, windowHeight, P2D);
background(0);
controlP5 = new ControlP5(this);
int[] dimv = new int[2];
dimv[0] = width-130; // 130 margin for text
dimv[1] = height/scopes.length;
// setup vals from serial
vals = new int[scopes.length];
for (int i=0;i<scopes.length;i++) {
int[] posv = new int[2];
posv[0]=0;
posv[1]=dimv[1]*i;
// random color, that will look nice and be visible
scopes[i] = new Oscilloscope(this, posv, dimv);
scopes[i].setLine_color(color((int)random(255), (int)random(127)+127, 255));
// yFactor buttons
controlP5.addButton("*2", 1, dimv[0]+10, posv[1]+20, 20, 20).setId(i);
controlP5.addButton("/2", 1, dimv[0]+10, posv[1]+70, 20, 20).setId(20+i);
}
// record and pause buttons at top of window
controlP5.addButton("Record", 1, dimv[0]+85, 5, 40, 20).setId(1000);
controlP5.controller("Record").setColorBackground( color( 0, 255, 0 ) );
controlP5.controller("Record").setColorLabel(0);
controlP5.addButton("Pause", 1, dimv[0]+85, 30, 40, 20).setId(1100);
// setup serial port
println(Serial.list());
//port = new Serial(this, Serial.list()[serialPortNum], 57600);
// clear and wait for linefeed
//port.clear();
//port.bufferUntil(LINE_FEED);
mindset = new MindSet(this);
mindset.connect(serialPort);
ParsePlotVars();
}
void draw() {
background(0);
for (int i=0;i<scopes.length;i++) {
scopes[i].addData(int(vals[i] * yFactors[i]) + yOffsets[i]);
scopes[i].draw();
scopes[i].drawBounds();
stroke(255);
int[] pos = scopes[i].getPos();
int[] dim = scopes[i].getDim();
// separator lines
line(0, pos[1], width, pos[1]);
if (true) {
// yfactor text
fill(255);
text("y * " + yFactors[i], dim[0] + 10, pos[1] + 60);
}
// variable name text
fill(scopes[i].getLine_color());
text(plotVars[i], dim[0] + 10, pos[1] + 15);
}
// draw text seperator, based on first scope
int[] dim = scopes[0].getDim();
stroke(255);
line(dim[0], 0, dim[0], height);
// update buttons
if (true) {
controlP5.draw();
}
}
void mindSetRawEvent(MindSet ms) {
if (plotRaw >= 0) {
vals[plotRaw] = ms.getCurrentRawData();
}
if (saveDataBool)
{
SaveData();
}
//println(ms.getCurrentRawData());
}
void mindSetEvent(MindSet ms) {
if (plotBatteryLevel >= 0)
vals[plotBatteryLevel] = ms.data.batteryLevel;
if (plotErrorRate >= 0)
vals[plotErrorRate] = ms.data.errorRate;
if (plotAttention >= 0)
vals[plotAttention] = ms.data.attention;
if (plotMeditation >= 0)
vals[plotMeditation] = ms.data.meditation;
if (plotDelta >= 0)
vals[plotDelta] = ms.data.delta;
if (plotTheta >= 0)
vals[plotTheta] = ms.data.theta;
if (plotAlpha1 >= 0)
vals[plotAlpha1] = ms.data.alpha1;
if (plotAlpha2 >= 0)
vals[plotAlpha2] = ms.data.alpha2;
if (plotBeta1 >= 0)
vals[plotBeta1] = ms.data.beta1;
if (plotBeta2 >= 0)
vals[plotBeta2] = ms.data.beta2;
if (plotGamma1 >= 0)
vals[plotGamma1] = ms.data.gamma1;
if (plotGamma2 >= 0)
vals[plotGamma2] = ms.data.gamma2;
}
void SaveData() {
// save all plotVars
output.print(join(nf(vals, 0), ','));
//output.print("," + nf(millis()*10,0)); // output time in 1/10ths of milliseconds to match Arduino Viewer
output.println("");
}
// handles button clicks
void controlEvent(ControlEvent theEvent) {
int id = theEvent.controller().id();
if (id < 20) { // increase yFactor
yFactors[id] = yFactors[id] * 2;
}
else if (id < 40) { // decrease yFactor
yFactors[id-20] = yFactors[id-20] / 2;
}
else if ( id == 1100) { // pause display
for (int i=0; i<numScopes; i++) {
scopes[i].setPause(!scopes[i].isPause());
}
}
else if (id == 1000) { // Record/Stop button
if (saveDataBool == false) // Start Recording
{
try {
output = new PrintWriter(new FileWriter(saveFileName, true));
}
catch (IOException e) {
e.printStackTrace();
print("ERROR: e.printStackTrace(); ");
}
if (firstSave) {
output.print(join(plotVars, ','));
//output.print(",time");
output.println("");
firstSave = false;
}
saveDataBool = true;
controlP5.controller("Record").setCaptionLabel("Stop");
controlP5.controller("Record").setColorBackground( color( 255, 0, 0 ) );
}
else { // Stop Recording
saveDataBool = false;
output.flush();
output.close();
controlP5.controller("Record").setCaptionLabel("Record");
controlP5.controller("Record").setColorBackground( color( 0, 255, 0 ) );
}
} // id == 1000
}
void ParsePlotVars() {
for (int i=0; i<plotVars.length; i++) {
if (plotVars[i].equals("Raw"))
plotRaw = i;
else if (plotVars[i].equals("BatteryLevel"))
plotBatteryLevel = i;
else if (plotVars[i].equals("ErrorRate"))
plotErrorRate = i;
else if (plotVars[i].equals("Attention"))
plotAttention = i;
else if (plotVars[i].equals("Meditation"))
plotMeditation = i;
else if (plotVars[i].equals("Delta"))
plotDelta = i;
else if (plotVars[i].equals("Theta"))
plotTheta = i;
else if (plotVars[i].equals("Alpha1"))
plotAlpha1 = i;
else if (plotVars[i].equals("Alpha2"))
plotAlpha2 = i;
else if (plotVars[i].equals("Beta1"))
plotBeta1 = i;
else if (plotVars[i].equals("Beta2"))
plotBeta2 = i;
else if (plotVars[i].equals("Gamma1"))
plotGamma1 = i;
else if (plotVars[i].equals("Gamma2"))
plotGamma2 = i;
}
}
1