Xover_relays.cpp library

Source code of Xover_relays library (~/libraries/Xover_relays/Xover_relays.cpp)


/*



Xover44 realys controller by Sirio Maccolini 2018



*/


#include <Wire.h>

#include "Adafruit_MCP23017.h"

#include "dondo_MCP23017.h"

#include "Xover_relays.h"



//Board1 2 ways - channel B - baddr1 = 0 (0x20) - function filter1() - Left

//Board2 2 ways - channel B - baddr2 = 1 (0x21) - function filter1() - Right

//Board3 3 ways - channel B - baddr3 = 2 (0x22) - function filter1() - Left

//Board4 3 ways - channel B - baddr4 = 3 (0x23) - function filter1() - Right

//Board5 4 ways - channel B - baddr5 = 4 (0x24) - function filter1() - Left

//Board6 4 ways - channel B - baddr6 = 5 (0x25) - function filter1() - Right


//Board7 selector - channel A - addr1 = 0 (0x20) - function selector1() - Left+Right

//Board8 selector - channel A - addr2 = 1 (0x21) - function selector2() - Right **********now not used

//Board9 Volumes - channel A - addr3 = 2 (0x22) - function volumes1() - Left+Right

//Board10 Volumes - channel A - addr4 = 3 (0x23) - function volumes2() - Left+Right

//Board11 Volumes - channel A - addr5 = 2 (0x24) - function volumes1() - Left+Right

//Board12 Volumes - channel A - addr6 = 3 (0x25) - function volumes2() - Left+Right


uint8_t baddr1 = 0;//freq0-L

uint8_t baddr2 = 1;//freq1-L

uint8_t baddr3 = 2;//freq2-L

uint8_t baddr4 = 4;//freq0-R

uint8_t baddr5 = 5;//freq1-R

uint8_t baddr6 = 6;//freq2-R


uint8_t addr1 = 0;//selector-1

uint8_t addr2 = 1;//selector-2

uint8_t addr3 = 2;//vol-1

uint8_t addr4 = 4;//vol-2

uint8_t addr5 = 2;//vol-1

uint8_t addr6 = 4;//vol-2


//pre setup

Adafruit_MCP23017 mcp8;

Adafruit_MCP23017 mcp9;

Adafruit_MCP23017 mcp10;

Adafruit_MCP23017 mcp11;

Adafruit_MCP23017 mcp12;

Adafruit_MCP23017 mcp13;


dondo_MCP23017 mcp;

dondo_MCP23017 mcp1;

dondo_MCP23017 mcp2;

dondo_MCP23017 mcp3;

dondo_MCP23017 mcp4;

dondo_MCP23017 mcp5;


Xover_relays Xover_rel = Xover_relays();


