Realtime display of a captured data using Arduiono / Teensy 3.6

Status
Not open for further replies.

MickEP

New member
Hi,

i have just started using Arduino with a TEENSY3.6 and and now trying to test various analog/digital target circuits for proof of concept in an epilepsy research project.
The first parameter is breathing and I am using a piezo film (commonly used in sleep studies) to reflect respiration.
The piezo film flexes on each inhale then returns to non-flexed on exhale thus outputting a potential difference generated between the 2 piezo surfaces.

I am running through the Arduino Examples for Dig I/O, analog inputs etc. and now I have a piezo film hooked up to Analog 0 and can see the digitised numbers when I run the first part of Arduino code for Graph which simply grabs a sample and transmits at 9600 baud and then ctrl-shift-M allows me to see these numbers.

However, my problems start in trying to graph this data. I have installed ‘PROCESSING’ and then cut and pasted the sample code from the Arduino Graph code window example over to the PROCESSING code window but I get all sorts of errors. I also just tried to ‘uncomment’ this processing code and run it in Arduino IDE but problems also..?

My comments inserted after '9998' and '9999' below point to the working code and not so.

I would be most grateful for any insights.?
My coding has always been assembly language with different micros so not much C so this could be my problem?

//----------------------------------ARDUINO Graph example--------------------------------------


/*
Graph

A simple example of communication from the Arduino board to the computer: The
value of analog input 0 is sent out the serial port. We call this "serial"
communication because the connection appears to both the Arduino and the
computer as a serial port, even though it may actually use a USB cable. Bytes
are sent one after another (serially) from the Arduino to the computer.

You can use the Arduino Serial Monitor to view the sent data, or it can be
read by Processing, PD, Max/MSP, or any other program capable of reading data
from a serial port. The Processing code below graphs the data received so you
can see the value of the analog input changing over time.

The circuit:
- any analog input sensor attached to analog in pin 0

created 2006
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe and Scott Fitzgerald

This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/Graph
*/

void setup() {
// initialize the serial communication:
Serial.begin(9600);
}

void loop() {
// send the value of analog input 0:
Serial.println(analogRead(A0));
// wait a bit for the analog-to-digital converter to stabilize after the last
// reading:
delay(2);
}

/* Processing code for this example

// Graphing sketch

// This program takes ASCII-encoded strings from the serial port at 9600 baud
// and graphs them. It expects values in the range 0 to 1023, followed by a
// newline, or newline and carriage return

// created 20 Apr 2005
// updated 24 Nov 2015
// by Tom Igoe
// This example code is in the public domain.

// 9998 The code above works fine and digitised values are displayed in the Arduino window as a realtime column

// 9999 This code below throws up errors whether I enable it in the Arduino IDE code window OR the PROCESSING IDE code window




import processing.serial.*;

Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
float inByte = 0;

void setup () {
// set the window size:
size(400, 300);

// List all the available serial ports
// if using Processing 2.1 or later, use Serial.printArray()
println(Serial.list());

// I know that the first port in the serial list on my Mac is always my
// Arduino, so I open Serial.list()[0].
// Open whatever port is the one you're using.
myPort = new Serial(this, Serial.list()[0], 9600);

// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');

// set initial background:
background(0);
}

void draw () {
// draw the line:
stroke(127, 34, 255);
line(xPos, height, xPos, height - inByte);

// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(0);
} else {
// increment the horizontal position:
xPos++;
}
}

void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');

if (inString != null) {
// trim off any whitespace:
inString = trim(inString);
// convert to an int and map to the screen height:
inByte = float(inString);
println(inByte);
inByte = map(inByte, 0, 1023, 0, height);
}
}

*/
 
Hi Mick,

Processing code cannot be executed within the Arduino IDE. Above 9998 needs to be written to your controller, below 9999 needs to be executed within the Processing IDE. I ran your example code and found no issues.

Could you let us know what errors you are seeing?
 
Hi TallIndustry,

When the code is cut and pasted to "Processing" and run, it is halted at the line below.

myPort = new Serial(this, Serial.list()[8], 9600)

The error revealed is
"Com8
ArrayIndexOutofBoundsException: 8"

Your thoughts?
 
Code:
myPort = new Serial(this, Serial.list()[8], 9600)

This refers to the COM ports listed when you first execute the code, not your COM port number. Most users don't typically have more than one single COM port available when debugging, so leaving the selection at [0] usually works just fine.

To see your COM port list you can run this:

Code:
import processing.serial.*;

void setup () {
	println(Serial.list());
}
 
Thanks for that Tallindustry. Yep, did as advised and no errors. Can't see my data displayed in Processing but will explore.
 
Ah, that sucks. I just ran the code again and although I do see data coming in, I'm using a much faster baud rate. You might need to slow down your Serial.println events just a little, 2ms isn't much time.

I would try 100ms.

Code:
void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.println(analogRead(A0));
 delay(100);
}
 
Teensy uses native USB, so it ignores the baud rate setting. It does not matter what baud rate you specify on Teensy or in Processing (perfectly fine if they are different numbers, since the setting isn't actually used). The data always transmits at the maximum possible speed your USB bus will allow. Compared to regular Arduino at 9600, this can be extremely fast.

Normally faster is better, but Processing can be slow, so you definitely should use a delay in the loop running on Teensy.
 
Status
Not open for further replies.
Back
Top