project to clone Ed Sheeran's Chewie II

Started by jovid196168, March 08, 2017, 07:21:00 PM

Previous topic - Next topic

jovid196168

Good work MarshallArts, manage to really reduce the code there. I had a problem opening the download of the program, so I just copied and pasted it into a new arduino file. What are your plans now? I'm trying to figure out a few things like leds, logo, knob and monitors.

MarshallArts

Getting the status back from the tracks would be great. It is almost impossible to do that with the arduino (and stay synced with the track status in moebius).

Getting an LED to blink in sync with the loops would be enough for me, no need for monitors for me.

Maybe, I will add four rotary encoders or sliders for output level of each track (saves me a mixer for small events).

Lastly, an enclosure...

jovid196168

I know a guy online, who has the LEDs stating the tracks status'. He used a separate microcontroller for them. We tried to combine the program with mine and it didn't quite work. But he thinks he may have done it. But he's on vacation at the moment so I'm unable to test the program. But here is his program just for the LEDs. Maybe you could work something out with it?

//PROGRAMMING OF READING MIDI AND FEEDBACK IN LEDS
byte commandByte;
byte noteByte;
byte velocityByte;

byte noteOn = 144;

int trk1ledg = 2;
int trk1ledr = 3;
int trk2ledg = 4;
int trk2ledr = 5;
int trk3ledg = 6;
int trk3ledr = 7;
int trk4ledg = 8;
int trk4ledr = 9;

void setup(){
Serial.begin(31250);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, LOW);
digitalWrite(trk2ledg, LOW);
digitalWrite(trk3ledg, LOW);
digitalWrite(trk4ledg, LOW);
delay (500);
//START UP SEQUENCE
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
delay (300);
digitalWrite(trk1ledr, HIGH);
digitalWrite(trk2ledr, HIGH);
digitalWrite(trk3ledr, HIGH);
digitalWrite(trk4ledr, HIGH);
delay (300);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
delay (300);
digitalWrite(trk1ledr, HIGH);
digitalWrite(trk2ledr, HIGH);
digitalWrite(trk3ledr, HIGH);
digitalWrite(trk4ledr, HIGH);
delay (300);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
delay (300);
digitalWrite(trk1ledr, HIGH);
digitalWrite(trk2ledr, HIGH);
digitalWrite(trk3ledr, HIGH);
digitalWrite(trk4ledr, HIGH);
delay (300);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
delay (300);
digitalWrite(trk1ledg, HIGH);
digitalWrite(trk2ledg, HIGH);
digitalWrite(trk3ledg, HIGH);
digitalWrite(trk4ledg, HIGH);
delay (1100);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, LOW);
digitalWrite(trk2ledg, LOW);
digitalWrite(trk3ledg, LOW);
digitalWrite(trk4ledg, LOW);
}
//____________________LEDS CONTROL SEQUENCES_____________________________________________________________________________
void playall (){
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, HIGH);
digitalWrite(trk2ledg, HIGH);
digitalWrite(trk3ledg, HIGH);
digitalWrite(trk4ledg, HIGH);
}

void stopall (){
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, LOW);
digitalWrite(trk2ledg, LOW);
digitalWrite(trk3ledg, LOW);
digitalWrite(trk4ledg, LOW);
}

