Hi all (and merry christmas),
I need help. Ive built a heartbeat sensor in Arduino and am now trying to visualize it in Processing. Below is an image of the Arduino input being visualized in Processing:
Now my problem is that the heartbeats are only vaguely depicted, so I need to find a way to "amplify" the peaks, so the heartbeats can be more easily read. Like this guy has done. If theres a need for more info or if you have any questions just ask! For more info on the project: http://www.ddlab.dk/i-found-my-pulse/.
Below is the Processing Code I am using, its just a slight rewrite of the Basic Graphing Tutorial:
- /*
- 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 is 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
- */
- import processing.serial.*;
- Serial myPort; // The serial port
- int xPos = 1; // horizontal position of the graph
- void setup () {
- // set the window size:
- size(1400, 500);
- // List all the available serial ports
- 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 inital background:
- background(0);
- }
- void draw () {
- // everything happens in the serialEvent()
- }
- 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:
- float inByte = float(inString);
- inByte = map(inByte, 0, 1023, 0, height);
- // draw the line:
- stroke(216, 24, 24);
- 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++;
- }
- }
- }
Regards,
René