void Xover_relays::setup(){


//------mcp23017 setup------------//


mcp.begin(baddr1);

mcp.pinMode(0, OUTPUT);

mcp.pinMode(1, OUTPUT);

mcp.pinMode(2, OUTPUT);

mcp.pinMode(3, OUTPUT);

mcp.pinMode(4, OUTPUT);

mcp.pinMode(5, OUTPUT);

mcp.pinMode(6, OUTPUT);

mcp.pinMode(7, OUTPUT);

mcp.pinMode(8, OUTPUT);

mcp.pinMode(9, OUTPUT);

mcp.pinMode(10, OUTPUT);

mcp.pinMode(11, OUTPUT);

mcp.pinMode(12, OUTPUT);

mcp.pinMode(13, OUTPUT);

mcp.pinMode(14, OUTPUT);

mcp.pinMode(15, OUTPUT);


mcp1.begin(baddr2);

mcp1.pinMode(0, OUTPUT);

mcp1.pinMode(1, OUTPUT);

mcp1.pinMode(2, OUTPUT);

mcp1.pinMode(3, OUTPUT);//non collegato

mcp1.pinMode(4, OUTPUT);

mcp1.pinMode(5, OUTPUT);

mcp1.pinMode(6, OUTPUT);

mcp1.pinMode(7, OUTPUT);

mcp1.pinMode(8, OUTPUT);

mcp1.pinMode(9, OUTPUT);

mcp1.pinMode(10, OUTPUT);

mcp1.pinMode(11, OUTPUT);//non collegato

mcp1.pinMode(12, OUTPUT);

mcp1.pinMode(13, OUTPUT);

mcp1.pinMode(14, OUTPUT);

mcp1.pinMode(15, OUTPUT);


mcp2.begin(baddr3);

mcp2.pinMode(0, OUTPUT);

mcp2.pinMode(1, OUTPUT);

mcp2.pinMode(2, OUTPUT);

mcp2.pinMode(3, OUTPUT);//non collegato

mcp2.pinMode(4, OUTPUT);//non collegato

mcp2.pinMode(5, OUTPUT);

mcp2.pinMode(6, OUTPUT);

mcp2.pinMode(7, OUTPUT);

mcp2.pinMode(8, OUTPUT);

mcp2.pinMode(9, OUTPUT);

mcp2.pinMode(10, OUTPUT);

mcp2.pinMode(11, OUTPUT);//non collegato

mcp2.pinMode(12, OUTPUT);//non collegato

mcp2.pinMode(13, OUTPUT);

mcp2.pinMode(14, OUTPUT);

mcp2.pinMode(15, OUTPUT);


mcp3.begin(baddr4);

mcp3.pinMode(0, OUTPUT);

mcp3.pinMode(1, OUTPUT);

mcp3.pinMode(2, OUTPUT);

mcp3.pinMode(3, OUTPUT);

mcp3.pinMode(4, OUTPUT);

mcp3.pinMode(5, OUTPUT);

mcp3.pinMode(6, OUTPUT);

mcp3.pinMode(7, OUTPUT);

mcp3.pinMode(8, OUTPUT);

mcp3.pinMode(9, OUTPUT);

mcp3.pinMode(10, OUTPUT);

mcp3.pinMode(11, OUTPUT);

mcp3.pinMode(12, OUTPUT);

mcp3.pinMode(13, OUTPUT);

mcp3.pinMode(14, OUTPUT);

mcp3.pinMode(15, OUTPUT);


mcp4.begin(baddr5);

mcp4.pinMode(0, OUTPUT);

mcp4.pinMode(1, OUTPUT);

mcp4.pinMode(2, OUTPUT);

mcp4.pinMode(3, OUTPUT);

mcp4.pinMode(4, OUTPUT);

mcp4.pinMode(5, OUTPUT);

mcp4.pinMode(6, OUTPUT);

mcp4.pinMode(7, OUTPUT);

mcp4.pinMode(8, OUTPUT);

mcp4.pinMode(9, OUTPUT);

mcp4.pinMode(10, OUTPUT);

mcp4.pinMode(11, OUTPUT);

mcp4.pinMode(12, OUTPUT);

mcp4.pinMode(13, OUTPUT);

mcp4.pinMode(14, OUTPUT);

mcp4.pinMode(15, OUTPUT);


mcp5.begin(baddr6);

mcp5.pinMode(0, OUTPUT);

mcp5.pinMode(1, OUTPUT);

mcp5.pinMode(2, OUTPUT);

mcp5.pinMode(3, OUTPUT);

mcp5.pinMode(4, OUTPUT);

mcp5.pinMode(5, OUTPUT);

mcp5.pinMode(6, OUTPUT);

mcp5.pinMode(7, OUTPUT);

mcp5.pinMode(8, OUTPUT);

mcp5.pinMode(9, OUTPUT);

mcp5.pinMode(10, OUTPUT);

mcp5.pinMode(11, OUTPUT);

mcp5.pinMode(12, OUTPUT);

mcp5.pinMode(13, OUTPUT);

mcp5.pinMode(14, OUTPUT);

mcp5.pinMode(15, OUTPUT);



mcp8.begin(addr1); //sel1

mcp8.pinMode(0, OUTPUT);

mcp8.pinMode(1, OUTPUT);

mcp8.pinMode(2, OUTPUT);

mcp8.pinMode(3, OUTPUT);

mcp8.pinMode(4, OUTPUT);

mcp8.pinMode(5, OUTPUT);

mcp8.pinMode(6, OUTPUT);

mcp8.pinMode(7, OUTPUT);

mcp8.pinMode(8, OUTPUT);

mcp8.pinMode(9, OUTPUT);

mcp8.pinMode(10, OUTPUT);

mcp8.pinMode(11, OUTPUT);

mcp8.pinMode(12, OUTPUT);

mcp8.pinMode(13, OUTPUT);

mcp8.pinMode(14, OUTPUT);

mcp8.pinMode(15, OUTPUT);


mcp9.begin(addr2); //sel2

mcp9.pinMode(0, OUTPUT);

mcp9.pinMode(1, OUTPUT);

mcp9.pinMode(2, OUTPUT);

mcp9.pinMode(3, OUTPUT);

mcp9.pinMode(4, OUTPUT);

mcp9.pinMode(5, OUTPUT);

mcp9.pinMode(6, OUTPUT);

mcp9.pinMode(7, OUTPUT);

mcp9.pinMode(8, OUTPUT);

mcp9.pinMode(9, OUTPUT);

mcp9.pinMode(10, OUTPUT);

mcp9.pinMode(11, OUTPUT);

mcp9.pinMode(12, OUTPUT);

mcp9.pinMode(13, OUTPUT);

mcp9.pinMode(14, OUTPUT);

mcp9.pinMode(15, OUTPUT);


mcp10.begin(addr3); //vol1

mcp10.pinMode(0, OUTPUT);

mcp10.pinMode(1, OUTPUT);

mcp10.pinMode(2, OUTPUT);

mcp10.pinMode(3, OUTPUT);

mcp10.pinMode(4, OUTPUT);

mcp10.pinMode(5, OUTPUT);

mcp10.pinMode(6, OUTPUT);

mcp10.pinMode(7, OUTPUT);

mcp10.pinMode(8, OUTPUT);

mcp10.pinMode(9, OUTPUT);

mcp10.pinMode(10, OUTPUT);

mcp10.pinMode(11, OUTPUT);

mcp10.pinMode(12, OUTPUT);

mcp10.pinMode(13, OUTPUT);

mcp10.pinMode(14, OUTPUT);

mcp10.pinMode(15, OUTPUT);


mcp11.begin(addr4); //vol2

mcp11.pinMode(0, OUTPUT);

mcp11.pinMode(1, OUTPUT);

mcp11.pinMode(2, OUTPUT);

mcp11.pinMode(3, OUTPUT);

mcp11.pinMode(4, OUTPUT);

mcp11.pinMode(5, OUTPUT);

mcp11.pinMode(6, OUTPUT);

mcp11.pinMode(7, OUTPUT);

mcp11.pinMode(8, OUTPUT);

mcp11.pinMode(9, OUTPUT);

mcp11.pinMode(10, OUTPUT);

mcp11.pinMode(11, OUTPUT);

mcp11.pinMode(12, OUTPUT);

mcp11.pinMode(13, OUTPUT);

mcp11.pinMode(14, OUTPUT);

mcp11.pinMode(15, OUTPUT);


mcp12.begin(addr5); //vol3

mcp12.pinMode(0, OUTPUT);

mcp12.pinMode(1, OUTPUT);

mcp12.pinMode(2, OUTPUT);

mcp12.pinMode(3, OUTPUT);

mcp12.pinMode(4, OUTPUT);

mcp12.pinMode(5, OUTPUT);

mcp12.pinMode(6, OUTPUT);

mcp12.pinMode(7, OUTPUT);

mcp12.pinMode(8, OUTPUT);

mcp12.pinMode(9, OUTPUT);

mcp12.pinMode(10, OUTPUT);

mcp12.pinMode(11, OUTPUT);

mcp12.pinMode(12, OUTPUT);

mcp12.pinMode(13, OUTPUT);

mcp12.pinMode(14, OUTPUT);

mcp12.pinMode(15, OUTPUT);


mcp13.begin(addr6); //vol4

mcp13.pinMode(0, OUTPUT);

mcp13.pinMode(1, OUTPUT);

mcp13.pinMode(2, OUTPUT);

mcp13.pinMode(3, OUTPUT);

mcp13.pinMode(4, OUTPUT);

mcp13.pinMode(5, OUTPUT);

mcp13.pinMode(6, OUTPUT);

mcp13.pinMode(7, OUTPUT);

mcp13.pinMode(8, OUTPUT);

mcp13.pinMode(9, OUTPUT);

mcp13.pinMode(10, OUTPUT);

mcp13.pinMode(11, OUTPUT);

mcp13.pinMode(12, OUTPUT);

mcp13.pinMode(13, OUTPUT);

mcp13.pinMode(14, OUTPUT);

mcp13.pinMode(15, OUTPUT);


}


