CD4052B

By jeleniel
#define PIN_Y0   1
#define PIN_Y2   2
#define PIN_Y    3
#define PIN_Y3   4
#define PIN_Y1   5
#define PIN_INH  6
#define PIN_VEE  7
#define PIN_VSS  8
#define PIN_A    9
#define PIN_B    10
#define PIN_X3   11
#define PIN_X0   12
#define PIN_X    13
#define PIN_X1   14
#define PIN_X2   15
#define PIN_VDD  16

#define RON   100.0
#define ROFF  100000000000.0
#define COFF  0.000000000001

void set_x(float r0, float r1, float r2, float r3) {
    resistance(PIN_X0, PIN_X, r0);
    resistance(PIN_X1, PIN_X, r1);
    resistance(PIN_X2, PIN_X, r2);
    resistance(PIN_X3, PIN_X, r3);
}

void set_y(float r0, float r1, float r2, float r3) {
    resistance(PIN_Y0, PIN_Y, r0);
    resistance(PIN_Y1, PIN_Y, r1);
    resistance(PIN_Y2, PIN_Y, r2);
    resistance(PIN_Y3, PIN_Y, r3);
}

void set_all_off() {
    set_x(ROFF, ROFF, ROFF, ROFF);
    set_y(ROFF, ROFF, ROFF, ROFF);
}

void setup() {
    chipName("CD4052B");

    pin(PIN_Y0,  "Y0");
    pin(PIN_Y2,  "Y2");
    pin(PIN_Y,   "Y");
    pin(PIN_Y3,  "Y3");
    pin(PIN_Y1,  "Y1");
    pin(PIN_INH, "INH");
    pin(PIN_VEE, "VEE");
    pin(PIN_VSS, "VSS", GROUND);
    pin(PIN_A,   "A");
    pin(PIN_B,   "B");
    pin(PIN_X3,  "X3");
    pin(PIN_X0,  "X0");
    pin(PIN_X,   "X");
    pin(PIN_X1,  "X1");
    pin(PIN_X2,  "X2");
    pin(PIN_VDD, "VDD", POWER);

    resistance(PIN_X0, PIN_X, ROFF, NON_LINEAR);
    resistance(PIN_X1, PIN_X, ROFF, NON_LINEAR);
    resistance(PIN_X2, PIN_X, ROFF, NON_LINEAR);
    resistance(PIN_X3, PIN_X, ROFF, NON_LINEAR);

    resistance(PIN_Y0, PIN_Y, ROFF, NON_LINEAR);
    resistance(PIN_Y1, PIN_Y, ROFF, NON_LINEAR);
    resistance(PIN_Y2, PIN_Y, ROFF, NON_LINEAR);
    resistance(PIN_Y3, PIN_Y, ROFF, NON_LINEAR);

}

void loop() {
    int inh = digitalRead(PIN_INH);
    int a = digitalRead(PIN_A);
    int b = digitalRead(PIN_B);

    int selected = 0;

    if (a) {
        selected = selected + 1;
    }

    if (b) {
        selected = selected + 2;
    }

    if (inh) {
        set_all_off();
    } else if (selected == 0) {
        set_x(RON,  ROFF, ROFF, ROFF);
        set_y(RON,  ROFF, ROFF, ROFF);
    } else if (selected == 1) {
        set_x(ROFF, RON,  ROFF, ROFF);
        set_y(ROFF, RON,  ROFF, ROFF);
    } else if (selected == 2) {
        set_x(ROFF, ROFF, RON,  ROFF);
        set_y(ROFF, ROFF, RON,  ROFF);
    } else {
        set_x(ROFF, ROFF, ROFF, RON);
        set_y(ROFF, ROFF, ROFF, RON);
    }
}