Synthemafia
Published © TAPR-OHL

Modular synth clock module DIY ARDUINO, "SM Tik-Tak"

Make your own clock module for your modular synthesizer!

BeginnerFull instructions provided24,053
Modular synth clock module DIY ARDUINO, "SM Tik-Tak"

Things used in this project

Story

Read more

Schematics

"SM TIK-TAK" conection diagram

Code

"SM TIK-TAK" arduino code

Arduino
/*********************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);

}

/*********************************************************************/

Credits

Synthemafia

Synthemafia

2 projects • 40 followers

Comments