PDA

View Full Version : zelfbouw midi pedaal



nak
10 oktober 2013, 12:43
Ik tob met het idee om voor mijn blackstar een midi pedaal te maken.
Ik heb de fs10 voetpedaal erbij maar daar zitten maar 4 knoppen op en ik zou graag 6 willen hebben.

Bigfoot woont echter niet in Amerika maar op mijn adres en daarom heb ik ooit een mooie zelfbouw pedaal gemaakt met 6 non latching switches met genoeg ruimte tussen de schakelaars.
Een normaal midipedaal gaat geheid mis bij mijn maat 48, ik trap minstens twee knoppen tegelijk in.
Daarom zou ik mijn pedaal daarvoor willen gebruiken.

De zoekfunctie leverde niet zoveel op alleen het advies een bestaand model te kopen de boel eruit slopen en dan in mijn pedaal te bouwen.
Ik heb alleen maar 6 verschillende patches nodig, geen up/down gedoe oid.

Is er iemand op GN die mij verder kan helpen, tips bv hoe schakelaars verbinden naar een midicontoller?

hole
10 oktober 2013, 17:10
Ambitieus! Ben benieuwd of je een oplossing vindt.

Overigens zijn er HEEL veel midicontrollers op de markt, en waarschijnlijk ook wel eentje die aan jouw eisenpakket voldoet.

Welke schoenmaat heb je trouwens...?? :D

Edit: Engl z12 of z9 ???

nak
10 oktober 2013, 19:10
engl had ik al bekeken, ben nu meer aan het googelen op bouwprojecten met een arduino print.
elektronica is mij niet onbekend maar het programmeren is niet zo mijn ding.
in ieder geval probeer ik eerst de theorie maar eens te doorgronden.

hole
11 oktober 2013, 08:18
Van electronica heb ik geen kaas gegeten. Ben wel 'ervaringsdeskundige' (of in ieder geval iemand met ervaring :D) in het programmeren van een midi setup...dus als je daar hulp bij wilt..laat maar weten ;)

synthy
14 december 2013, 14:55
Ik heb verstand van electronika en van programmeren van arduino enz. Als het nog niet gelukt is moet je maar even vertellen wat je precies wilt, dan kan ik kijken wat ik voor je kan doen.:)

nak
15 december 2013, 12:57
Hoi Synthy,
Ben bang dat ik een beetje te enthousiast te werk ben gegaan.
Het elektronica is het probleem niet maar het programmeren valt enorm tegen.
Ik dacht dat moet wel lukken maar ik heb alleen wat basic ervaring en dat is ook al 20 jaar geleden.
Al met al blijft het projectje nu aan de kant liggen en merk dat ik het moeilijk vind de taal onder de knie te krijgen.
Ben bezig geweest met het ontrafelen van het programma op arduino.cc http://playground.arduino.cc/Learning/MidiFootCode
Maar er staat te weinig info achter de instructies om er een beeld van te vormen wat er gebeurt.
Daarbij is mijn opzet ook iets anders, nl:

Ik heb een footswitch met 5 schakelaars(momentary, aangesloten op I/O 3 t/m 7), en 5 leds (I/O 8 t/m 12) boven elke schakelaar.
Als ik een schakelaar indruk moet de bijbehorende led continu gaan branden en stuurt de arduino een programchange via een midikabel naar mijn versterker.
Met de schakelaars kan ik dan presets kiezen 0 t/m 5

Dan heb ik nog een schakelaar(latch, op I/O 2)en als ik die op on zet dan moeten de Programchange code met 5 verhoogt worden zodat ik dan met de footswitches preset 5 t/m 10 kan kiezen.

Ik zou het zeer op prijs stellen als je me hier mee wilt helpen aangezien ik de moed al een beetje begon te verliezen.
Ik zat zelf met scanloops te denken voor de schakelaars maar dat werd me afgeraden anders loopt de boel vast, wellicht werkt het dus anders dan ik denk.
Ik hoop dat het duidelijk is wat ik zou willen, en ben met elk stukje programma wat me verder helpt heel blij.