void Xover_relays::filter1(int pos, int freq, int reso, int order, int delayr){


_pos=pos;

_freq=freq;

_reso=reso;

_order=order;

_delayr=delayr;



if(pos==14 or pos==20 or pos ==26){

if((freq % 2) > 0) { mcp.digitalWrite(3, HIGH); mcp.digitalWrite(11, LOW);} else { mcp.digitalWrite(3, LOW); mcp.digitalWrite(11, HIGH);}

if((freq % 4) > 1) { mcp.digitalWrite(4, HIGH); mcp.digitalWrite(12, LOW);} else { mcp.digitalWrite(4, LOW); mcp.digitalWrite(12, HIGH);}

if((freq % 8) > 3) { mcp.digitalWrite(5, HIGH); mcp.digitalWrite(13, LOW);} else { mcp.digitalWrite(5, LOW); mcp.digitalWrite(13, HIGH);}

if((freq % 16) > 7) { mcp.digitalWrite(6, HIGH); mcp.digitalWrite(14, LOW);} else { mcp.digitalWrite(6, LOW); mcp.digitalWrite(14, HIGH);}

if((freq % 32) > 15) { mcp.digitalWrite(7, HIGH); mcp.digitalWrite(15, LOW);} else { mcp.digitalWrite(7, LOW); mcp.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp.digitalWrite(1, HIGH); mcp.digitalWrite(9, LOW);} else { mcp.digitalWrite(1, LOW); mcp.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp.digitalWrite(2, HIGH); mcp.digitalWrite(10, LOW);} else { mcp.digitalWrite(2, LOW); mcp.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp.digitalWrite(0, HIGH); mcp.digitalWrite(8, LOW);} else { mcp.digitalWrite(0, LOW); mcp.digitalWrite(8, HIGH);}


delay(delayr);


mcp.digitalWrite(3, LOW);

mcp.digitalWrite(4, LOW);

mcp.digitalWrite(5, LOW);

mcp.digitalWrite(6, LOW);

mcp.digitalWrite(7, LOW);

mcp.digitalWrite(2, LOW);

mcp.digitalWrite(1, LOW);

mcp.digitalWrite(0, LOW);

mcp.digitalWrite(11, LOW);

mcp.digitalWrite(12, LOW);

mcp.digitalWrite(13, LOW);

mcp.digitalWrite(14, LOW);

mcp.digitalWrite(15, LOW);

mcp.digitalWrite(9, LOW);

mcp.digitalWrite(10, LOW);

mcp.digitalWrite(8, LOW);





}



if(pos==15 or pos==21 or pos ==27){

if((freq % 2) > 0) { mcp1.digitalWrite(4, HIGH); mcp1.digitalWrite(12, LOW);} else { mcp1.digitalWrite(4, LOW); mcp1.digitalWrite(12, HIGH);}

if((freq % 4) > 1) { mcp1.digitalWrite(5, HIGH); mcp1.digitalWrite(13, LOW);} else { mcp1.digitalWrite(5, LOW); mcp1.digitalWrite(13, HIGH);}

if((freq % 8) > 3) { mcp1.digitalWrite(6, HIGH); mcp1.digitalWrite(14, LOW);} else { mcp1.digitalWrite(6, LOW); mcp1.digitalWrite(14, HIGH);}

if((freq % 16) > 7) { mcp1.digitalWrite(7, HIGH); mcp1.digitalWrite(15, LOW);} else { mcp1.digitalWrite(7, LOW); mcp1.digitalWrite(15, HIGH);}

//if((freq % 32) > 15) { mcp1.digitalWrite(7, HIGH); mcp1.digitalWrite(15, LOW);} else { mcp1.digitalWrite(7, LOW); mcp1.digitalWrite(15, HIGH);} //non collegato

if((reso % 2) > 0) { mcp1.digitalWrite(1, HIGH); mcp1.digitalWrite(9, LOW);} else { mcp1.digitalWrite(1, LOW); mcp1.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp1.digitalWrite(2, HIGH); mcp1.digitalWrite(10, LOW);} else { mcp1.digitalWrite(2, LOW); mcp1.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp1.digitalWrite(0, HIGH); mcp1.digitalWrite(8, LOW);} else { mcp1.digitalWrite(0, LOW); mcp1.digitalWrite(8, HIGH);}


delay(delayr);


//mcp1.digitalWrite(3, LOW); //non collegato

mcp1.digitalWrite(4, LOW);

mcp1.digitalWrite(5, LOW);

mcp1.digitalWrite(6, LOW);

mcp1.digitalWrite(7, LOW);

mcp1.digitalWrite(2, LOW);

mcp1.digitalWrite(1, LOW);

mcp1.digitalWrite(0, LOW);

//mcp1.digitalWrite(11, LOW); //non collegato

mcp1.digitalWrite(12, LOW);

mcp1.digitalWrite(13, LOW);

mcp1.digitalWrite(14, LOW);

mcp1.digitalWrite(15, LOW);

mcp1.digitalWrite(9, LOW);

mcp1.digitalWrite(10, LOW);

mcp1.digitalWrite(8, LOW);


}


if(pos==16 or pos==22 or pos==28){

if((freq % 2) > 0) { mcp2.digitalWrite(5, HIGH); mcp2.digitalWrite(13, LOW);} else { mcp2.digitalWrite(5, LOW); mcp2.digitalWrite(13, HIGH);}

if((freq % 4) > 1) { mcp2.digitalWrite(6, HIGH); mcp2.digitalWrite(14, LOW);} else { mcp2.digitalWrite(6, LOW); mcp2.digitalWrite(14, HIGH);}

if((freq % 8) > 3) { mcp2.digitalWrite(7, HIGH); mcp2.digitalWrite(15, LOW);} else { mcp2.digitalWrite(7, LOW); mcp2.digitalWrite(15, HIGH);}

//if((freq % 16) > 7) { mcp2.digitalWrite(6, HIGH); mcp2.digitalWrite(14, LOW);} else { mcp2.digitalWrite(6, LOW); mcp2.digitalWrite(14, HIGH);}

//if((freq % 32) > 15) { mcp2.digitalWrite(7, HIGH); mcp2.digitalWrite(15, LOW);} else { mcp2.digitalWrite(7, LOW); mcp2.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp2.digitalWrite(1, HIGH); mcp2.digitalWrite(9, LOW);} else { mcp2.digitalWrite(1, LOW); mcp2.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp2.digitalWrite(2, HIGH); mcp2.digitalWrite(10, LOW);} else { mcp2.digitalWrite(2, LOW); mcp2.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp2.digitalWrite(0, HIGH); mcp2.digitalWrite(8, LOW);} else { mcp2.digitalWrite(0, LOW); mcp2.digitalWrite(8, HIGH);}


delay(delayr);


//mcp2.digitalWrite(3, LOW);

//mcp2.digitalWrite(4, LOW);

mcp2.digitalWrite(5, LOW);

mcp2.digitalWrite(6, LOW);

mcp2.digitalWrite(7, LOW);

mcp2.digitalWrite(2, LOW);

mcp2.digitalWrite(1, LOW);

mcp2.digitalWrite(0, LOW);

//mcp2.digitalWrite(11, LOW);

//mcp2.digitalWrite(12, LOW);

mcp2.digitalWrite(13, LOW);

mcp2.digitalWrite(14, LOW);

mcp2.digitalWrite(15, LOW);

mcp2.digitalWrite(9, LOW);

mcp2.digitalWrite(10, LOW);

mcp2.digitalWrite(8, LOW);


}









if(pos==17 or pos==23 or pos ==29){

if((freq % 2) > 0) { mcp3.digitalWrite(3, HIGH); mcp3.digitalWrite(11, LOW);} else { mcp3.digitalWrite(3, LOW); mcp3.digitalWrite(11, HIGH);}

if((freq % 4) > 1) { mcp3.digitalWrite(4, HIGH); mcp3.digitalWrite(12, LOW);} else { mcp3.digitalWrite(4, LOW); mcp3.digitalWrite(12, HIGH);}

if((freq % 8) > 3) { mcp3.digitalWrite(5, HIGH); mcp3.digitalWrite(13, LOW);} else { mcp3.digitalWrite(5, LOW); mcp3.digitalWrite(13, HIGH);}

if((freq % 16) > 7) { mcp3.digitalWrite(6, HIGH); mcp3.digitalWrite(14, LOW);} else { mcp3.digitalWrite(6, LOW); mcp3.digitalWrite(14, HIGH);}

if((freq % 32) > 15) { mcp3.digitalWrite(7, HIGH); mcp3.digitalWrite(15, LOW);} else { mcp3.digitalWrite(7, LOW); mcp3.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp3.digitalWrite(1, HIGH); mcp3.digitalWrite(9, LOW);} else { mcp3.digitalWrite(1, LOW); mcp3.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp3.digitalWrite(2, HIGH); mcp3.digitalWrite(10, LOW);} else { mcp3.digitalWrite(2, LOW); mcp3.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp3.digitalWrite(0, HIGH); mcp3.digitalWrite(8, LOW);} else { mcp3.digitalWrite(0, LOW); mcp3.digitalWrite(8, HIGH);}


delay(delayr);


mcp3.digitalWrite(3, LOW);

mcp3.digitalWrite(4, LOW);

mcp3.digitalWrite(5, LOW);

mcp3.digitalWrite(6, LOW);

mcp3.digitalWrite(7, LOW);

mcp3.digitalWrite(2, LOW);

mcp3.digitalWrite(1, LOW);

mcp3.digitalWrite(0, LOW);

mcp3.digitalWrite(11, LOW);

mcp3.digitalWrite(12, LOW);

mcp3.digitalWrite(13, LOW);

mcp3.digitalWrite(14, LOW);

mcp3.digitalWrite(15, LOW);

mcp3.digitalWrite(9, LOW);

mcp3.digitalWrite(10, LOW);

mcp3.digitalWrite(8, LOW);





}



if(pos==18 or pos==24 or pos ==30){

if((freq % 2) > 0) { mcp4.digitalWrite(4, HIGH); mcp4.digitalWrite(12, LOW);} else { mcp4.digitalWrite(4, LOW); mcp4.digitalWrite(12, HIGH);}

if((freq % 4) > 1) { mcp4.digitalWrite(5, HIGH); mcp4.digitalWrite(13, LOW);} else { mcp4.digitalWrite(5, LOW); mcp4.digitalWrite(13, HIGH);}

if((freq % 8) > 3) { mcp4.digitalWrite(6, HIGH); mcp4.digitalWrite(14, LOW);} else { mcp4.digitalWrite(6, LOW); mcp4.digitalWrite(14, HIGH);}

if((freq % 16) > 7) { mcp4.digitalWrite(7, HIGH); mcp4.digitalWrite(15, LOW);} else { mcp4.digitalWrite(7, LOW); mcp4.digitalWrite(15, HIGH);}

//if((freq % 32) > 15) { mcp4.digitalWrite(7, HIGH); mcp4.digitalWrite(15, LOW);} else { mcp4.digitalWrite(7, LOW); mcp4.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp4.digitalWrite(1, HIGH); mcp4.digitalWrite(9, LOW);} else { mcp4.digitalWrite(1, LOW); mcp4.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp4.digitalWrite(2, HIGH); mcp4.digitalWrite(10, LOW);} else { mcp4.digitalWrite(2, LOW); mcp4.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp4.digitalWrite(0, HIGH); mcp4.digitalWrite(8, LOW);} else { mcp4.digitalWrite(0, LOW); mcp4.digitalWrite(8, HIGH);}


delay(delayr);


//mcp4.digitalWrite(3, LOW);

mcp4.digitalWrite(4, LOW);

mcp4.digitalWrite(5, LOW);

mcp4.digitalWrite(6, LOW);

mcp4.digitalWrite(7, LOW);

mcp4.digitalWrite(2, LOW);

mcp4.digitalWrite(1, LOW);

mcp4.digitalWrite(0, LOW);

//mcp4.digitalWrite(11, LOW);

mcp4.digitalWrite(12, LOW);

mcp4.digitalWrite(13, LOW);

mcp4.digitalWrite(14, LOW);

mcp4.digitalWrite(15, LOW);

mcp4.digitalWrite(9, LOW);

mcp4.digitalWrite(10, LOW);

mcp4.digitalWrite(8, LOW);


}


if(pos==19 or pos==25 or pos ==31){

if((freq % 2) > 0) { mcp5.digitalWrite(5, HIGH); mcp5.digitalWrite(13, LOW);} else { mcp5.digitalWrite(5, LOW); mcp5.digitalWrite(13, HIGH);}

if((freq % 4) > 1) { mcp5.digitalWrite(6, HIGH); mcp5.digitalWrite(14, LOW);} else { mcp5.digitalWrite(6, LOW); mcp5.digitalWrite(14, HIGH);}

if((freq % 8) > 3) { mcp5.digitalWrite(7, HIGH); mcp5.digitalWrite(15, LOW);} else { mcp5.digitalWrite(7, LOW); mcp5.digitalWrite(15, HIGH);}

//if((freq % 16) > 7) { mcp5.digitalWrite(6, HIGH); mcp5.digitalWrite(14, LOW);} else { mcp5.digitalWrite(6, LOW); mcp5.digitalWrite(14, HIGH);}

//if((freq % 32) > 15) { mcp5.digitalWrite(7, HIGH); mcp5.digitalWrite(15, LOW);} else { mcp5.digitalWrite(7, LOW); mcp5.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp5.digitalWrite(1, HIGH); mcp5.digitalWrite(9, LOW);} else { mcp5.digitalWrite(1, LOW); mcp5.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp5.digitalWrite(2, HIGH); mcp5.digitalWrite(10, LOW);} else { mcp5.digitalWrite(2, LOW); mcp5.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp5.digitalWrite(0, HIGH); mcp5.digitalWrite(8, LOW);} else { mcp5.digitalWrite(0, LOW); mcp5.digitalWrite(8, HIGH);}


delay(delayr);


//mcp5.digitalWrite(3, LOW);

//mcp5.digitalWrite(4, LOW);

mcp5.digitalWrite(5, LOW);

mcp5.digitalWrite(6, LOW);

mcp5.digitalWrite(7, LOW);

mcp5.digitalWrite(2, LOW);

mcp5.digitalWrite(1, LOW);

mcp5.digitalWrite(0, LOW);

//mcp5.digitalWrite(11, LOW);

//mcp5.digitalWrite(12, LOW);

mcp5.digitalWrite(13, LOW);

mcp5.digitalWrite(14, LOW);

mcp5.digitalWrite(15, LOW);

mcp5.digitalWrite(9, LOW);

mcp5.digitalWrite(10, LOW);

mcp5.digitalWrite(8, LOW);


}


}




