mid term zen circle drawing

QQ图片20141108043505 QQ图片20141108043519 QQ图片20141108043741

People like  zazen to improve their self control .  It’s through the control of breathing and heartbeat . So i want to try to use a pulse sensor to  make some interaction with zen arts , a  brush pen draw a circle according to the BPM.

#include <Stepper.h>

const int stepsPerRevolution = 512; // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

// VARIABLES
int pulsePin = 0; // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13; // pin to blink led at each beat
int fadePin = 5; // pin to do fancy classy fading blink at each beat
int fadeRate = 0;

int steps=0;// used to fade LED on with PWM on fadePin

boolean fadeIn = false;
// these variables are volatile because they are used during the interrupt service routine!
volatile int BPM; // used to hold the pulse rate
volatile int Signal; // holds the incoming raw data
volatile int IBI = 600; // holds the time between beats, the Inter-Beat Interval
volatile boolean Pulse = false; // true when pulse wave is high, false when it’s low
volatile boolean QS = false;
int times=0;// becomes true when Arduoino finds a beat.
void setup(){
pinMode(blinkPin,OUTPUT); // pin that will blink to your heartbeat!
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
pinMode(6,OUTPUT);
pinMode(2,OUTPUT); // pin that will fade to your heartbeat!
Serial.begin(115200);
myStepper.setSpeed(30); // we agree to talk fast!
interruptSetup();
// sets up to read Pulse Sensor signal every 2mS
// UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
// AND APPLY THAT VOLTAGE TO THE A-REF PIN
//analogReference(EXTERNAL);
}

void loop(){
sendDataToProcessing(‘S’, Signal);
steps=map(BPM,50,150,140,20); // send Processing the raw Pulse Sensor data
if (QS == true){ // Quantified Self flag is true when arduino finds a heartbeat
fadeRate = 255; // Set ‘fadeRate’ Variable to 255 to fade LED with pulse

fadeIn = true;

sendDataToProcessing(‘B’,BPM); // send heart rate with a ‘B’ prefix
sendDataToProcessing(‘Q’,IBI); // send time between beats with a ‘Q’ prefix
QS = false;
times=times+1; // reset the Quantified Self flag for next time
}
if (times ==5){

myStepper.step(steps);
times=0;
ledFadeToBeat();
}
if (times ==1){
fadeRate -= 30; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
analogWrite(6,fadeRate);

}
if (times ==2){
fadeRate -= 30; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
analogWrite(5,fadeRate);

}
if (times ==3){
fadeRate -= 30; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
analogWrite(4,fadeRate);

}
if (times ==4){
fadeRate -= 30; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
analogWrite(2,fadeRate);

}

delay(20); // take a break
}
void ledFadeToBeat(){
fadeRate -= 15; // set LED fade value
fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
analogWrite(5,fadeRate);
analogWrite(4,fadeRate);
analogWrite(6,fadeRate);
analogWrite(2,fadeRate);

// fade LED
}
void sendDataToProcessing(char symbol, int data ){
Serial.print(symbol); // symbol prefix tells Processing what type of data is coming
Serial.println(data); // the data to send culminating in a carriage return
}

Leave a Reply

Your email address will not be published.