obiwanjacobi
15 december 2013, 13:53
Ik heb ook ervaring in digitale electronica en programeren (C/C++/C#) en de Arduino.

Bij de schakelaars moet je rekening houden met het denderen van de contacten. Hierdoor zou je programmaatje kunnen denken dat de schakelaar heel vaak achter elkaar wordt ingedrukt en weer los gelaten. Maar goed, zo te horen ben je nog niet zover.

Refererend aan http://playground.arduino.cc/Learning/MidiFootCode

Deze defines maken de text (bijv. SWITCH1) gelijk aan de 'waarde' die er achter staan. Dit is een handige manier om op 1 plek te definieren hoe je hardware aan de arduino hangt. Mocht dat veranderen dan hoef je dat alleen hier aan te passen.

#define SWITCH1 2
#define SWITCH2 3
#define SWITCH3 4
#define SWITCH4 5
#define SWITCH5 6
#define LED1 7
#define LED2 8
#define LED3 9
#define LED4 10
#define LED5 11
#define BOUNCEDELAY 25

Deze arrays worden gebruikt om eenvoudig (met een index) meerdere switches en leds te kunnen manipuleren. Anders zou je voor elke switch en led een vergelijkbaar stukje programma krijgen waar alleen het IO pinnetje anders is.

int switches[5] = { SWITCH1, SWITCH2, SWITCH3, SWITCH4, SWITCH5 };
int switchState[5] = { HIGH, HIGH, HIGH, HIGH, HIGH };
int leds[5] = { LED1, LED2, LED3, LED4, LED5 };

De code in de setup() method zet de baudrate voor MIDI communicate en initialiseert de IO pinnen obv de Switch en Led arrays.

De loop() method wordt herhaaldelijk aangeroepen. Hierin gaan ze elke switch langs en lezen ze de input:

for( currentSwitch = 0; currentSwitch < 5; currentSwitch++ ) {
if((digitalRead(switches[currentSwitch]) != switchState[currentSwitch] )&&(switchState[currentSwitch] == HIGH)){
switch( currentSwitch )
De 'currentSwitch' variable bevat de index van welke switch er gelezen wordt. Voor elke switch is er een ander stukje logica in het switch statement geprogrameerd. ByPass, Prev/Next program etc. Hier wil jij dus iets anders. programmeren.

Je ziet dat het programma even wacht (delay) en daarna weer de input leest. Dit om de dender in de contacten over te slaan.

delay( BOUNCEDELAY );
}
switchState[currentSwitch] = digitalRead( switches[currentSwitch] );

Zodra de loop() method klaar is, wordt-ie opnieuw aangeroepen.



Ik zou beginnen met een programma dat je knoppen leest en de juiste leds aan stuurt. Vergeet MIDI nog even. Dat bouwen we dan later in.

Hope it helps.
Marc

nak
16 december 2013, 16:08
Als ik goed begrijp veranderd de 'currentswitch' dan van 0 t/m 5
Is dan diezelfde variabele ook te gebruiken voor de leds? want ik gebruik 'flashpin' nl niet.
Moet ik dan in onderstaande iets voor de leds integreren zoals:

digitalwrite(leds[currentswitch],high)


for( currentSwitch = 0; currentSwitch < 5; currentSwitch++ ) {
if((digitalRead(switches[currentSwitch]) != switchState[currentSwitch] )&&(switchState[currentSwitch] == HIGH)){
switch( currentSwitch )


De loop() method wordt herhaaldelijk aangeroepen. Hierin gaan ze elke switch langs en lezen ze de input:
ok dat volg ik nog maar waar gaat de 'waarde' van die input heen?, zie geen variabele bij de defines staan

Bouncedelay snap ik da's voor anti dender van de schakelaars.

obiwanjacobi
16 december 2013, 20:03
Als ik goed begrijp veranderd de 'currentswitch' dan van 0 t/m 5
Bijna ;-) De conditie in het midden (tussen de twee ;) moet waar zijn om de loop door te laten gaan
Dus:

for( currentSwitch = 0; currentSwitch < 5; currentSwitch++ )
Geeft je 5 iteraties: 0, 1, 2, 3, 4. Bij 5 is de conditie niet meer waar (5 < 5).


Is dan diezelfde variabele ook te gebruiken voor de leds?
Yep, omdat je net zoveel switches hebt als leds.


Moet ik dan in onderstaande iets voor de leds integreren zoals:
digitalwrite(leds[currentswitch],high)
Probeer maar. Je zal zien dat al je leds gaan branden - want je geeft HIGH mee (hoofdletters maken WEL uit!).
Ik zou een extra array maken met ledState[] - net zoals bij switchState. Het grote verschil is dat je bij de leds een on/off latch functie wilt. Deze is makkelijk te krijgen door telkens wanneer een switch actief is, het omgekeerde van de ledState naar de desbetreffende led te schrijven.

ledState[currentswitch] = !ledState[currentswitch];
digitalWrite(leds[currentswitch], ledState[currentswitch]);


waar gaat de 'waarde' van die input heen
switchState[currentswitch]. Zie onderaan de loop() method

switchState[currentSwitch] = digitalRead( switches[currentSwitch] );

Hope it helps,
Marc

obiwanjacobi
17 december 2013, 09:29
Heb even een gooi gedaan naar de code - zonder compiler ;-)
Hope it help.



// number of switches == number of leds!
#define SWITCHCOUNT 5

// input IO pins
#define SWITCH1 2
#define SWITCH2 3
#define SWITCH3 4
#define SWITCH4 5
#define SWITCH5 6

// ouput IO pins
#define LED1 7
#define LED2 8
#define LED3 9
#define LED4 10
#define LED5 11

#define BOUNCEDELAY 25

int switches[5] = { SWITCH1, SWITCH2, SWITCH3, SWITCH4, SWITCH5 };
// Initial state of switch is high due to internal pullup
bool switchState[5] = { HIGH, HIGH, HIGH, HIGH, HIGH };

int leds[5] = { LED1, LED2, LED3, LED4, LED5 };
bool ledState[5] = { LOW, LOW, LOW, LOW, LOW };


void setup()
{
// Set MIDI baud rate:
Serial.begin(31250);

// Setup Switches and activation LEDs
for( int currentSwitch = 0; currentSwitch < SWITCHCOUNT; currentSwitch++ )
{
// set inputs for the switch IO pins
pinMode( switches[currentSwitch], INPUT );
// writing to an input activates the internal pullup resistor
digitalWrite( switches[currentSwitch], HIGH );

// set outputs for the led IO pins
pinMode( leds[currentSwitch], OUTPUT );
// initialize the leds to reflect the internal led state
digitalWrite(leds[currentSwitch], ledState[currentSwitch]);
}
}

void loop()
{
for( int currentSwitch = 0; currentSwitch < SWITCHCOUNT; currentSwitch++ )
{
if(((bool)digitalRead(switches[currentSwitch]) != switchState[currentSwitch] ) &&
(switchState[currentSwitch] == HIGH))
{
OnSwitchActive(currentSwitch);
SendMidiProgramChange(currentSwitch);

delay( BOUNCEDELAY );
}

switchState[currentSwitch] = (bool)digitalRead( switches[currentSwitch] );
}
}

void SendMidiProgramChange(int switchIndex)
{
// TODO:
}

void OnSwitchActive(int switchIndex)
{
bool currentLedValue = ledState[switchIndex];

ResetLeds();

ledState[switchIndex] = !currentValue;
}

void ResetLeds()
{
for( int ledIndex = 0; ledIndex < SWITCHCOUNT; ledIndex++)
{
ledState[ledIndex] = LOW;
}
}

nak
17 december 2013, 17:16
thnx, het zal wel ff duren dat ik het doorgespit heb.
Morgen maar ff wat tijd voor vrijmaken.
Ben in ieder geval blij dat er wat shot in komt,
merk dat m'n enthousiasme weer groeit en energie heb om de theorie onder de knie te krijgen,
iets wat ik nogal overschat heb.

HaroldA
17 december 2013, 17:47
How do I access all 128 patches?
You can access all 128 patches via the INSIDER software, the FS-10 footcontroller or MIDI.

Ehm, is het niet handiger om eerst ff uit te zoeken hoe die FS-10 werkt voordat je je volledig in Midi stort?

obiwanjacobi
17 december 2013, 18:47
thnx, het zal wel ff duren dat ik het doorgespit heb.
Morgen maar ff wat tijd voor vrijmaken.
Ben in ieder geval blij dat er wat shot in komt,
merk dat m'n enthousiasme weer groeit en energie heb om de theorie onder de knie te krijgen,
iets wat ik nogal overschat heb.

Als je met concrete vragen/problemen komt, ben ik altijd bereid je verder te helpen.

nak
17 december 2013, 22:27
Ehm, is het niet handiger om eerst ff uit te zoeken hoe die FS-10 werkt voordat je je volledig in Midi stort?

Ik speel nu met de FS10, maar de knoppen vind ik te dicht bij elkaar zitten en ik speel totaal met 5 presets terwijl ik maar 4 knoppen heb op de fs10.
Ik maak dan gebruik van banks maar vind het onhandig te schakelen tussen de banks.
Met mijn pedaal kan ik gebruik maken van 5 knoppen en hoef ik n.l geen banks te schakelen.

HaroldA
17 december 2013, 23:19
Ik speel nu met de FS10, maar de knoppen vind ik te dicht bij elkaar zitten en ik speel totaal met 5 presets terwijl ik maar 4 knoppen heb op de fs10.
Ik maak dan gebruik van banks maar vind het onhandig te schakelen tussen de banks.
Met mijn pedaal kan ik gebruik maken van 5 knoppen en hoef ik n.l geen banks te schakelen.

Is het "protocol" van de FS-10 niet veel simpeler dan full-blown midi? Misschien is heel dat ding wel lekker analoog en heb je zo een footswitch in elkaar gezet met 6 knoppen.

nak
18 december 2013, 08:55
Zal zeker een stuk digitaal zijn aangezien alle signalen serieel gaan over één simpele instrumentkabel.
Denk dat het uitpluizen van die elektronica meer hoofdbreken opbrengt dan m'n arduino printje, aangezien Blackstar zijn schema's niet prijs geeft.

DarknessAwaits
18 december 2013, 09:10
Zal zeker een stuk digitaal zijn aangezien alle signalen serieel gaan over één simpele instrumentkabel.
Denk dat het uitpluizen van die elektronica meer hoofdbreken opbrengt dan m'n arduino printje, aangezien Blackstar zijn schema's niet prijs geeft.

Wat wil je precies doen met je Blackstar (welk model is het)? Waarschijnlijk werkt hij gewoon met program changes, dat is redelijk eenvoudig te maken met een Arduino.

obiwanjacobi
18 december 2013, 10:05
Waarschijnlijk werkt hij gewoon met program changes

Of niet. Het is iig geen standaar Midi aansluiting en kans is groot dat er eigen protocol overheen gaat. Sowieso moet het signaal iig gesuperponeerd worden op de voedingspanning.

Ik zou simpel beginnen met gewone schakelaars en leds. Desnoods zelf te maken met Stop-switches etc... of een sloop boardje voor weinig op de kop tikken en die modden...

nak
18 december 2013, 16:42
Volgens mij gewoon midi
http://www.blackstaramps.com/pdf/handbooks/id-handbook-60-100-260.pdf
pagina 51

Marc, wat betekent 'bool' is dat boolean?

obiwanjacobi
18 december 2013, 18:19
Ja, bool is boolean. Net als int integer is...

tnijland
19 december 2013, 19:16
ha, ha een paar puntschoenen zijn waarschijnlijk goedkoper. Nou ik wens je veel succes ... Op basis van je software vragen heb ik de indruk dat je toch nog behoorlijk eind hebt te gaan ;-) Maar ja het wordt kerst dus je weet het niet en programmeren kan behoorlijk verslavend werken...

Maar zonder gekheid. Is het niet verstandiger om een goede midi-controller te zoeken, deze uit te bouwen en vervolgens mechanisch naar je eigen wensen aan te passen?

nak
20 december 2013, 11:55
Ben wat bezig met uitpluiswerk maar heb nog een paar vraagjes.

pinMode( switches[currentSwitch], INPUT );
current switch staat hier tussen rechte aanhaaltekens maar kon niet vinden wat het is.
Samen met switches vormt het de 'pin' gedeelte van de pinmode instructie.
Current switch word ook nergens gedefinieerd als constante of variabele, dus dat is me nog niet heel duidelijk.

Het eerste stuk van het programma snap ik nu een beetje, verderop zijn er nog wat items zoals:

OnSwitchActive(currentSwitch);
is me ook nog niet duidelijk wat dat is of doet.

obiwanjacobi
20 december 2013, 12:43
Ik kan je aanraden om wat in te lezen in de standaard C/C++ instructies. Er is een heleboel info op inet te vinden.

"switches" is een array - een rijtje waarden van hetzelfde type (int). De initialisatie van een array gebeurt met "= { ... }". Dus de switches array is geinitialiseerd met de waarden van SWITCH1-SWITCH5. Die waarden stellen dus het pin nummer voor. Het uitlezen van een waarde uit een array gebeurt met "[index]". de currentSwitch is dus de indexer naar/in de switches array. Deze indexen beginnen altijd bij 0 (zero) en lopen tot de lengte van de array-1. Dit is ook precies wat de for-loop doet (0, 1, 2, 3, 4). De combinatie van de array en een for-loop die de index steeds laat oplopen is dus een makkelijke manier om met meerdere waarden op dezelfde manier te werken: in dit geval worden alle switch-inputs geinitialiseerd.

OnSwitchActive is een functie die verder op gedefinieerd staat. De instructie OnSwitchActive(currentSwitch) is de aanroep van de functie met als parameter de waarde van de 'currentSwitch' variabele (uit de for-loop).

Hope it helps.

nak
22 december 2013, 15:44
Ok, was op zoek gegaan naar een functie maar kon deze nergens vinden, is dus een stukje prog.
Gisteren alvast wat geprobeerd maar compiler geeft:

In function 'void OnSwitchActive(int)':
76: error: 'currentValue' was not declared in this scope
heb currentvalue veranderd in currentledvalue en nu geen melding meer.

Leds doen het echter niet, ben er nog niet achter waarom niet. De lijnen van de schakelaars worden wel hoog en schakelen naar massa.
Vroeger konden we iets stap voor stap doen maar heb die functie nog niet gevonden bij de arduino software.

obiwanjacobi
22 december 2013, 16:36
Yep, dat was een copy-paste foutje van mij - toch wel handig zo'n compiler die je even controleerd.

Debuggen is vrij lastig op een remote MCU. Er zijn wel systemen die het wel kunnen maar ik heb het bij de Arduino nog niet gezien.

Je kan de Serial (Write uit mijn hoofd) gebruiken om info naar de terminal console te sturen op je PC (over de USB aansluiting).

Als er iets niet werkt: isoleer het (desnoods in een apart programmaatje) en test het op de meest simpele manier. Bijv: pinMode en dan digitalWrite op een hard coded pin. Zo weet je of de hardware goed is en het een software bug is of andersom (of allebei).

Hope it helps.

nak
22 december 2013, 17:57
ga ik doen, kan nog net voor de kerstdagen.

nak
23 december 2013, 16:24
ff looplicht progje gemaakt, Leds doen het allemaal.
Dat wordt spitten in de theorie.

obiwanjacobi
23 december 2013, 16:32
Prima! Weer wat wijzer geworden.

Als je je code post, kan ik je misschien een hint geven... ?

nak
23 december 2013, 19:19
ehh, ik zou eerst ff de hardware testen met directe pinmode instructies, alle 5 leds werken dus.
Ergens in je stukje programma zal er wat mis gaan.
Zelf denk ik aan het stuk:

// Setup Switches and activation LEDs
for( int currentSwitch = 0; currentSwitch < SWITCHCOUNT; currentSwitch++ )
{
// set inputs for the switch IO pins
pinMode( switches[currentSwitch], INPUT );
// writing to an input activates the internal pullup resistor
digitalWrite( switches[currentSwitch], HIGH );

// set outputs for the led IO pins
pinMode( leds[currentSwitch], OUTPUT );
// initialize the leds to reflect the internal led state
digitalWrite(leds[currentSwitch], ledState[currentSwitch]);
}
}

