/*********************Programmed by SyntheMafia(06_06_2018)**********************/
#include <SimpleTimer.h>
SimpleTimer timer;
int count = 0;
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(10, INPUT);
}
bool started = false;
int priority = 0;
int tapX = 0;
int tapactual;
int tap_time;
int time_actual;
int input1X = 0;
float BPM;
int max_BPM = 500; /******************************************** write hier the max BPM that you want */
int min_BPM = 60; /******************************************** write hier the min BPM that you want */
int max_time = ((1/(min_BPM/60)) * 1000);
int min_time = ((1/(max_BPM/60)) * 1000);
void loop() {
if (!started) {
cycle_on();
started = true;
}
timer.run();
if (digitalRead(10) == HIGH && tapX ==0){
tapX = millis ();
while (digitalRead (10) == HIGH){
delay(10);
}
}
if (digitalRead (10) == HIGH && tapX !=0 ){
tapactual = millis ();
tap_time = (tapactual - tapX);
if (tap_time > max_time){
tap_time = max_time;
}
if (tap_time < min_time){
tap_time = min_time;
}
tapX = tapactual;
priority = 1;
while (digitalRead (10) == HIGH){
delay(10);
}
}
time_actual = millis ();
if ((time_actual - tapX) > 4000){
tapX = 0;
}
Serial.print(" BPM: ");
Serial.println(BPM);
}
/*********************************************************************/
void cycle_off() {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
count++;
if (count == 8) {
count = 0;
}
}
/*********************************************************************/
void cycle_on() {
switch (count) {
case 0:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
break;
case 1:
digitalWrite(2, HIGH);
break;
case 2:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
break;
case 3:
digitalWrite(2, HIGH);
break;
case 4:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
break;
case 5:
digitalWrite(2, HIGH);
break;
case 6:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
break;
case 7:
digitalWrite(2, HIGH);
break;
}
int input1 = analogRead(A0);
int input2 = analogRead(A1);
if (priority == 0){
BPM = map(input1, 0, 1023, min_BPM, max_BPM);
}
if (priority == 1){
BPM = (60000 / tap_time);
}
if (input1X - input1 > 5){
priority = 0;
}
if (input1X - input1 < -5){
priority = 0;
}
input1X = input1;
float duration_percentage = map(input2, 0, 1023, 1, 90);
int cycletime = (60000/BPM);
float cycle_start = cycletime;
float cycle_stop = (cycletime * (duration_percentage/100));
timer.setTimeout(cycle_start, cycle_on);
timer.setTimeout(cycle_stop, cycle_off);
}
/*********************************************************************/
Comments