void Xover_relays::volCtrl0(int pos, int vol, int ways, int delayr){



_pos=pos;

_vol=vol;

_ways=ways;

_delayr=delayr;


if(pos==6 or pos==10){

if((vol % 2) > 0) { mcp10.digitalWrite(0, HIGH); mcp10.digitalWrite(8, LOW);} else { mcp10.digitalWrite(0, LOW); mcp10.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp10.digitalWrite(1, HIGH); mcp10.digitalWrite(9, LOW);} else { mcp10.digitalWrite(1, LOW); mcp10.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp10.digitalWrite(2, HIGH); mcp10.digitalWrite(10, LOW);} else { mcp10.digitalWrite(2, LOW); mcp10.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp10.digitalWrite(3, HIGH); mcp10.digitalWrite(11, LOW);} else { mcp10.digitalWrite(3, LOW); mcp10.digitalWrite(11, HIGH);}


delay(delayr);


mcp10.digitalWrite(0, LOW);

mcp10.digitalWrite(1, LOW);

mcp10.digitalWrite(2, LOW);

mcp10.digitalWrite(3, LOW);

mcp10.digitalWrite(8, LOW);

mcp10.digitalWrite(9, LOW);

mcp10.digitalWrite(10, LOW);

mcp10.digitalWrite(11, LOW);

}


if(pos==7 or pos==11){

if((vol % 2) > 0) { mcp10.digitalWrite(4, HIGH); mcp10.digitalWrite(12, LOW);} else { mcp10.digitalWrite(4, LOW); mcp10.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp10.digitalWrite(5, HIGH); mcp10.digitalWrite(13, LOW);} else { mcp10.digitalWrite(5, LOW); mcp10.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp10.digitalWrite(6, HIGH); mcp10.digitalWrite(14, LOW);} else { mcp10.digitalWrite(6, LOW); mcp10.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp10.digitalWrite(7, HIGH); mcp10.digitalWrite(15, LOW);} else { mcp10.digitalWrite(7, LOW); mcp10.digitalWrite(15, HIGH);}


delay(delayr);


mcp10.digitalWrite(4, LOW);

mcp10.digitalWrite(5, LOW);

mcp10.digitalWrite(6, LOW);

mcp10.digitalWrite(7, LOW);

mcp10.digitalWrite(12, LOW);

mcp10.digitalWrite(13, LOW);

mcp10.digitalWrite(14, LOW);

mcp10.digitalWrite(15, LOW);

}


if(pos==8 or pos==12){

if((vol % 2) > 0) { mcp11.digitalWrite(0, HIGH); mcp11.digitalWrite(8, LOW);} else { mcp11.digitalWrite(0, LOW); mcp11.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp11.digitalWrite(1, HIGH); mcp11.digitalWrite(9, LOW);} else { mcp11.digitalWrite(1, LOW); mcp11.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp11.digitalWrite(2, HIGH); mcp11.digitalWrite(10, LOW);} else { mcp11.digitalWrite(2, LOW); mcp11.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp11.digitalWrite(3, HIGH); mcp11.digitalWrite(11, LOW);} else { mcp11.digitalWrite(3, LOW); mcp11.digitalWrite(11, HIGH);}


delay(delayr);


mcp11.digitalWrite(0, LOW);

mcp11.digitalWrite(1, LOW);

mcp11.digitalWrite(2, LOW);

mcp11.digitalWrite(3, LOW);

mcp11.digitalWrite(8, LOW);

mcp11.digitalWrite(9, LOW);

mcp11.digitalWrite(10, LOW);

mcp11.digitalWrite(11, LOW);

}




if(pos==9 or pos==13){

if((vol % 2) > 0) { mcp11.digitalWrite(4, HIGH); mcp11.digitalWrite(12, LOW);} else { mcp11.digitalWrite(4, LOW); mcp11.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp11.digitalWrite(5, HIGH); mcp11.digitalWrite(13, LOW);} else { mcp11.digitalWrite(5, LOW); mcp11.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp11.digitalWrite(6, HIGH); mcp11.digitalWrite(14, LOW);} else { mcp11.digitalWrite(6, LOW); mcp11.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp11.digitalWrite(7, HIGH); mcp11.digitalWrite(15, LOW);} else { mcp11.digitalWrite(7, LOW); mcp11.digitalWrite(15, HIGH);}


delay(delayr);


mcp11.digitalWrite(4, LOW);

mcp11.digitalWrite(5, LOW);

mcp11.digitalWrite(6, LOW);

mcp11.digitalWrite(7, LOW);

mcp11.digitalWrite(12, LOW);

mcp11.digitalWrite(13, LOW);

mcp11.digitalWrite(14, LOW);

mcp11.digitalWrite(15, LOW);

}






}