Marc moet int currentSwitch niet eerst gedefinieerd worden? Stond er n.l niet bij de defines

obiwanjacobi
23 december 2013, 19:43
Syntactisch kan het beide (compileert toch, neem ik aan?). Ik vind deze manier (de variabele in de for-loop definieren) meer-juist. De variabele kan alleen binnen de for-loop worden gebruikt - plaats, doel en gebruik zijn allemaal met elkaar in overeenstemming. Minder kans op nare bijverschijnselen etc.

Je zou deze code (inclusief de arrays die globaal staan) kunnen overzetten in een apart programmaatje. Daar kan je dan testen of je schakelaars en leds het doen.

BTW: als je in initialisatie van de ledState array ({}) een waarde veranderd zou er een Ledje aan moeten gaan...

peter_heijnen
2 januari 2014, 10:42
Mag ik deze even kapen?

Wat ik allemaal lees in dit topic gaat mijn pet te boven maar ik wil wel graag een heel simpele kleine midi controler. Enkel 6 switches die PC 1 t/m 6 versturen, een midi uit en een dc in. Geen bank up/down noch display, simpel en klein!

Hoe moeilijk/ingewikkeld is dat te maken voor mr total noob?

nak
2 januari 2014, 12:26
Nou Peter, daar ben ik nu net mee bezig.
Maar ik vind de schakelaars van bestaande modellen te dicht bij elkaar staan, daarom kies ik voor zelfbouw met een arduino microprocessor printje.
Ik hoef ook geen up/down en display, maar misschien is een Z9 van engl beter geschikt voor jou.

