Skip to content

Commit

Permalink
Merge pull request #22 from rv0/fix_trig_roll
Browse files Browse the repository at this point in the history
Allow rolling of the trigger outs + some refactoring
  • Loading branch information
HomoElectromagneticus authored Jun 13, 2019
2 parents 335fff5 + 5dc5fc9 commit 7ef11d5
Show file tree
Hide file tree
Showing 11 changed files with 136 additions and 146 deletions.
5 changes: 2 additions & 3 deletions Yocto/Check_Edit_Button.ino
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ void Check_Edit_Button_Pattern_Edit()
//----------------------
//check le bouton play
case 1: // Play button.
if(old_selected_mode==0 || old_selected_mode==3){
if (sync_mode == MASTER) {
button_play_count++;
if(button_play_count==1){
play=1;
Expand Down Expand Up @@ -150,7 +150,7 @@ void Check_Edit_Button_Pattern()
//----------------------
//check le bouton play
case 1:
if(sync_mode == MASTER){//selected_mode==0 || selected_mode==3){
if (sync_mode == MASTER) {
button_play_count++;
if(button_play_count==1){
//ppqn_count=0;
Expand All @@ -165,7 +165,6 @@ void Check_Edit_Button_Pattern()
first_stop=1;
}
}
//Serial.println(play,DEC);//DEBUGG
break;
//-------------------------
//check bouton scale
Expand Down
18 changes: 18 additions & 0 deletions Yocto/DinSync_out.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// All function related to dinsync handling.

void Set_Dinsync_Clock_High() {
PORTD |= (1<<4); // Set the clock high.
dinsync_clock_timeout = 4; // 4ms clock.
}

void Set_Dinsync_Clock_Low() {
PORTD &= ~(1<<4); // Lower the clock signal.
}

void Set_Dinsync_Run_High() {
PORTD |= (1<<5); // Set Run = 1.
}

void Set_Dinsync_Run_Low() {
PORTD &= ~(1<<5); // Set Run = 0.
}
8 changes: 4 additions & 4 deletions Yocto/EEprom_Fonction.ino
Original file line number Diff line number Diff line change
Expand Up @@ -850,23 +850,23 @@ void Play_Version() {
byte count = 0;
while ( count < major_version ) {
PORTC |= (1 << 7);
PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_High();
SR.ShiftOut_Update(temp_step_led,0b10);
delay(200);
PORTC &= ~(1 << 7);
PORTB &= ~(1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_Low();
SR.ShiftOut_Update(temp_step_led,0);
delay(100);
count++;
}
count=0;
while ( count < minor_version ) {
PORTC |= (1 << 6);
PORTB |= (1<<2);// met a 0 la sorti TRIG CPU
Set_CPU_Trig_High();
SR.ShiftOut_Update(temp_step_led,0b10000000);
delay(200);
PORTC &= ~(1 << 6);
PORTB &= ~(1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_Low();
SR.ShiftOut_Update(temp_step_led,0);
delay(100);
count++;
Expand Down
84 changes: 44 additions & 40 deletions Yocto/Interruption_fonction.ino
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,22 @@ void Count_96PPQN()

// if ( selected_mode == MIDI_PLAY ) return;



//PORTB &=~(1<<2);// met a 0 la sorti TRIG CPU
//Set_CPU_Trig_Low();
Reset_Trig_Out();

//MODE ROLL
if(roll_mode && ppqn_count%roll_scale[scale_type][roll_pointer] == 0 && inst_roll>0){
PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas

}
if(step_changed){

SR.ShiftOut_Update(temp_step_led,((inst_step_buffer[step_count][pattern_buffer])&(~inst_mute)|inst_roll));
Send_Trig_Out();
if (step_changed) {
step_changed=0;
PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas

SR.ShiftOut_Update(temp_step_led,((inst_step_buffer[step_count][pattern_buffer])&(~inst_mute)|inst_roll));
Send_Trig_Out((inst_step_buffer[step_count][pattern_buffer])&(~inst_mute)|inst_roll);
Set_CPU_Trig_High();
}
else{
else {
SR.ShiftOut_Update(temp_step_led,inst_roll);
//MODE ROLL
if (roll_mode && ppqn_count%roll_scale[scale_type][roll_pointer] == 0 && inst_roll>0) {
Send_Trig_Out(inst_roll);
Set_CPU_Trig_High();
}
}

ppqn_count++;//incremente le compteur PPQN96
Expand All @@ -53,17 +49,17 @@ void Count_96PPQN()
if(first_play){
MIDI_Send(0xfa);//Serial1.write(0xfa);//Midi Start
ppqn_count=0;//initialise le compteur PPQN
PORTD |= (1<<5);// met au niveau haut le sorti Din start
PORTD &= ~(1<<4);// met au niveau bas le sorti Din
Send_Trig_Out();
Set_Dinsync_Run_High();
Set_Dinsync_Clock_Low();
//Send_Trig_Out();
first_play=0;
}
// the first note after the push on start needs to be shifted over / delayed one pulse
// the PPQN needs to be savvy (?) with the first note of the machine in SLAVE DIN mode
//la premiere note apres l'appuie sur start doit etre decale d'une pulsation
//de PPQN pour etre calée avec la premiere note de la machine en SLAVE DIN
if (first_play_A && (ppqn_count==1)){
PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_High();
SR.ShiftOut_Update(temp_step_led,(inst_step_buffer[0][pattern_buffer])&(~inst_mute));
first_play_A=0;//initialise le flag
}
Expand Down Expand Up @@ -118,26 +114,28 @@ void Count_96PPQN()
}
step_count=0;//reinitialise a 0 le step compteur
debut_mesure_count=0;
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
if (tempo_led_count>=48){
tempo_led_count=0;//si le compteur egale un temps on le reinitialise
tempo_led_flag=!tempo_led_flag;//on alterne la valeur du flag de la led tempo.
}
}
//incrementer la clock de la synchro DIN tous les 4 PPQN96 pour avoir PPQN24

// Send DinSync clock (at 24ppqn).
if((ppqn_count%2)==1){ //modulo de 2 = 1 car la clock PPQN et la clock din sont decaler d'un demi cylce
bitWrite(PORTD,4,!(bitRead (PIND,4)));
}
//Incrementer la clock Midi tous les 4 PPQN96 pour avoir PPQN24

// Send MIDI beat clock (at 24ppqn).
if((ppqn_count%4)==1){
MIDI_Send(0xf8);//Serial1.write (0xf8);
MIDI_Send(0xf8);
}

for (int tempx=0; tempx<500; tempx++)
{
}//tempo pour que la pulse CPU soit egal a 1ms

PORTB &= ~(1<<2);// met a 0 la sorti TRIG CPU
Set_CPU_Trig_Low();

}

Expand All @@ -157,7 +155,7 @@ void Count_Clock() {
if (dinsync_clock_timeout != 0) {
dinsync_clock_timeout--;
if (dinsync_clock_timeout == 0) {
PORTD &= ~(1<<4); // Lower the clock signal.
Set_Dinsync_Clock_Low();
}
}
}
Expand All @@ -172,25 +170,25 @@ void Count_Clock() {
ISR (PCINT3_vect)
{
Reset_Trig_Out();

//PLAY=================================================================
if(PIND & (1<<4) && play){
PORTB &= ~(1<<2);// met a 0 la sorti TRIG CPU;

//MODE ROLL
if(roll_mode && ppqn_count%(roll_scale[scale_type][roll_pointer]/4) == 0 && inst_roll>0){//
PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
//SR.ShiftOut_Update(temp_step_led,inst_roll);
//Send_Trig_Out();
}
//Si le pas a changer
if(step_changed){
SR.ShiftOut_Update(temp_step_led,inst_step_buffer[step_count][pattern_buffer]&(~inst_mute));
Send_Trig_Out();
if (step_changed) {
step_changed=0;
SR.ShiftOut_Update(temp_step_led,((inst_step_buffer[step_count][pattern_buffer])&(~inst_mute)|inst_roll));
Send_Trig_Out((inst_step_buffer[step_count][pattern_buffer])&(~inst_mute)|inst_roll);
Set_CPU_Trig_High();
}
else{
else {
SR.ShiftOut_Update(temp_step_led,inst_roll);
//MODE ROLL
if (roll_mode && ppqn_count%(roll_scale[scale_type][roll_pointer]/4) == 0 && inst_roll>0) {
Send_Trig_Out(inst_roll);
Set_CPU_Trig_High();
}
}

//pdate le clignotements des leds
if (tempo_led_count>=12) {
tempo_led_count=0;//si le compteur egale un temps on le reinitialise
Expand All @@ -203,9 +201,9 @@ ISR (PCINT3_vect)
if(first_play){
MIDI_Send(0xfa);//Serial1.write(0xfa);//Midi Start
ppqn_count=0;
PORTB |= 1<<2;//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_High();
SR.ShiftOut_Update(temp_step_led,inst_step_buffer[0][pattern_buffer]&(~inst_mute));
Send_Trig_Out();
Send_Trig_Out(inst_step_buffer[0][pattern_buffer]&(~inst_mute));
first_play=0;
}
MIDI_Send(0xf8);//Serial1.write (0xf8);//MIDI CLOCK Tick
Expand Down Expand Up @@ -238,7 +236,7 @@ ISR (PCINT3_vect)
}
}
step_changed=1;//flag que le pas a change
PORTB |= 1<<2;//envoie une impulsion sur la sorti trig CPU a chaque pas
//Set_CPU_Trig_High();
if(step_count>=nbr_step[pattern_buffer]){
step_count=0;
if(load_pattern_ok){
Expand Down Expand Up @@ -271,6 +269,12 @@ ISR (PCINT3_vect)
tempo_led_flag=!tempo_led_flag;//on alterne la valeur du flag de la led tempo.
}
}

for (int tempx=0; tempx<500; tempx++)
{
}//tempo pour que la pulse CPU soit egal a 1ms

Set_CPU_Trig_Low();
}

void MIDI_Send(byte OutByte)
Expand Down
22 changes: 11 additions & 11 deletions Yocto/Main_Loop.ino
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
}
Expand All @@ -103,7 +103,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
}
Expand Down Expand Up @@ -133,7 +133,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
}
Expand Down Expand Up @@ -161,7 +161,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
}
Expand All @@ -188,7 +188,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
//TapeTempoInit();
Expand All @@ -214,7 +214,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
TapeTempoInit();
Expand All @@ -240,7 +240,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi (send a MIDI stop)
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
}
Expand All @@ -263,7 +263,7 @@ void loop(){
if(play){
play=0;
MIDI_Send(0xfc);//envoi un stop midi
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
MIDI.setHandleClock(Handle_Clock);// Callback Clock MIDI
Expand Down Expand Up @@ -296,7 +296,7 @@ void loop(){
if(play) {
play=0;
MIDI_Send(0xfc);//envoi un stop midi
PORTD &= ~(1<<5);//met au niveau bas la sorti DIN start =>STOP
Set_Dinsync_Run_Low();
button_play_count=0;
}
//initialise les leds suivant le channel selectionner et les sortie des instru a 0
Expand Down Expand Up @@ -358,9 +358,9 @@ void loop(){
//
SR.ShiftOut_Update(temp_step_led,inst_midi_buffer);

PORTB |= (1<<2);//envoie une impulsion sur la sorti trig CPU a chaque pas
Set_CPU_Trig_High();
delayMicroseconds(10);
PORTB &= ~(1<<2);
Set_CPU_Trig_Low();

Send_Trig_Out_Midi();

Expand Down
Loading

0 comments on commit 7ef11d5

Please sign in to comment.