void Xover_relays::filter0(int pos, int freq, int reso, int order, int delayr){


_pos=pos;

_freq=freq;

_reso=reso;

_order=order;

_delayr=delayr;



if(pos==14 or pos==20 or pos ==26 or pos==17 or pos==23 or pos ==29){

if((freq % 2) > 0) { mcp.digitalWrite(3, HIGH); mcp.digitalWrite(11, LOW);} else { mcp.digitalWrite(3, LOW); mcp.digitalWrite(11, HIGH);}

if((freq % 4) > 1) { mcp.digitalWrite(4, HIGH); mcp.digitalWrite(12, LOW);} else { mcp.digitalWrite(4, LOW); mcp.digitalWrite(12, HIGH);}

if((freq % 8) > 3) { mcp.digitalWrite(5, HIGH); mcp.digitalWrite(13, LOW);} else { mcp.digitalWrite(5, LOW); mcp.digitalWrite(13, HIGH);}

if((freq % 16) > 7) { mcp.digitalWrite(6, HIGH); mcp.digitalWrite(14, LOW);} else { mcp.digitalWrite(6, LOW); mcp.digitalWrite(14, HIGH);}

if((freq % 32) > 15) { mcp.digitalWrite(7, HIGH); mcp.digitalWrite(15, LOW);} else { mcp.digitalWrite(7, LOW); mcp.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp.digitalWrite(1, HIGH); mcp.digitalWrite(9, LOW);} else { mcp.digitalWrite(1, LOW); mcp.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp.digitalWrite(2, HIGH); mcp.digitalWrite(10, LOW);} else { mcp.digitalWrite(2, LOW); mcp.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp.digitalWrite(0, HIGH); mcp.digitalWrite(8, LOW);} else { mcp.digitalWrite(0, LOW); mcp.digitalWrite(8, HIGH);}


delay(delayr);


mcp.digitalWrite(3, LOW);

mcp.digitalWrite(4, LOW);

mcp.digitalWrite(5, LOW);

mcp.digitalWrite(6, LOW);

mcp.digitalWrite(7, LOW);

mcp.digitalWrite(2, LOW);

mcp.digitalWrite(1, LOW);

mcp.digitalWrite(0, LOW);

mcp.digitalWrite(11, LOW);

mcp.digitalWrite(12, LOW);

mcp.digitalWrite(13, LOW);

mcp.digitalWrite(14, LOW);

mcp.digitalWrite(15, LOW);

mcp.digitalWrite(9, LOW);

mcp.digitalWrite(10, LOW);

mcp.digitalWrite(8, LOW);


if((freq % 2) > 0) { mcp3.digitalWrite(3, HIGH); mcp3.digitalWrite(11, LOW);} else { mcp3.digitalWrite(3, LOW); mcp3.digitalWrite(11, HIGH);}

if((freq % 4) > 1) { mcp3.digitalWrite(4, HIGH); mcp3.digitalWrite(12, LOW);} else { mcp3.digitalWrite(4, LOW); mcp3.digitalWrite(12, HIGH);}

if((freq % 8) > 3) { mcp3.digitalWrite(5, HIGH); mcp3.digitalWrite(13, LOW);} else { mcp3.digitalWrite(5, LOW); mcp3.digitalWrite(13, HIGH);}

if((freq % 16) > 7) { mcp3.digitalWrite(6, HIGH); mcp3.digitalWrite(14, LOW);} else { mcp3.digitalWrite(6, LOW); mcp3.digitalWrite(14, HIGH);}

if((freq % 32) > 15) { mcp3.digitalWrite(7, HIGH); mcp3.digitalWrite(15, LOW);} else { mcp3.digitalWrite(7, LOW); mcp3.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp3.digitalWrite(1, HIGH); mcp3.digitalWrite(9, LOW);} else { mcp3.digitalWrite(1, LOW); mcp3.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp3.digitalWrite(2, HIGH); mcp3.digitalWrite(10, LOW);} else { mcp3.digitalWrite(2, LOW); mcp3.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp3.digitalWrite(0, HIGH); mcp3.digitalWrite(8, LOW);} else { mcp3.digitalWrite(0, LOW); mcp3.digitalWrite(8, HIGH);}


delay(delayr);


mcp3.digitalWrite(3, LOW);

mcp3.digitalWrite(4, LOW);

mcp3.digitalWrite(5, LOW);

mcp3.digitalWrite(6, LOW);

mcp3.digitalWrite(7, LOW);

mcp3.digitalWrite(2, LOW);

mcp3.digitalWrite(1, LOW);

mcp3.digitalWrite(0, LOW);

mcp3.digitalWrite(11, LOW);

mcp3.digitalWrite(12, LOW);

mcp3.digitalWrite(13, LOW);

mcp3.digitalWrite(14, LOW);

mcp3.digitalWrite(15, LOW);

mcp3.digitalWrite(9, LOW);

mcp3.digitalWrite(10, LOW);

mcp3.digitalWrite(8, LOW);


}



if(pos==15 or pos==21 or pos ==27 or pos==18 or pos==24 or pos ==30){

if((freq % 2) > 0) { mcp1.digitalWrite(4, HIGH); mcp1.digitalWrite(12, LOW);} else { mcp1.digitalWrite(4, LOW); mcp1.digitalWrite(12, HIGH);}

if((freq % 4) > 1) { mcp1.digitalWrite(5, HIGH); mcp1.digitalWrite(13, LOW);} else { mcp1.digitalWrite(5, LOW); mcp1.digitalWrite(13, HIGH);}

if((freq % 8) > 3) { mcp1.digitalWrite(6, HIGH); mcp1.digitalWrite(14, LOW);} else { mcp1.digitalWrite(6, LOW); mcp1.digitalWrite(14, HIGH);}

if((freq % 16) > 7) { mcp1.digitalWrite(7, HIGH); mcp1.digitalWrite(15, LOW);} else { mcp1.digitalWrite(7, LOW); mcp1.digitalWrite(15, HIGH);}

//if((freq % 32) > 15) { mcp1.digitalWrite(7, HIGH); mcp1.digitalWrite(15, LOW);} else { mcp1.digitalWrite(7, LOW); mcp1.digitalWrite(15, HIGH);} //non collegato

if((reso % 2) > 0) { mcp1.digitalWrite(1, HIGH); mcp1.digitalWrite(9, LOW);} else { mcp1.digitalWrite(1, LOW); mcp1.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp1.digitalWrite(2, HIGH); mcp1.digitalWrite(10, LOW);} else { mcp1.digitalWrite(2, LOW); mcp1.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp1.digitalWrite(0, HIGH); mcp1.digitalWrite(8, LOW);} else { mcp1.digitalWrite(0, LOW); mcp1.digitalWrite(8, HIGH);}


delay(delayr);


//mcp1.digitalWrite(3, LOW); //non collegato

mcp1.digitalWrite(4, LOW);

mcp1.digitalWrite(5, LOW);

mcp1.digitalWrite(6, LOW);

mcp1.digitalWrite(7, LOW);

mcp1.digitalWrite(2, LOW);

mcp1.digitalWrite(1, LOW);

mcp1.digitalWrite(0, LOW);

//mcp1.digitalWrite(11, LOW); //non collegato

mcp1.digitalWrite(12, LOW);

mcp1.digitalWrite(13, LOW);

mcp1.digitalWrite(14, LOW);

mcp1.digitalWrite(15, LOW);

mcp1.digitalWrite(9, LOW);

mcp1.digitalWrite(10, LOW);

mcp1.digitalWrite(8, LOW);


if((freq % 2) > 0) { mcp4.digitalWrite(4, HIGH); mcp4.digitalWrite(12, LOW);} else { mcp4.digitalWrite(4, LOW); mcp4.digitalWrite(12, HIGH);}

if((freq % 4) > 1) { mcp4.digitalWrite(5, HIGH); mcp4.digitalWrite(13, LOW);} else { mcp4.digitalWrite(5, LOW); mcp4.digitalWrite(13, HIGH);}

if((freq % 8) > 3) { mcp4.digitalWrite(6, HIGH); mcp4.digitalWrite(14, LOW);} else { mcp4.digitalWrite(6, LOW); mcp4.digitalWrite(14, HIGH);}

if((freq % 16) > 7) { mcp4.digitalWrite(7, HIGH); mcp4.digitalWrite(15, LOW);} else { mcp4.digitalWrite(7, LOW); mcp4.digitalWrite(15, HIGH);}

//if((freq % 32) > 15) { mcp4.digitalWrite(7, HIGH); mcp4.digitalWrite(15, LOW);} else { mcp4.digitalWrite(7, LOW); mcp4.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp4.digitalWrite(1, HIGH); mcp4.digitalWrite(9, LOW);} else { mcp4.digitalWrite(1, LOW); mcp4.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp4.digitalWrite(2, HIGH); mcp4.digitalWrite(10, LOW);} else { mcp4.digitalWrite(2, LOW); mcp4.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp4.digitalWrite(0, HIGH); mcp4.digitalWrite(8, LOW);} else { mcp4.digitalWrite(0, LOW); mcp4.digitalWrite(8, HIGH);}


delay(delayr);


//mcp4.digitalWrite(3, LOW);

mcp4.digitalWrite(4, LOW);

mcp4.digitalWrite(5, LOW);

mcp4.digitalWrite(6, LOW);

mcp4.digitalWrite(7, LOW);

mcp4.digitalWrite(2, LOW);

mcp4.digitalWrite(1, LOW);

mcp4.digitalWrite(0, LOW);

//mcp4.digitalWrite(11, LOW);

mcp4.digitalWrite(12, LOW);

mcp4.digitalWrite(13, LOW);

mcp4.digitalWrite(14, LOW);

mcp4.digitalWrite(15, LOW);

mcp4.digitalWrite(9, LOW);

mcp4.digitalWrite(10, LOW);

mcp4.digitalWrite(8, LOW);


}


if(pos==16 or pos==22 or pos==28 or pos==19 or pos==25 or pos ==31){

if((freq % 2) > 0) { mcp2.digitalWrite(5, HIGH); mcp2.digitalWrite(13, LOW);} else { mcp2.digitalWrite(5, LOW); mcp2.digitalWrite(13, HIGH);}

if((freq % 4) > 1) { mcp2.digitalWrite(6, HIGH); mcp2.digitalWrite(14, LOW);} else { mcp2.digitalWrite(6, LOW); mcp2.digitalWrite(14, HIGH);}

if((freq % 8) > 3) { mcp2.digitalWrite(7, HIGH); mcp2.digitalWrite(15, LOW);} else { mcp2.digitalWrite(7, LOW); mcp2.digitalWrite(15, HIGH);}

//if((freq % 16) > 7) { mcp2.digitalWrite(6, HIGH); mcp2.digitalWrite(14, LOW);} else { mcp2.digitalWrite(6, LOW); mcp2.digitalWrite(14, HIGH);}

//if((freq % 32) > 15) { mcp2.digitalWrite(7, HIGH); mcp2.digitalWrite(15, LOW);} else { mcp2.digitalWrite(7, LOW); mcp2.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp2.digitalWrite(1, HIGH); mcp2.digitalWrite(9, LOW);} else { mcp2.digitalWrite(1, LOW); mcp2.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp2.digitalWrite(2, HIGH); mcp2.digitalWrite(10, LOW);} else { mcp2.digitalWrite(2, LOW); mcp2.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp2.digitalWrite(0, HIGH); mcp2.digitalWrite(8, LOW);} else { mcp2.digitalWrite(0, LOW); mcp2.digitalWrite(8, HIGH);}


delay(delayr);


//mcp2.digitalWrite(3, LOW);

//mcp2.digitalWrite(4, LOW);

mcp2.digitalWrite(5, LOW);

mcp2.digitalWrite(6, LOW);

mcp2.digitalWrite(7, LOW);

mcp2.digitalWrite(2, LOW);

mcp2.digitalWrite(1, LOW);

mcp2.digitalWrite(0, LOW);

//mcp2.digitalWrite(11, LOW);

//mcp2.digitalWrite(12, LOW);

mcp2.digitalWrite(13, LOW);

mcp2.digitalWrite(14, LOW);

mcp2.digitalWrite(15, LOW);

mcp2.digitalWrite(9, LOW);

mcp2.digitalWrite(10, LOW);

mcp2.digitalWrite(8, LOW);


if((freq % 2) > 0) { mcp5.digitalWrite(5, HIGH); mcp5.digitalWrite(13, LOW);} else { mcp5.digitalWrite(5, LOW); mcp5.digitalWrite(13, HIGH);}

if((freq % 4) > 1) { mcp5.digitalWrite(6, HIGH); mcp5.digitalWrite(14, LOW);} else { mcp5.digitalWrite(6, LOW); mcp5.digitalWrite(14, HIGH);}

if((freq % 8) > 3) { mcp5.digitalWrite(7, HIGH); mcp5.digitalWrite(15, LOW);} else { mcp5.digitalWrite(7, LOW); mcp5.digitalWrite(15, HIGH);}

//if((freq % 16) > 7) { mcp5.digitalWrite(6, HIGH); mcp5.digitalWrite(14, LOW);} else { mcp5.digitalWrite(6, LOW); mcp5.digitalWrite(14, HIGH);}

//if((freq % 32) > 15) { mcp5.digitalWrite(7, HIGH); mcp5.digitalWrite(15, LOW);} else { mcp5.digitalWrite(7, LOW); mcp5.digitalWrite(15, HIGH);}

if((reso % 2) > 0) { mcp5.digitalWrite(1, HIGH); mcp5.digitalWrite(9, LOW);} else { mcp5.digitalWrite(1, LOW); mcp5.digitalWrite(9, HIGH);}

if((reso % 4) > 1) { mcp5.digitalWrite(2, HIGH); mcp5.digitalWrite(10, LOW);} else { mcp5.digitalWrite(2, LOW); mcp5.digitalWrite(10, HIGH);}

if((order % 2) > 0) { mcp5.digitalWrite(0, HIGH); mcp5.digitalWrite(8, LOW);} else { mcp5.digitalWrite(0, LOW); mcp5.digitalWrite(8, HIGH);}


delay(delayr);


//mcp5.digitalWrite(3, LOW);

//mcp5.digitalWrite(4, LOW);

mcp5.digitalWrite(5, LOW);

mcp5.digitalWrite(6, LOW);

mcp5.digitalWrite(7, LOW);

mcp5.digitalWrite(2, LOW);

mcp5.digitalWrite(1, LOW);

mcp5.digitalWrite(0, LOW);

//mcp5.digitalWrite(11, LOW);

//mcp5.digitalWrite(12, LOW);

mcp5.digitalWrite(13, LOW);

mcp5.digitalWrite(14, LOW);

mcp5.digitalWrite(15, LOW);

mcp5.digitalWrite(9, LOW);

mcp5.digitalWrite(10, LOW);

mcp5.digitalWrite(8, LOW);

}



//TODO: test mono frequency control




}