Ik heb die van mij bijna klaar(foto's volgen zsm) maar heb nog wat programma bugs.
Alles werkt nu met leds en al, behalve schakelaar1 geeft bij loslaten ook een midicode af.
Zal de scoop er eens opzetten en kijken hoe of wat.

En het is niet handig dat ik het subprogje 'resetleds' 5x moet uitschrijven en niet onderaan mag zetten.
Hopelijk kan Marc me hiermee helpen waarom niet.
Tevens een extra schakelaar erin gezet welke voor een offset zorgt.
Ik heb keuze uit patch 0 t/m 5 of 6 t/m 10 van de Blackstar amp.



//constants:
#define SWITCHCOUNT 5

// input IO pins
#define SWITCHoffset 2
#define SWITCH1 3
#define SWITCH2 4
#define SWITCH3 5
#define SWITCH4 6
#define SWITCH5 7

// assignes LED1 t/m 5 to I/O pins 8 t/m 12
#define LED1 8
#define LED2 9
#define LED3 10
#define LED4 11
#define LED5 12

#define BOUNCEDELAY 100

//Variabeles:
int switches[5] = { SWITCH1, SWITCH2, SWITCH3, SWITCH4, SWITCH5 };
int switchState[5] = { HIGH, HIGH, HIGH, HIGH, HIGH };
// initial switchstate is high

int leds[5] = { LED1, LED2, LED3, LED4, LED5 };
int ledState[5] = { LOW, LOW, LOW, LOW, LOW };
// initial all leds out

int currentProgram = 0;
int offset = 0;


void setup()
{
// Set MIDI baud rate:
Serial.begin(9600);

// Setup Offset switch
pinMode(SWITCHoffset, INPUT ); //pin2 is input
digitalWrite(SWITCHoffset, HIGH ); //pullup geactiveerd


// Setup Switches and leds initial states, loop runs 5 times = amount 'SWITCHCOUNT'
for( int currentSwitch = 0; currentSwitch < SWITCHCOUNT; currentSwitch++ )
{
// SWITCH 1 t/m 5 configured as inputs and activation pullup
pinMode( switches[currentSwitch], INPUT );
digitalWrite( switches[currentSwitch], HIGH );

// LED 1 t/m 5 configured as outputs and initial put off.
pinMode( leds[currentSwitch], OUTPUT );
digitalWrite(leds[currentSwitch], ledState[currentSwitch]);
}
}



void loop() //first part, prog for offset switch.
{
int value = digitalRead(SWITCHoffset);
if (value == HIGH) {
offset = 0; //patches repetitie 0 t/m 5
}
else {
offset = 5; //patches live 6 t/m 10
}

// prog read switches, set led, send MIDI
for( int currentSwitch = 0; currentSwitch < SWITCHCOUNT; currentSwitch++ ) //loop runs 5 times
{
if(( digitalRead(switches[currentSwitch]) != switchState[currentSwitch]) && (switchState[currentSwitch] == HIGH))
{
switch( currentSwitch )
{
case 0:
currentProgram = 01;
//resetLeds , werkt niet als het onderaan staat, daarom maar vol uitgeschreven hieronder.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED1, HIGH);
Serial.println(0xC0); //send midi progchange code
Serial.println(01+offset); //send patch code, depending on switch offset
break;

case 1:
currentProgram = 02;
//resetLeds , werkt niet als het onderaan staat, daarom maar vol uitgeschreven hieronder.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED2, HIGH);
Serial.println(0xC0);
Serial.println(02+offset);
break;

case 2:
currentProgram = 03;
//resetLeds , werkt niet als het onderaan staat, daarom maar vol uitgeschreven hieronder.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED3, HIGH);
Serial.println(0xC0);
Serial.println(03+offset);
break;

case 3:
currentProgram = 04;
//resetLeds , werkt niet als het onderaan staat, daarom maar vol uitgeschreven hieronder.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED4, HIGH);
Serial.println(0xC0);
Serial.println(04+offset);
break;

case 4:
currentProgram = 05;
//resetLeds , werkt niet als het onderaan staat, daarom maar vol uitgeschreven hieronder.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED5, HIGH);
Serial.println(0xC0);
Serial.println(05+offset);
break;
}
delay( BOUNCEDELAY );
}
switchState[currentSwitch] = digitalRead( switches[currentSwitch] );
}
}

//resetLeds (mag blijkbaar niet hier staan, weet niet waarom?)
// digitalWrite(LED1, LOW);
// digitalWrite(LED2, LOW);
// digitalWrite(LED3, LOW);
// digitalWrite(LED4, LOW);
// digitalWrite(LED5, LOW);

peter_heijnen
2 januari 2014, 15:15
Nou Peter, daar ben ik nu net mee bezig.
Maar ik vind de schakelaars van bestaande modellen te dicht bij elkaar staan, daarom kies ik voor zelfbouw met een arduino microprocessor printje.
Ik hoef ook geen up/down en display, maar misschien is een Z9 van engl beter geschikt voor jou.

Ik heb die van mij bijna klaar(foto's volgen zsm) maar heb nog wat programma bugs.
Alles werkt nu met leds en al, behalve schakelaar1 geeft bij loslaten ook een midicode af.
Zal de scoop er eens opzetten en kijken hoe of wat.

En het is niet handig dat ik het subprogje 'resetleds' 5x moet uitschrijven en niet onderaan mag zetten.
Hopelijk kan Marc me hiermee helpen waarom niet.
Tevens een extra schakelaar erin gezet welke voor een offset zorgt.
Ik heb keuze uit patch 0 t/m 5 of 6 t/m 10 van de Blackstar amp.
Haha, wat je nu beschrijft kan ik al niet meer volgen, maar zo'n eenvoudig opzetje is dus al ingewikkeld genoeg om bugs te hebben. Weet ik dat iig al.

Ik ben niet op zoek naar bestaande controlers, ik wil echt iets kleins en minimaals dat ik zelf kan -laten- bouwen. Ik wil het integreren in een echt klein pedalboard. De knoppen komen bijv dichter op elkaar dan alle bestaande modellen die jijzelf al te klein vindt. Verder heb ik zelfs leds niet nodig. Ik heb al zitten overwegen om mijn oude rocktron midimate als donor te gebruiken en te verknippen, maar denk nu dat het beter is dat maar niet te doen. ;)

Ik zal dit topic zeker blijven volgen maar zo te zien ga ik het maken van de controler beter uitbesteden, thx iig voor de uitleg so far!

Edit: Lol, ik was na het lezen van het hele topic incl de voor mij ellenlange lijsten met commands en vele andere regels helemaal in de veronderstelling dat je een min of meer gecompliceerde controler ging maken, maar na het herlezen van de openingspost blijk je eigenlijk precies hetzelfde als ik te willen, net zo simpel maar dan groter. :)