void blinkingtracks (){
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, HIGH);
digitalWrite(trk2ledg, HIGH);
digitalWrite(trk3ledg, HIGH);
digitalWrite(trk4ledg, HIGH);
delay (200);
digitalWrite(trk1ledg, LOW);
digitalWrite(trk2ledg, LOW);
digitalWrite(trk3ledg, LOW);
digitalWrite(trk4ledg, LOW);
delay (200);
digitalWrite(trk1ledr, HIGH);
digitalWrite(trk2ledr, HIGH);
digitalWrite(trk3ledr, HIGH);
digitalWrite(trk4ledr, HIGH);
delay (200);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
delay (200);
digitalWrite(trk1ledr, HIGH);
digitalWrite(trk2ledr, HIGH);
digitalWrite(trk3ledr, HIGH);
digitalWrite(trk4ledr, HIGH);
delay (200);
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
}
//______________________MIDI COMMANDS SECUENCE__________________________________________________________________________________________
void checkMIDI(){
do{
if (Serial.available()){
commandByte = Serial.read();//read first byte
noteByte = Serial.read();//read next byte
velocityByte = Serial.read();//read final byte
if (commandByte == noteOn){//if note on message
//check if note == 60 and velocity > 0

if (noteByte == 20 && velocityByte > 0){ //PLAY BUTTON. TURNS EVERY TRACK LED ON GREEN
//void playall ();
digitalWrite(trk1ledr,LOW);
digitalWrite(trk1ledg,HIGH);
digitalWrite(trk2ledr,LOW);
digitalWrite(trk2ledg,HIGH);
digitalWrite(trk3ledr,LOW);
digitalWrite(trk3ledg,HIGH);
digitalWrite(trk4ledr,LOW);
digitalWrite(trk4ledg,HIGH);
/*/}
if (noteByte == 19 && velocityByte > 0){ //STOP BUTTON. TURNS EVERY TRACK LED OFF
void stopall ();
/*/
}
if (noteByte == 19 && velocityByte > 0){ //CLEAR & CLEAR BUTTON. TURNS EVERY TRACK LED OFF & MAKE THEM BLINK
digitalWrite(trk1ledr, LOW);
digitalWrite(trk2ledr, LOW);
digitalWrite(trk3ledr, LOW);
digitalWrite(trk4ledr, LOW);
digitalWrite(trk1ledg, LOW);
digitalWrite(trk2ledg, LOW);
digitalWrite(trk3ledg, LOW);
digitalWrite(trk4ledg, LOW);
}
if (noteByte == 1 && velocityByte > 0){ //RECORD LOOP 1 BUTTON. TURNS TRACKS LED 1 ON RED
digitalWrite(trk1ledg,LOW);
digitalWrite(trk1ledr,HIGH);//turn on led
}
if (noteByte == 2 && velocityByte > 0){ //PLAY LOOP 1 BUTTON. TURNS TRACKS LED 1 ON GREEN
digitalWrite(trk1ledr,LOW);
digitalWrite(trk1ledg,HIGH);
//turn on led

}
if (noteByte == 3 && velocityByte > 0){ //STOP LOOP 1 BUTTON
digitalWrite(trk1ledg,LOW);
digitalWrite(trk1ledr,LOW);


}
if (noteByte == 4 && velocityByte > 0){ //RECORD LOOP 2 BUTTON. TURNS TRACKS LED 2 ON RED
digitalWrite(trk2ledg,LOW);
digitalWrite(trk2ledr,HIGH);//turn on led
}
if (noteByte == 5 && velocityByte > 0){ //PLAY LOOP 2 BUTTON. TURNS TRACKS LED 2 ON GREEN
digitalWrite(trk2ledr,LOW);
digitalWrite(trk2ledg,HIGH);
}
if (noteByte == 6 && velocityByte > 0){ //STOP LOOP 2 BUTTON.
digitalWrite(trk2ledr,LOW);
digitalWrite(trk2ledg,LOW);

}
if (noteByte == 21 && velocityByte > 0){ //RECORD LOOP 3 BUTTON. TURNS TRACKS LED 3 ON RED
digitalWrite(trk3ledg,LOW);
digitalWrite(trk3ledr,HIGH);
}
if (noteByte == 8 && velocityByte > 0){ //PLAY LOOP 3 BUTTON. TURNS TRACKS LED 3 ON GREEN
digitalWrite(trk3ledr,LOW);
digitalWrite(trk3ledg,HIGH);
}
if (noteByte == 9 && velocityByte > 0){ //STOP LOOP 3 BUTTON.
digitalWrite(trk3ledr,LOW);
digitalWrite(trk3ledg,LOW);
}
if (noteByte == 16 && velocityByte > 0){ //RECORD LOOP 4 BUTTON. TURNS TRACKS LED 4 ON RED
digitalWrite(trk4ledg,LOW);
digitalWrite(trk4ledr,HIGH);
}
if (noteByte == 17 && velocityByte > 0){ //PLAY LOOP 4 BUTTON. TURNS TRACKS LED 4 ON GREEN
digitalWrite(trk4ledr,LOW);
digitalWrite(trk4ledg,HIGH);
}
if (noteByte == 18 && velocityByte > 0){ //STOP LOOP 4 BUTTON.
digitalWrite(trk4ledr,LOW);
digitalWrite(trk4ledg,LOW);


}
}
}
}

while (Serial.available() > 2);//when at least three bytes available
}


void loop(){
checkMIDI();
delay(100);
//digitalWrite(2,LOW);//turn led off
}

MarshallArts