void Xover_relays::volCtrl1(int pos, int vol, int ways, int delayr){



_pos=pos;

_vol=vol;

_ways=ways;

_delayr=delayr;


if(pos==6){

if((vol % 2) > 0) { mcp10.digitalWrite(0, HIGH); mcp10.digitalWrite(8, LOW);} else { mcp10.digitalWrite(0, LOW); mcp10.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp10.digitalWrite(1, HIGH); mcp10.digitalWrite(9, LOW);} else { mcp10.digitalWrite(1, LOW); mcp10.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp10.digitalWrite(2, HIGH); mcp10.digitalWrite(10, LOW);} else { mcp10.digitalWrite(2, LOW); mcp10.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp10.digitalWrite(3, HIGH); mcp10.digitalWrite(11, LOW);} else { mcp10.digitalWrite(3, LOW); mcp10.digitalWrite(11, HIGH);}


delay(delayr);


mcp10.digitalWrite(0, LOW);

mcp10.digitalWrite(1, LOW);

mcp10.digitalWrite(2, LOW);

mcp10.digitalWrite(3, LOW);

mcp10.digitalWrite(8, LOW);

mcp10.digitalWrite(9, LOW);

mcp10.digitalWrite(10, LOW);

mcp10.digitalWrite(11, LOW);

}


if(pos==7){

if((vol % 2) > 0) { mcp10.digitalWrite(4, HIGH); mcp10.digitalWrite(12, LOW);} else { mcp10.digitalWrite(4, LOW); mcp10.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp10.digitalWrite(5, HIGH); mcp10.digitalWrite(13, LOW);} else { mcp10.digitalWrite(5, LOW); mcp10.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp10.digitalWrite(6, HIGH); mcp10.digitalWrite(14, LOW);} else { mcp10.digitalWrite(6, LOW); mcp10.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp10.digitalWrite(7, HIGH); mcp10.digitalWrite(15, LOW);} else { mcp10.digitalWrite(7, LOW); mcp10.digitalWrite(15, HIGH);}


delay(delayr);


mcp10.digitalWrite(4, LOW);

mcp10.digitalWrite(5, LOW);

mcp10.digitalWrite(6, LOW);

mcp10.digitalWrite(7, LOW);

mcp10.digitalWrite(12, LOW);

mcp10.digitalWrite(13, LOW);

mcp10.digitalWrite(14, LOW);

mcp10.digitalWrite(15, LOW);

}


if(pos==8){

if((vol % 2) > 0) { mcp11.digitalWrite(0, HIGH); mcp11.digitalWrite(8, LOW);} else { mcp11.digitalWrite(0, LOW); mcp11.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp11.digitalWrite(1, HIGH); mcp11.digitalWrite(9, LOW);} else { mcp11.digitalWrite(1, LOW); mcp11.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp11.digitalWrite(2, HIGH); mcp11.digitalWrite(10, LOW);} else { mcp11.digitalWrite(2, LOW); mcp11.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp11.digitalWrite(3, HIGH); mcp11.digitalWrite(11, LOW);} else { mcp11.digitalWrite(3, LOW); mcp11.digitalWrite(11, HIGH);}


delay(delayr);


mcp11.digitalWrite(0, LOW);

mcp11.digitalWrite(1, LOW);

mcp11.digitalWrite(2, LOW);

mcp11.digitalWrite(3, LOW);

mcp11.digitalWrite(8, LOW);

mcp11.digitalWrite(9, LOW);

mcp11.digitalWrite(10, LOW);

mcp11.digitalWrite(11, LOW);

}




if(pos==9){

if((vol % 2) > 0) { mcp11.digitalWrite(4, HIGH); mcp11.digitalWrite(12, LOW);} else { mcp11.digitalWrite(4, LOW); mcp11.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp11.digitalWrite(5, HIGH); mcp11.digitalWrite(13, LOW);} else { mcp11.digitalWrite(5, LOW); mcp11.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp11.digitalWrite(6, HIGH); mcp11.digitalWrite(14, LOW);} else { mcp11.digitalWrite(6, LOW); mcp11.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp11.digitalWrite(7, HIGH); mcp11.digitalWrite(15, LOW);} else { mcp11.digitalWrite(7, LOW); mcp11.digitalWrite(15, HIGH);}


delay(delayr);


mcp11.digitalWrite(4, LOW);

mcp11.digitalWrite(5, LOW);

mcp11.digitalWrite(6, LOW);

mcp11.digitalWrite(7, LOW);

mcp11.digitalWrite(12, LOW);

mcp11.digitalWrite(13, LOW);

mcp11.digitalWrite(14, LOW);

mcp11.digitalWrite(15, LOW);

}


if(pos==10){

if((vol % 2) > 0) { mcp12.digitalWrite(0, HIGH); mcp12.digitalWrite(8, LOW);} else { mcp12.digitalWrite(0, LOW); mcp12.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp12.digitalWrite(1, HIGH); mcp12.digitalWrite(9, LOW);} else { mcp12.digitalWrite(1, LOW); mcp12.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp12.digitalWrite(2, HIGH); mcp12.digitalWrite(10, LOW);} else { mcp12.digitalWrite(2, LOW); mcp12.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp12.digitalWrite(3, HIGH); mcp12.digitalWrite(11, LOW);} else { mcp12.digitalWrite(3, LOW); mcp12.digitalWrite(11, HIGH);}


delay(delayr);


mcp12.digitalWrite(0, LOW);

mcp12.digitalWrite(1, LOW);

mcp12.digitalWrite(2, LOW);

mcp12.digitalWrite(3, LOW);

mcp12.digitalWrite(8, LOW);

mcp12.digitalWrite(9, LOW);

mcp12.digitalWrite(10, LOW);

mcp12.digitalWrite(11, LOW);

}


if(pos==11){

if((vol % 2) > 0) { mcp12.digitalWrite(4, HIGH); mcp12.digitalWrite(12, LOW);} else { mcp12.digitalWrite(4, LOW); mcp12.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp12.digitalWrite(5, HIGH); mcp12.digitalWrite(13, LOW);} else { mcp12.digitalWrite(5, LOW); mcp12.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp12.digitalWrite(6, HIGH); mcp12.digitalWrite(14, LOW);} else { mcp12.digitalWrite(6, LOW); mcp12.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp12.digitalWrite(7, HIGH); mcp12.digitalWrite(15, LOW);} else { mcp12.digitalWrite(7, LOW); mcp12.digitalWrite(15, HIGH);}


delay(delayr);


mcp12.digitalWrite(4, LOW);

mcp12.digitalWrite(5, LOW);

mcp12.digitalWrite(6, LOW);

mcp12.digitalWrite(7, LOW);

mcp12.digitalWrite(12, LOW);

mcp12.digitalWrite(13, LOW);

mcp12.digitalWrite(14, LOW);

mcp12.digitalWrite(15, LOW);

}


if(pos==12){

if((vol % 2) > 0) { mcp13.digitalWrite(0, HIGH); mcp13.digitalWrite(8, LOW);} else { mcp13.digitalWrite(0, LOW); mcp13.digitalWrite(8, HIGH);}

if((vol % 4) > 1) { mcp13.digitalWrite(1, HIGH); mcp13.digitalWrite(9, LOW);} else { mcp13.digitalWrite(1, LOW); mcp13.digitalWrite(9, HIGH);}

if((vol % 8) > 3) { mcp13.digitalWrite(2, HIGH); mcp13.digitalWrite(10, LOW);} else { mcp13.digitalWrite(2, LOW); mcp13.digitalWrite(10, HIGH);}

if((vol % 16) > 7) { mcp13.digitalWrite(3, HIGH); mcp13.digitalWrite(11, LOW);} else { mcp13.digitalWrite(3, LOW); mcp13.digitalWrite(11, HIGH);}


delay(delayr);


mcp13.digitalWrite(0, LOW);

mcp13.digitalWrite(1, LOW);

mcp13.digitalWrite(2, LOW);

mcp13.digitalWrite(3, LOW);

mcp13.digitalWrite(8, LOW);

mcp13.digitalWrite(9, LOW);

mcp13.digitalWrite(10, LOW);

mcp13.digitalWrite(11, LOW);

}




if(pos==13){

if((vol % 2) > 0) { mcp13.digitalWrite(4, HIGH); mcp13.digitalWrite(12, LOW);} else { mcp13.digitalWrite(4, LOW); mcp13.digitalWrite(12, HIGH);}

if((vol % 4) > 1) { mcp13.digitalWrite(5, HIGH); mcp13.digitalWrite(13, LOW);} else { mcp13.digitalWrite(5, LOW); mcp13.digitalWrite(13, HIGH);}

if((vol % 8) > 3) { mcp13.digitalWrite(6, HIGH); mcp13.digitalWrite(14, LOW);} else { mcp13.digitalWrite(6, LOW); mcp13.digitalWrite(14, HIGH);}

if((vol % 16) > 7) { mcp13.digitalWrite(7, HIGH); mcp13.digitalWrite(15, LOW);} else { mcp13.digitalWrite(7, LOW); mcp13.digitalWrite(15, HIGH);}


delay(delayr);


mcp13.digitalWrite(4, LOW);

mcp13.digitalWrite(5, LOW);

mcp13.digitalWrite(6, LOW);

mcp13.digitalWrite(7, LOW);

mcp13.digitalWrite(12, LOW);

mcp13.digitalWrite(13, LOW);

mcp13.digitalWrite(14, LOW);

mcp13.digitalWrite(15, LOW);

}






//TODO: test stereo volume control


}