En achteraf gezien blijkbaar heel wat minder simpel dan aanvankelijk gedacht. ;)

nak
2 januari 2014, 15:59
Inderdaad zoek ik ook een simpel iets, maar het topic is meer en meer naar het software verschoven.
Je hebt met zowel hardware als software te maken. De hardware valt reuze mee, heb wat aluminmumimum van de bouwmarkt gehaald en met een buiger twee op elkaar passende gebogen delen gemaakt en schakelaars erop gemaakt en een 15 polig plug, welke naar een kassie gaat met de arduino. Vandaar gaat een midikabel naar mijn Blackstar amp.
de arduino had eigenlijk ook wel in de footswitch gepast.
software is ietsie anders zoals te lezen in het topic. Gelukkig heb ik veel aan hulp van Marc, dus veel wijsheid onder GN leden. Zo kunnen we elkaar wat helpen.

Maar je Roctron verknippen vind ik nog niet zo'n slecht idee maar ik weet niet hoe groot de print is die er binnenin zit, die bepaald de grootte grotendeels.
Display en bepaalde knoppen kunnen wel losgekoppeld worden.
Persoonlijk verbaas ik me dat je de knoppen nog dichter bij elkaar wilt hebben, maar ja ieder het zijne.

http://www.mijnalbum.nl/Foto-ATPLZAP3-D.jpg

