Hi,
i know that is much, thats because i didn't post it.. but here it is.. would be really nice if someone could take a look..
the code is following.
sketch
#include <Bounce.h>
#include <cfg.h>
#include <light.h>
#include <btnTrackSelect.h>
#include <faderTrackVolume.h>
cfg cfg;
light light(cfg.ledMuxPin1, cfg.ledMuxPin2, cfg.ledMuxPin3, cfg.muxRedPin, cfg.muxGreenPin, cfg.muxBluePin);
btnTrackSelect btnTrackSelect[16];
faderTrackVolume faderTrackVolume[16];
Bounce btnShift = Bounce(cfg.btnShiftPin, 10); // 10 ms debounce
// ################## SETUP
void setup() {
// 4051
pinMode(cfg.muxPin1, OUTPUT);
pinMode(cfg.muxPin2, OUTPUT);
pinMode(cfg.muxPin3, OUTPUT);
// btnTrackSelect
pinMode(cfg.btnTrackSelectPin, INPUT);
// faderTrackVolume
pinMode(cfg.faderTrackVolumePin, INPUT);
// SHIFT
pinMode(cfg.btnShiftPin, INPUT_PULLUP);
}
// ################## MAIN LOOP
void loop() {
if(cfg.modus != cfg.modusNext) {
Serial.println("MODUS CHANGED: "); Serial.print(cfg.modus);
cfg.modus = cfg.modusNext;
}
if (cfg.modus == "EDIT") {
readMenuEncoders();
}
for (int i = 0; i <= 7; i++) {
// count through MUX
cfg.MuxBit1 = bitRead(i,0);
cfg.MuxBit2 = bitRead(i,1);
cfg.MuxBit3 = bitRead(i,2);
digitalWrite(cfg.muxPin1, cfg.MuxBit1);
digitalWrite(cfg.muxPin2, cfg.MuxBit2);
digitalWrite(cfg.muxPin3, cfg.MuxBit3);
pollShift();
pollMuxDigital(i, "btnTrackSelect", cfg.btnTrackSelectPin);
//pollMuxAnalog(i, "faderTrackVolume", cfg.faderTrackVolumePin);
}
}
/*
* Polls Shift-Button and sets Status-Var
*/
void pollShift() {
if (btnShift.update()) {
if (btnShift.fallingEdge()) {
cfg.shiftStatus = false;
} else {
cfg.shiftStatus = true;
}
}
}
/*
* Polls 4051 with digital Input-Sources
*/
void pollMuxDigital(int i, String element, int digitalPin) {
btnTrackSelect[i].btnStatus = digitalRead(digitalPin);
if(btnTrackSelect[i].btnStatus == HIGH && btnTrackSelect[i].btnStatusOld != btnTrackSelect[i].btnStatus) {
if(btnTrackSelect[i]._state == 0) {
Serial.print(i); Serial.print(" - PRESSED .. "); Serial.println();
if(cfg.shiftStatus == true) {
// EDIT
edit(i, element);
} else {
// SEND MIDI
btnTrackSelect[i].setBtnState(1);
}
} else if(btnTrackSelect[i]._state == 1) {
Serial.print(i); Serial.print(" - PRESSED AGAIN.. "); Serial.println();
if(cfg.shiftStatus == true) {
// EDIT
edit(i, element);
} else {
// SEND MIDI
btnTrackSelect[i].setBtnState(0);
}
}
light.switchMux(i);
light.setColor(btnTrackSelect[i]._rgb[0],btnTrackSelect[i]._rgb[1],btnTrackSelect[i]._rgb[2]);
}
btnTrackSelect[i].btnStatusOld = btnTrackSelect[i].btnStatus;
if(btnTrackSelect[i].btnStatusOld == HIGH && btnTrackSelect[i].btnStatus == LOW) {
Serial.print(i);
Serial.print(" - UN - statusOld : "); Serial.print(btnTrackSelect[i].btnStatusOld);
Serial.println();
}
}
light.h
#ifndef light_h
#define light_h
#include "Arduino.h"
class light {
public:
light(int ledMuxPin1,
int ledMuxPin2,
int ledMuxPin3,
int _muxRedPin,
int _muxGreenPin,
int _muxBluePin,
int _ledResetPin);
void setColor(int red, int green, int blue);
void resetAll();
int _ledMuxPin1;
int _ledMuxPin2;
int _ledMuxPin3;
int _muxRedPin;
int _muxGreenPin;
int _muxBluePin;
int _muxBit1;
int _muxBit2;
int _muxBit3;
void switchMux(int i);
// COLORS
int colors[6][3] = {
{255,255,255},
{255,0,128},
{0,255,0},
{0,0,255},
{255,60,0},
{255,0,128}
};
int orange[3] = {255,60,0};
int lila[3] = {255,0,128};
int red[3] = {255,0,128};
int green[3] = {0,255,0};
int blue[3] = {0,0,255};
int white[3] = {255,255,255};
private:
};
#endif
light.cpp
#include "Arduino.h"
#include "light.h"
light::light(int ledMuxPin1, int ledMuxPin2, int ledMuxPin3, int muxRedPin, int muxGreenPin, int muxBluePin) {
// INITIALIZE MUX-CONTROL
_ledMuxPin1 = ledMuxPin1;
_ledMuxPin2 = ledMuxPin2;
_ledMuxPin3 = ledMuxPin3;
pinMode(_ledMuxPin1, OUTPUT);
pinMode(_ledMuxPin2, OUTPUT);
pinMode(_ledMuxPin3, OUTPUT);
// INITIALIZE MUX COLOR-CONTROL
_muxRedPin = muxRedPin;
_muxGreenPin = muxGreenPin;
_muxBluePin = muxBluePin;
pinMode(_muxRedPin, OUTPUT);
pinMode(_muxGreenPin, OUTPUT);
pinMode(_muxBluePin, OUTPUT);
}
void light::setColor(int red, int green, int blue) {
#ifdef COMMON_ANODE
red = 255 - red;
green = 255 - green;
blue = 255 - blue;
#endif
analogWrite(_muxRedPin, red);
analogWrite(_muxGreenPin, green);
analogWrite(_muxBluePin, blue);
}
void light::switchMux(int i) {
_muxBit1 = bitRead(i,0);
_muxBit2 = bitRead(i,1);
_muxBit3 = bitRead(i,2);
digitalWrite(_ledMuxPin1, _muxBit1);
digitalWrite(_ledMuxPin2, _muxBit2);
digitalWrite(_ledMuxPin3, _muxBit3);
}
there is also the cfg.h in which all the pins are defined and the class for btnTrackSelect.. i don't know if i should post it, too.. just tell me if.. it is really much 
EDIT: I made a little mistale in the shematic.. the data-pin of the HC259 is not connected to the DIGITAL 11 PIN .. it is connected to the A0 analog-pin
.. I also had to remove some (i hope non-relevant) code, because forum said only 9000 chars allowed.