void Xover_relays::selCtrl0(int pos, int ways, int delayr){



_pos=pos;

_ways=ways;

_delayr=delayr;



if(pos==3){

//Switch1

if(ways==2) { mcp8.digitalWrite(0, HIGH); mcp8.digitalWrite(8, LOW); mcp8.digitalWrite(1, LOW); mcp8.digitalWrite(9, HIGH);}//A=on B=off

else if(ways==3) { mcp8.digitalWrite(0, LOW); mcp8.digitalWrite(8, HIGH); mcp8.digitalWrite(1, HIGH); mcp8.digitalWrite(9, LOW);}//A=off B=on

else if(ways==4) { mcp8.digitalWrite(0, LOW); mcp8.digitalWrite(8, HIGH); mcp8.digitalWrite(1, HIGH); mcp8.digitalWrite(9, LOW);}//A=off B=on


delay(delayr);


mcp8.digitalWrite(0, LOW);

mcp8.digitalWrite(1, LOW);

mcp8.digitalWrite(8, LOW);

mcp8.digitalWrite(9, LOW);


delay(delayr);


//Switch2

if(ways==2) { mcp8.digitalWrite(6, LOW); mcp8.digitalWrite(14, HIGH); mcp8.digitalWrite(7, HIGH); mcp8.digitalWrite(15, LOW);}//A=off B=on

else if(ways==3) { mcp8.digitalWrite(6, HIGH); mcp8.digitalWrite(14, LOW); mcp8.digitalWrite(7, LOW); mcp8.digitalWrite(15, HIGH);}//A=on B=off

else if(ways==4) { mcp8.digitalWrite(6, LOW); mcp8.digitalWrite(14, HIGH); mcp8.digitalWrite(7, HIGH); mcp8.digitalWrite(15, LOW);}//A=off B=on


delay(delayr);


mcp8.digitalWrite(6, LOW);

mcp8.digitalWrite(7, LOW);

mcp8.digitalWrite(14, LOW);

mcp8.digitalWrite(15, LOW);

}


}