peter_heijnen
2 januari 2014, 18:08
Goed bezig!

Ik denk dat ik mijn midimate maar gewoon in originele staat houd, mss komt ie nog eens van pas. Het ding is zo'n 25 jaar oud en verkopen gaat denk ik ook niet meer lukken. :)

Ik herinnerde me btw nog een oud topic van bluegate over zijn custom midipedaal, ik heb die site toen bij mijn favorieten gezet, wist alleen niet meer op welke computer. Heb hem intussen weer gevonden en daar zag ik iets wat iig de juiste maat heeft:

http://buzzelectronics.co.uk/index.php?route=product/product&path=18_68&product_id=100

Het is weliswaar geen midipedaal maar wellicht dat die gast dat er zo in bouwt, daar ga ik morgen eens een mailtje aan wijden.

De reden dat ik alles zo dicht op elkaar wil, is dat mijn pedalenplankje achter in mijn combo moet, en dat is al zo'n klein combootje. Maar als het gaat lukken wat ik voor ogen heb, ben ik de koning te rijk.

Alhoewel, gitarist, dus voor zolang de gasloze periode duurt. :)

obiwanjacobi
2 januari 2014, 20:08
@nak: De programma code wordt simpelweg van boven naar beneden ginterpreteerd. De compiler vind eerst een aanroep naar resetLeds maar weet op dat moment nog niet wat je bedoelt. Dus als je de resetLeds functie BOVENAAN je code zet - vindt de compiler het waarschijnlijk veeeel leuker. ;-)

