12,297
edits
m (moved Codes for Arduino and Processing to IFD:PhysicalComp2011/Julia Putscher/Codes for Arduino and Processing: use subpages) |
mNo edit summary |
||
Line 3: | Line 3: | ||
===Arduino=== | ===Arduino=== | ||
<syntaxhighlight lang="CPP"> | |||
int an1,an2 = 0; | int an1,an2 = 0; | ||
int redLedPin =13; | int redLedPin =13; | ||
boolean triggered = false; | boolean triggered = false; | ||
void setup(){ | void setup(){ | ||
Serial.begin(9600); | Serial.begin(9600); | ||
pinMode(redLedPin, OUTPUT); // set the red LED pin to be an output | pinMode(redLedPin, OUTPUT); // set the red LED pin to be an output | ||
// Serial.println("Starting"); | // Serial.println("Starting"); | ||
} | } | ||
void loop(){ | void loop(){ | ||
// read analog value in | // read analog value in | ||
int an2 = analogRead(0); | int an2 = analogRead(0); | ||
Serial.print("Y"); | Serial.print("Y"); | ||
Serial.println(an2,DEC); | Serial.println(an2,DEC); | ||
//threshold | //threshold | ||
int an1= analogRead(5); | int an1= analogRead(5); | ||
Serial.print("X"); | Serial.print("X"); | ||
Serial.println(an1,DEC); | Serial.println(an1,DEC); | ||
if(an1 > an2 && !triggered){ | if(an1 > an2 && !triggered){ | ||
triggered = true; | triggered = true; | ||
digitalWrite(redLedPin, HIGH); // turn off the red LED | digitalWrite(redLedPin, HIGH); // turn off the red LED | ||
} | } | ||
if(an1 <= an2 && triggered){ | if(an1 <= an2 && triggered){ | ||
triggered = false; | triggered = false; | ||
digitalWrite(redLedPin, LOW); // turn off the red LED | digitalWrite(redLedPin, LOW); // turn off the red LED | ||
} | } | ||
} | } | ||
< | </syntaxhighlight> | ||
===Processing=== | ===Processing=== | ||
import processing.serial.*; | import processing.serial.*; | ||
String buff = ""; | String buff = ""; | ||
int val = 0; | int val = 0; | ||
int NEWLINE = 10; | int NEWLINE = 10; | ||
int xPos,yPos,zPos = 0; | int xPos,yPos,zPos = 0; | ||
int displaySize = 2; | int displaySize = 2; | ||
int an1, an2, an3; | int an1, an2, an3; | ||
//an1 pot; an2 ir; | //an1 pot; an2 ir; | ||
Serial port; | Serial port; | ||
void setup(){ | void setup(){ | ||
background(80); | background(80); | ||
size(800,600); | size(800,600); | ||
smooth(); | smooth(); | ||
port = new Serial(this,"COM4", 9600); //local USB- port | port = new Serial(this,"COM4", 9600); //local USB- port | ||
} | } | ||
void draw(){ | void draw(){ | ||
// new background over old | // new background over old | ||
fill(80,5); | fill(80,5); | ||
noStroke(); | noStroke(); | ||
rect(0,0,width,height); | rect(0,0,width,height); | ||
// wipe out a small area in front of the new data | // wipe out a small area in front of the new data | ||
fill(80); | fill(80); | ||
rect(xPos+displaySize,0,50,height); | rect(xPos+displaySize,0,50,height); | ||
// check for serial, and process | // check for serial, and process | ||
while (port.available() > 0) { | while (port.available() > 0) { | ||
serialEvent(port.read()); | serialEvent(port.read()); | ||
} | } | ||
} | } | ||
void serialEvent(int serial) { | void serialEvent(int serial) { | ||
print("A"); //header variable, so we know which sensor value is which | 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 | 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 | //Serial.print(10, BYTE); //terminating character | ||
print("B"); //header variable, so we know which sensor value is which | 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 | 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 | //Serial.print(10, BYTE); //terminating character | ||
if(serial != '\n') { | if(serial != '\n') { | ||
buff += char(serial); | buff += char(serial); | ||
} | } | ||
else { | else { | ||
int curX = buff.indexOf("X"); | int curX = buff.indexOf("X"); | ||
int curY = buff.indexOf("Y"); | int curY = buff.indexOf("Y"); | ||
if(curX >=0){ | if(curX >=0){ | ||
String val = buff.substring(curX+1); | String val = buff.substring(curX+1); | ||
an1 = Integer.parseInt(val.trim()); | an1 = Integer.parseInt(val.trim()); | ||
xPos++; | xPos++; | ||
if(xPos > width) xPos = 0; | if(xPos > width) xPos = 0; | ||
sensorTic1(xPos,an1); | sensorTic1(xPos,an1); | ||
} | } | ||
if(curY >=0){ | if(curY >=0){ | ||
String val = buff.substring(curY+1); | String val = buff.substring(curY+1); | ||
an2 = Integer.parseInt(val.trim()); | an2 = Integer.parseInt(val.trim()); | ||
yPos++; | yPos++; | ||
if(yPos > width) yPos = 0; | if(yPos > width) yPos = 0; | ||
sensorTic2(yPos,an2); | sensorTic2(yPos,an2); | ||
} | } | ||
// Clear the value of "buff" | // Clear the value of "buff" | ||
buff = ""; | buff = ""; | ||
} | } | ||
} | } | ||
void sensorTic1(int x, int y){ | void sensorTic1(int x, int y){ | ||
stroke(0,0,255); | stroke(0,0,255); | ||
fill(0,0,255); | fill(0,0,255); | ||
ellipse(x,y,displaySize,displaySize); | ellipse(x,y,displaySize,displaySize); | ||
} | } | ||
void sensorTic2(int x, int y){ | void sensorTic2(int x, int y){ | ||
stroke(255,0,0); | stroke(255,0,0); | ||
fill(255,0,0); | fill(255,0,0); | ||
ellipse(x,y,displaySize,displaySize); | ellipse(x,y,displaySize,displaySize); | ||
} | } | ||
==Heartrate Sensor - Circuit With Amplifier== | ==Heartrate Sensor - Circuit With Amplifier== | ||
Line 215: | Line 191: | ||
define mask 255 // kill top bits | define mask 255 // kill top bits | ||
int potPin = 0; // select the input pin for the pot | int potPin = 0; // select the input pin for the pot | ||
int ledPin = 13; // select the pin for the LED | int ledPin = 13; // select the pin for the LED | ||
int val = 16706; // variable to store the value coming from the sensor | int val = 16706; // variable to store the value coming from the sensor | ||
int val2 =0; | int val2 =0; | ||
int a =0; | int a =0; | ||
int b =0; | int b =0; | ||
int beats[]= {0,0,0,0,0};// to track last five reads for a pattern | int beats[]= {0,0,0,0,0};// to track last five reads for a pattern | ||
boolean beated = false; | boolean beated = false; | ||
//function dec | //function dec | ||
boolean getBioData(); | boolean getBioData(); | ||
void setup() { | void setup() { | ||
pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT | pinMode(ledPin, OUTPUT); // declare the ledPin as an OUTPUT | ||
Serial.begin(9600); | Serial.begin(9600); | ||
} | } | ||
void loop() { | void loop() { | ||
char check=' '; | char check=' '; | ||
val = analogRead(potPin); // read the value from the sensor | val = analogRead(potPin); // read the value from the sensor | ||
if (Serial.read() =='a'){ // check buffer for an 'a' | if (Serial.read() =='a'){ // check buffer for an 'a' | ||
val2 = val; | val2 = val; | ||
b= val & mask; | b= val & mask; | ||
a =((val2>>8) & mask); //just in case mask | a =((val2>>8) & mask); //just in case mask | ||
delay(20); | delay(20); | ||
// Serial.print("b"); // debug | // Serial.print("b"); // debug | ||
// Serial.print(b); | // Serial.print(b); | ||
Serial.print(a,BYTE); | Serial.print(a,BYTE); | ||
Serial.print(b,BYTE); | Serial.print(b,BYTE); | ||
if (getBioData()){ // call bio function | if (getBioData()){ // call bio function | ||
Serial.print('b',BYTE); | Serial.print('b',BYTE); | ||
} | } | ||
else Serial.print('n',BYTE); | else Serial.print('n',BYTE); | ||
} | } | ||
} | } | ||
boolean getBioData(){ | boolean getBioData(){ | ||
int beatVal = analogRead(potPin); // read the value from the sensor | int beatVal = analogRead(potPin); // read the value from the sensor | ||
beats[4] = beatVal; // put in back of array | beats[4] = beatVal; // put in back of array | ||
int beatDif = beats[5 - 1] - beats[0]; | int beatDif = beats[5 - 1] - beats[0]; | ||
for (int i = 0; i < 5;i++){ | for (int i = 0; i < 5;i++){ | ||
beats[i] = beats[i+1]; // push zero out front | beats[i] = beats[i+1]; // push zero out front | ||
} | } | ||
// check for beat | // check for beat | ||
if ( beatDif > 10 && (beated != true)){ | if ( beatDif > 10 && (beated != true)){ | ||
beated = true; | beated = true; | ||
return true; | return true; | ||
} | } | ||
else if( beatDif < 2 ){ | else if( beatDif < 2 ){ | ||
beated = false; | beated = false; | ||
return false; | return false; | ||
} | } | ||
else return false; | else return false; | ||
} | } | ||
===Processing=== | ===Processing=== | ||
import processing.serial.*; | import processing.serial.*; | ||
Serial port; // Create object from Serial class | Serial port; // Create object from Serial class | ||
int val; // Data received from the serial port | int val; // Data received from the serial port | ||
int WIDTH=800; // set width | int WIDTH=800; // set width | ||
int number=0; | int number=0; | ||
int num[] = new int[3]; | int num[] = new int[3]; | ||
int points[]= new int[WIDTH]; // points to be drawn from incoming data | int points[]= new int[WIDTH]; // points to be drawn from incoming data | ||
char beat=' '; | char beat=' '; | ||
int beats=0; | int beats=0; | ||
int dropNum[] = new int[4]; // array used to compare data not needed | int dropNum[] = new int[4]; // array used to compare data not needed | ||
void setup() { | void setup() { | ||
println(Serial.list()); | println(Serial.list()); | ||
size(WIDTH, 700); | size(WIDTH, 700); | ||
frameRate(30); | frameRate(30); | ||
port = new Serial(this,"COM4", 9600); // local USB- port | port = new Serial(this,"COM4", 9600); // local USB- port | ||
} | } | ||
void draw() { | void draw() { | ||
background(0);// to erase | background(0);// to erase | ||
port.write('a'); | port.write('a'); | ||
if (2 < port.available()) { // wait for three bytes | if (2 < port.available()) { // wait for three bytes | ||
for (int i=0;i<3;i++){ | for (int i=0;i<3;i++){ | ||
num[i] = port.read(); // read them into an array | num[i] = port.read(); // read them into an array | ||
} | } | ||
//println( num[0]); | //println( num[0]); | ||
//println( num[1]); | //println( num[1]); | ||
number = (num[0] << 8)+num[1]; // num range add two incoming bytes together after shifting | 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 | beat = (char) num[2]; // look to see if there is a 'b' to signal a beat | ||
println(beats); | println(beats); | ||
} | } | ||
stroke(0,255,100); | stroke(0,255,100); | ||
if (beat == 'b'){// sent from arduino | if (beat == 'b'){// sent from arduino | ||
beats++; | beats++; | ||
} | } | ||
// draw heart beat data | // draw heart beat data | ||
strokeWeight(1); | strokeWeight(1); | ||
points[(WIDTH/2)] = number; // strat drawing half way accross screen give current reading to array | 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 | //goes through all points and draws a line between consecutive ones | ||
for (int i=1 ;i< points.length-1; i++){ | for (int i=1 ;i< points.length-1; i++){ | ||
points[i]= points[i+1]; | points[i]= points[i+1]; | ||
line(i,height-points[i-1]-40,i,height-points[i]-40); | line(i,height-points[i-1]-40,i,height-points[i]-40); | ||
} | } | ||
} | } | ||