Ik heb dan maar even wat geknutseld om een digitale potmeter te maken met een Arduino Nano, waarmee ik in 6 stappen het volume op 100-90-80-70-60 en 0% kan zetten.
Voor de hobbyist die het ook wil maken: De +5V en GND voor de voeding komt als max/min van de potmeter uit de Gino Midi board en een van de PWM analoge uitgangen van de Arduino gaat via een RC filter (100ohm 100uF) als "loper" van de potmeter naar de Midi controller terug.
2022-12-28 11.48.37 resized.jpg
2022-12-28 11.48.49 resized.jpg
Hierbij de code.
/*
Volumeschakelaar met analoge output als simulatie van potmeter in Midi controller orgel
Voeding vanuit +5V en GND van Gino BIG midi controller.
*/
//===============================================================
// Global Variables & Constants
//===============================================================
// LEDs zijn HIGH als UIT pull-down met anode aan +, idem up-dn button.
const byte ledPin[] = {2,3,4,5,7};
const int Buttonup = 8; // Active Low, held high by 4.7K
const int Buttondn = 9; // Active Low, held high by 4.7K
const int VolumePin = 6; // Volume van 0-5V
//Logische waarde van de inputs:
int Buttonupstate;
int Buttondnstate;
int upstateold;
int dnstateold;
int Ledindex = 0;
//===============================================================
// SETUP
//===============================================================
void setup () {
//all LED pins as outputs
for (int x=0; x<=4; x++) {pinMode(ledPin[x], OUTPUT);}
pinMode(Buttonup, INPUT);
pinMode(Buttondn, INPUT);
pinMode(VolumePin, OUTPUT);
// Startsituatie ledPinzero 100% aan en output op 5V.
digitalWrite(ledPin[0], LOW);
for (int x=1; x<=4; x++) {digitalWrite(ledPin[x], HIGH);}
analogWrite(VolumePin, 255);
}
//===============================================================
// Main Loop
//===============================================================
void loop() {
//Beginnen met de button states in te lezen
Buttonupstate = digitalRead(Buttonup);
Buttondnstate = digitalRead(Buttondn);
//eerst kijken of beide knoppen tegelijk worden ingedrukt, dan moeten alle LED's uit en output op 0V, als referentie
if (Buttondnstate == LOW && Buttonupstate == LOW)
{
for (int x=0; x<=4; x++){digitalWrite(ledPin[x], HIGH);
Ledindex = 5;}
}
else {
if (Buttondnstate != dnstateold && Buttondnstate == LOW && Ledindex<4)
{
Ledindex = Ledindex+1;
for (int x=0; x<=3; x++) {digitalWrite(ledPin[x], HIGH);}
digitalWrite(ledPin[Ledindex], LOW);
}
if (Buttonupstate != upstateold && Buttonupstate == LOW && Ledindex>0)
{
Ledindex = Ledindex-1;
for (int x=0; x<=4; x++){digitalWrite(ledPin[x], HIGH);}
digitalWrite(ledPin[Ledindex], LOW);
}}
switch (Ledindex)
{
case 0:
analogWrite(VolumePin, 245);
break;
case 1:
analogWrite(VolumePin, 220);
break;
case 2:
analogWrite(VolumePin, 197);
break;
case 3:
analogWrite(VolumePin, 172);
break;
case 4:
analogWrite(VolumePin, 147);
break;
case 5:
analogWrite(VolumePin, 0);
}
upstateold = Buttonupstate;
dnstateold = Buttondnstate;
delay(100);
}