Ik vind dat je een mooi projectje hebt gemaakt, nak, heel niet gek. Die software bugs poets je ook nog wel weg.

Heel strikt genomen is het gebruik van een arduino wel overkill maar het is wel veel makkelijker om het hiermee te maken. Als je echt in productie zou willen, zou je op zoek gaan naar een MCU die precies doet wat je hier nodig hebt (handje vol IO pins en de serial hardware (hoewel software serial ook wel werkt omdat je Midi niet time-critical is.)

nak
3 januari 2014, 11:56
Zo de vlag kan uit.
Progje resetLeds werkte helaas niet bovenaan de code, dus maar weer voluit geschreven.
Leds bleven branden als ik een andere schakelaar indrukte.
Tevens serial.write gebruikt ipv serial.print.
Qua programmeren verdient het absoluut geen schoonheidsprijs maar ik kan het nu volgen. wel handig als ik na een paar jaar wat wil veranderen. Dan moet ik het wel weer kunnen snappen.
Blijkbaar heeft het probleem met de eerste schakelaar zich ook opgelost, maar dat deed zich ook alleen voor als ik de monitor gebruikte.
Op de scoop zag ik geen tweede code verschijnen bij loslaten van de knop.
In het begin waren de patches één plaats opgeschoven, klopt ook wel want Blackstarpatch 01 = programchange 00 en niet 01.
Programma ff aangepast en het loopt nu.
Volgende week ff live proberen met de repetities voordat ik ermee de buhne op ga.
Beeld is wel heel donker, en het lijkt wel een kerst verlichting, maar de patches zie je veranderen vanaf 2de led van links op de Blackstar.
2de led van links is de bank led en dan volgen 4 patchleds. De bank led veranderd van groen naar geel naar rood als ik de offset schakelaar omzet. dan heb ik patch 6 t/m 10.

http://www.youtube.com/watch?v=mHa_ZYKhY88

obiwanjacobi
3 januari 2014, 13:29
Gefeliciteerd! Ziet er erg goed uit! Mooie behuizing ook - lekker stevig.

Als je je resetLeds functie nog even post dan kunnen we er misschien nog achter komen wat daar het probleem is. Wat is precies de foutmelding die je krijgt als je de functie probeert aan te roepen / het programma compileert...?

nak
3 januari 2014, 14:24
Thnx Marc,
Hij compileert wel goed, geeft geen fout aan.
Maar de leds waarvan ik de schakelaar heb ingedrukt gaan niet meer uit, éénmaal ingedrukt blijven ze domweg aan.
Ik heb resetLeds voor het grote stuk programma '// prog read switches, set led, send MIDI' gezet, zie post bovenaan

peter_heijnen
3 januari 2014, 14:40
Mooi werk! Echter, ik had minimaal een filmpje verwacht waarin de presets worden geschakeld door een bovenmaatse schoenmaat! :)

Zelf heb ik contact gehad met buzz electronics. Zij gaan voor mij een 6 kanaals midipedaal maken in de behuizing van de 6 channel looper die ik hiervoor poste. Voor mij is dit soort diy werk een maat te groot.

Showband pm'de me ook nog met het aanbod van een rolls midi buddy voor heel weinig als donor pedaal, maar ik had inmiddels al voor de buzz gekozen.

muziekschuur
3 januari 2014, 14:59
Die gekleurde leds..... : THA BOMB..... op het podium weet je nu altijd waar je zit!! GOED!!

obiwanjacobi
3 januari 2014, 18:51
Zo declareer je de functie:


void resetLeds()
{
// SWITCHCOUNT is the same as 'LEDCOUNT'
for( int currentLed = 0; currentLed < SWITCHCOUNT; currentLed++ )
{
// turn all leds off
digitalWrite(leds[currentLed], LOW);
}
}


En zo roep je hem aan (voorbeeld van 2e switch):


case 01:
resetLeds(); // zet alle leds uit
digitalWrite(LED2, HIGH); // zet 1 led weer aan
break;