Cool... That takes the midi signals from the controller, not moebius, right? I would try to make moebius spit out midi directly (also for the blinking loop indicator), but if this fails, I can integrate the above approach in my code. If only the circular labs forum would work...

jovid196168

I'm not 100% sure, his circuit has both midi in and out. So most likely yes. Well it give you something to work with I guess. Has the forum been shut down? Haven't been able to get onto it for some time. I heard from someone there is a Facebook community. But I don't know what it's under.

MarshallArts

#105
Major progress: I spent hours to modify my circuit. I now have all buttons attached to one analog pin (which will allow me to use a single TRS Cable to connect the controller with a separate footswitch-enclosure). I will most likely not use a monitor, as this new circuit has everything I need:

- "Armed" LEDs (orange, on top right of the picture below). They indicate "armed" to be played back if "rec/play" is pressed next in play mode.
- The usual Track LEDs (Red=record/Green=play/Off=mute) that perfectly allign with the moebius behaviour (reverse engineered and solely controlled by the arduino, so no midi signals required to be sent from Moebius)
- LED to indicate Play (=blue) and rec (=red) mode. Can´t go off, so it´s a power LED as well.

Some workflow-things still pending (see introduction to the code) but I am quite happy so far.



Here is a video of that software being used:



And here is the code:
https://drive.google.com/open?id=133EMsgiX7jnODc5YzcJ33rf-Ux7Rx_1Z

[Edit]: Here is the schematic:


The schematic includes the heartbeat LED... I got it working ok, but it drifts out of sync after few minutes. I guess it is a matter of programming/calculation/data types in the code, but it should be possible to make it sync perfectly. If I get that done, I can activate it later.

Next: Fix the missing things in the software (maybe, I could also live without them) and think about an enclosure. I will produce a PCB for a 1590B with just the 10 LEDs, a complete Nano (including the USB-Port for powering the unit from my notebook), a MIDI Out and a TRS for the (passive) footswitch.

MarshallArts

P. S. The Music you hear is not related with the video.




jovid196168

Hey, great work there! I've been working on mine too this weekend. I've managed to make some good progress with a friend. What scripts have you used?

MarshallArts

I just used the scripts available from the insructables / sonnit website.

MarshallArts

Updated the post above with schematics.

MarshallArts

I added volume control for each track and skipped the idea of the resistor network - it was not consistent enough with a long cable and cheap momentary switches. With the volume controls, I feel it's drifting away from the original topic of this thread, so I will continue the disucussion here:

http://www.madbeanpedals.com/forum/index.php?topic=28107.0

There is also a detailed documentation (and code and schematics and PCB layout) availble..

DFX-PCBS

Sheeran just gets on my nerves. The ginger bastard is everywhere. Good project tho

jovid196168

Hello, I just wanted to share an update on my project that I have now finished. If you would like to check it out head to my instagram post https://www.instagram.com/p/BwMwoQOjvXr/?utm_source=ig_share_sheet&igshid=4cqu00mugqeb. I will be following this up with a write up about the whole pedal. Thanks

Joseph

stevenjohanessen

Amazing work! Do you mind sending the program?

willienillie


jovid196168

Sorry I've been away for awhile, I get many people requesting me to send my program to them via instagram or asking me how to build one. Like last night when I was actually at an Ed Sheeran concert, it never stops. Unfortunately I won't be sending or sharing my program online, plus it's been completely rewritten and wouldn't work with the majority of your pedals as it's written to suit my setup and works a little bit different to how the original program was written. There's a lot more going on in the program with how the led's are controlled, it's amazing after all these years people are still interested with the build. Hopefully I can share some content in the near future.


deadastronaut

Ive been playing with mobious on pc a lot lately,

I just built a foot pedal with 12 momentary switches

And a usb game contoller pcb, assign the buttons in joy to key, done...

Nice simple setup.

Lots of fun.  8) 8) 8)

The handy thing is it doubles up as midi footpedals to trigger notes in cubase in conjunction with the cubase on screen keyboard...

And the other cool thing with joy to key is you can setup multiple profiles for different applications...

Nice uber simple build for mobious users...
https://www.youtube.com/user/100roberthenry
https://deadastronaut.wixsite.com/effects

chasm reverb/tremshifter/faze filter/abductor II delay/timestream reverb/dreamtime delay/skinwalker hi gain dist/black triangle OD/ nano drums/space patrol fuzz//