IFD:PhysicalComp2011/Julia Putscher/Codes for Arduino and Processing: Difference between revisions

From Medien Wiki
Line 62: Line 62:


import processing.serial.*;
import processing.serial.*;
<br>
<br>
<br>
String buff = "";
String buff = "";
Line 206: Line 207:
<br>
<br>
}
}
<br>
<br>
==Heartrate Sensor - Circuit With Amplifier==
===Arduino===
define mask 255 // kill top bits
<br>
int potPin = 0; // select the input pin for the pot
<br>
int ledPin = 13; // select the pin for the LED
<br>
int val = 16706; // variable to store the value coming from the sensor
<br>
int val2 =0;
<br>
int a =0;
<br>
int b =0;
<br>
int beats[]= {0,0,0,0,0};// to track last five reads for a pattern
<br>
boolean beated = false;
<br>
//function dec
<br>
boolean getBioData();
<br>
<br>
void setup() {
<br>
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
<br>
Serial.begin(9600);
<br>
}
<br>
<br>
void loop() {
<br>
char check=' ';
<br>
val = analogRead(potPin); // read the value from the sensor
<br>
if (Serial.read() =='a'){ // check buffer for an 'a'
<br>
val2 = val;
<br>
b= val & mask;
<br>
a =((val2>>8) & mask); //just in case mask
<br>
delay(20);
<br>
// Serial.print("b"); // debug
<br>
// Serial.print(b);
<br>
Serial.print(a,BYTE);
<br>
Serial.print(b,BYTE);
<br>
if (getBioData()){ // call bio function
<br>
Serial.print('b',BYTE);
<br>
}
<br>
else Serial.print('n',BYTE);
<br>
}
<br>
}
<br>
boolean getBioData(){
<br>
int beatVal = analogRead(potPin); // read the value from the sensor
<br>
beats[4] = beatVal; // put in back of array
<br>
int beatDif = beats[5 - 1] - beats[0];
<br>
for (int i = 0; i < 5;i++){
<br>
beats[i] = beats[i+1]; // push zero out front
<br>
}
<br>
// check for beat
<br>
if ( beatDif > 10 && (beated != true)){
<br>
beated = true;
<br>
return true;
<br>
}
<br>
else if( beatDif < 2 ){
<br>
beated = false;
<br>
return false;
<br>
}
<br>
else return false;
<br>
}
<br>
<br>
===Processing===
import processing.serial.*;
<br>
<br>
Serial port; // Create object from Serial class
<br>
int val; // Data received from the serial port
<br>
int WIDTH=800; // set width
<br>
int number=0;
<br>
int num[] = new int[3];
<br>
int points[]= new int[WIDTH]; // points to be drawn from incoming data
<br>
char beat=' ';
<br>
int beats=0;
<br>
int dropNum[] = new int[4]; // array used to compare data not needed
<br>
<br>
void setup() {
<br>
println(Serial.list());
<br>
size(WIDTH, 700);
<br>
frameRate(30);
<br>
port = new Serial(this,"COM4", 9600); // local USB- port
<br>
}
<br>
<br>
void draw() {
<br>
background(0);// to erase
<br>
port.write('a');
<br>
if (2 < port.available()) { // wait for three bytes
<br>
for (int i=0;i<3;i++){
<br>
num[i] = port.read(); // read them into an array
<br>
}
<br>
//println( num[0]);
<br>
//println( num[1]);
<br>
number = (num[0] << 8)+num[1]; // num range add two incoming bytes together after shifting
<br>
beat = (char) num[2]; // look to see if there is a 'b' to signal a beat
<br>
println(beats);
<br>
}
<br>
stroke(0,255,100);
<br>
if (beat == 'b'){// sent from arduino
<br>
beats++;
<br>
}
<br>
// draw heart beat data
<br>
strokeWeight(1);
<br>
points[(WIDTH/2)] = number; // strat drawing half way accross screen give current reading to array
<br>
//goes through all points and draws a line between consecutive ones
<br>
for (int i=1 ;i< points.length-1; i++){
<br>
points[i]= points[i+1];
<br>
line(i,height-points[i-1]-40,i,height-points[i]-40);
<br>
}
<br>
}
<br>
<br>

Revision as of 12:28, 6 April 2012

Heartrate Sensor - Simple Circuit

Arduino

int an1,an2 = 0;
int redLedPin =13;
boolean triggered = false;

void setup(){
Serial.begin(9600);
pinMode(redLedPin, OUTPUT); // set the red LED pin to be an output
// Serial.println("Starting");
}

void loop(){
// read analog value in
int an2 = analogRead(0);
Serial.print("Y");
Serial.println(an2,DEC); //threshold
int an1= analogRead(5);
Serial.print("X");
Serial.println(an1,DEC);

if(an1 > an2 && !triggered){
triggered = true;
digitalWrite(redLedPin, HIGH); // turn off the red LED
}
if(an1 <= an2 && triggered){
triggered = false;
digitalWrite(redLedPin, LOW); // turn off the red LED
}
}