Dit zou moeten werken.

Je zou ook nog de switch eruit kunnen schrijven, maar als je het zo begrijpt, kan je het maar beter zo laten...

[2c]

tnijland
3 januari 2014, 21:09
Mijn complimenten! Ik had er een beetje en hard hoofd in of het je zou lukken maar ben nu toch bijzonder positief verrast ;-) Zo zie je maar weer eens wat een goede kerstvakantie kan opleveren ha ha


@Peter: Wat wil je met deze MIDI controller allemaal schakelen? Ik vind namelijk de Eventide H9 preset-cue switch (up/down) best handig werken.

peter_heijnen
4 januari 2014, 12:57
Hey Theo, de cue functie is zeker handig, en voor het meeste werk werkt het ook. Maar het werkt niet intuitief genoeg voor ingewikkeld werk.

Laatst heb ik met wat vrienden een middagje rush gespeeld en dan haal ik het gewoon niet met alleen de cue. Tijdens solo's zit je dan te bedenken welke kant de cue ook alweer op ging en als je dan de verkeerde kant opgaat, ben je de sjaak. En als de solo dan is afgelopen heb je die ten eerste echt helemaal verkloot en ben je ook nog eens niet op tijd met de nieuwe sound. Gelukkig was het wel heel gezellig. :)

De midi switcher gaat mij met zijn 6 switches 7 direct acces basissounds geven op de h9 (fx-bypass is uiteraard ook een basissound). Iedere basissound kan ik bewerken met het expressiepedaal. En met de cue functie kan ik zowel links als rechts van de 7 basis sounds nog wel wat andere kleurtjes oproepen indien nodig.

tnijland
5 januari 2014, 00:38
Inderdaad, zolang je niet teveel presets hebt werkt de cue knop best handig. Ik mis zelf inmiddels nog een beetje de combinatie delay + reverb wat een effect combinatie ik graag gebruik. Wel grappig dat je toch voor preset schakelend kiest terwijl veel mensen juist voor een effect on/off (pedalboard) functie kiezen...

peter_heijnen
5 januari 2014, 12:27
On/off kan natuurlijk alleen als je multi-fx patches hebt waarin je de verschillende effecten dan on/off kunt zetten, daar voorziet de h9 op enkele 'dubbele' algoritmes na zoals je weet helaas niet in.

Daarbij ga ik het nu precies zo doen als vroeger met de uitgebreide rackset wat altijd naar volle tevredenheid was tot ik het gesjouw ermee helemaal zat was zo'n 10 jaar geleden. Ik heb sindsdien eigenlijk 10 jaar gedwaald maar nu ga ik weer terug naar huis. Echter met minder dan een kwart aan gewicht en ik schat met minder dan een zesde aan volume. Jeej! :)

Trouwens, waarom koop je de delay/verb algoritme niet?

nak
5 januari 2014, 12:33
Zo declareer je de functie:





void resetLeds()
{
// SWITCHCOUNT is the same as 'LEDCOUNT'
for( int currentLed = 0; currentLed < SWITCHCOUNT; currentLed++ )
{
// turn all leds off
digitalWrite(leds[currentLed], LOW);
}
}
En zo roep je hem aan (voorbeeld van 2e switch):





case 01:
resetLeds(); // zet alle leds uit
digitalWrite(LED2, HIGH); // zet 1 led weer aan
break; Dit zou moeten werken.


Yep werkt zo.
Nog een bijkomend voordeel is dat de arduino sneller schakelt dan de fs10 footswitch van Blackstar.
Ben er heel blij mee nu.

tnijland
11 januari 2014, 22:32
On/off kan natuurlijk alleen als je multi-fx patches hebt waarin je de verschillende effecten dan on/off kunt zetten, daar voorziet de h9 op enkele 'dubbele' algoritmes na zoals je weet helaas niet in.

Daarbij ga ik het nu precies zo doen als vroeger met de uitgebreide rackset wat altijd naar volle tevredenheid was tot ik het gesjouw ermee helemaal zat was zo'n 10 jaar geleden. Ik heb sindsdien eigenlijk 10 jaar gedwaald maar nu ga ik weer terug naar huis. Echter met minder dan een kwart aan gewicht en ik schat met minder dan een zesde aan volume. Jeej! :)

Trouwens, waarom koop je de delay/verb algoritme niet?

Ik heb al wel de spring reverb gekocht maar ga deze zeker op mijn lijstje zetten. Bedankt voor de tip!

chrisduzz
28 februari 2014, 11:12
Hoi hoi , ik ben ook al een tijd opzoek geweest naar een schema en zo voor het zelfde onderwerp , ik heb nu iets gevonden waar ik al een tijd naar zocht , Ik wil je eventueel wel een geprogrameerde pic met schema toe sturen tegen kost prijs .
op www.cdp-guitar zie je wat ik oa maak ,,
Ik hoor wel of ik iets kan betekenen ,
Chris

paulusdeBKB
28 februari 2014, 14:53
Wat ontzettend stoer dat je dit aan de praat hebt gekregen. Jij hebt grotemensen-skills!