Processing

import processing.serial.*;

String buff = "";
int val = 0;
int NEWLINE = 10;
int xPos,yPos,zPos = 0;
int displaySize = 2;
int an1, an2, an3; //an1 pot; an2 ir;
Serial port;

void setup(){
background(80);
size(800,600);
smooth();

port = new Serial(this,"COM4", 9600); //local USB- port
}

void draw(){
// new background over old
fill(80,5);
noStroke();
rect(0,0,width,height);
// wipe out a small area in front of the new data
fill(80);
rect(xPos+displaySize,0,50,height);
// check for serial, and process
while (port.available() > 0) {
serialEvent(port.read());
}
}

void serialEvent(int serial) {
print("A"); //header variable, so we know which sensor value is which
println(an1); //send as a ascii encoded number - we'll turn it back into a number at the other end
//Serial.print(10, BYTE); //terminating character
print("B"); //header variable, so we know which sensor value is which
println(an2); //send as a ascii encoded number - we'll turn it back into a number at the other end
//Serial.print(10, BYTE); //terminating character

if(serial != '\n') {
buff += char(serial);
}
else {
int curX = buff.indexOf("X");
int curY = buff.indexOf("Y");

if(curX >=0){
String val = buff.substring(curX+1);
an1 = Integer.parseInt(val.trim());
xPos++;

if(xPos > width) xPos = 0;
sensorTic1(xPos,an1);
}

if(curY >=0){
String val = buff.substring(curY+1);
an2 = Integer.parseInt(val.trim());
yPos++;

if(yPos > width) yPos = 0;
sensorTic2(yPos,an2);
}
// Clear the value of "buff"
buff = "";
}
}

void sensorTic1(int x, int y){
stroke(0,0,255);
fill(0,0,255);
ellipse(x,y,displaySize,displaySize);
}

void sensorTic2(int x, int y){
stroke(255,0,0);
fill(255,0,0);
ellipse(x,y,displaySize,displaySize);
}

Heartrate Sensor - Circuit With Amplifier

Arduino

define mask 255 // kill top bits
int potPin = 0; // select the input pin for the pot
int ledPin = 13; // select the pin for the LED
int val = 16706; // variable to store the value coming from the sensor
int val2 =0;
int a =0;
int b =0;
int beats[]= {0,0,0,0,0};// to track last five reads for a pattern
boolean beated = false;
//function dec
boolean getBioData();

void setup() {
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT
Serial.begin(9600);
}

void loop() {
char check=' ';
val = analogRead(potPin); // read the value from the sensor
if (Serial.read() =='a'){ // check buffer for an 'a'
val2 = val;
b= val & mask;
a =((val2>>8) & mask); //just in case mask
delay(20);
// Serial.print("b"); // debug
// Serial.print(b);
Serial.print(a,BYTE);
Serial.print(b,BYTE);
if (getBioData()){ // call bio function
Serial.print('b',BYTE);
}
else Serial.print('n',BYTE);
}
}
boolean getBioData(){
int beatVal = analogRead(potPin); // read the value from the sensor
beats[4] = beatVal; // put in back of array
int beatDif = beats[5 - 1] - beats[0];
for (int i = 0; i < 5;i++){
beats[i] = beats[i+1]; // push zero out front
}
// check for beat
if ( beatDif > 10 && (beated != true)){
beated = true;
return true;
}
else if( beatDif < 2 ){
beated = false;
return false;
}
else return false;
}

Processing

import processing.serial.*;

Serial port; // Create object from Serial class
int val; // Data received from the serial port
int WIDTH=800; // set width
int number=0;
int num[] = new int[3];
int points[]= new int[WIDTH]; // points to be drawn from incoming data
char beat=' ';
int beats=0;
int dropNum[] = new int[4]; // array used to compare data not needed

void setup() {
println(Serial.list());
size(WIDTH, 700);
frameRate(30);
port = new Serial(this,"COM4", 9600); // local USB- port
}

void draw() {
background(0);// to erase
port.write('a');
if (2 < port.available()) { // wait for three bytes
for (int i=0;i<3;i++){
num[i] = port.read(); // read them into an array
}
//println( num[0]);
//println( num[1]);
number = (num[0] << 8)+num[1]; // num range add two incoming bytes together after shifting
beat = (char) num[2]; // look to see if there is a 'b' to signal a beat
println(beats);
}
stroke(0,255,100);
if (beat == 'b'){// sent from arduino
beats++;
}
// draw heart beat data
strokeWeight(1);
points[(WIDTH/2)] = number; // strat drawing half way accross screen give current reading to array
//goes through all points and draws a line between consecutive ones
for (int i=1 ;i< points.length-1; i++){
points[i]= points[i+1];
line(i,height-points[i-1]-40,i,height-points[i]-40);
}
}