#include "Ticker.h"
#include <CD74HC4067.h>

#define E  21
#define S0 18
#define S1 19
#define S2 22
#define S3 23
#define COM 27

uint16_t wLedVal = 0x0000;

Ticker ticker_changeLed;

// const uint8_t controlPins[] = { S0, S1, S2, S3 };
CD74HC4067 my_mux(S0, S1, S2, S3);

// void changeLed(void) {
//   if (wLedVal == 0xFFFF) {
//     wLedVal = 0x0000;
//   } else {
//     wLedVal = 0xFFFF;
//   }
// }

// float readMux(uint8_t channel)
// {
//   digitalWrite(E, HIGH);  // Disable chip before changing channel.
//   delay(1);
//   for(int8_t i = 3; i >= 0; i--)
//   {
//     int8_t b =  (channel >> i) & 1;
//     digitalWrite(controlPins[i], b);
//     // Serial.print(b);
//   }
//   digitalWrite(E, LOW);  // Enable chip after changing channel.
//   delay(1);
//   // Serial.print(": ");
//   return analogRead(COM);
// }

// void setChannel(uint8_t channel)
// {
//   digitalWrite(E, HIGH);  // Disable chip before changing channel.
//   delay(1);
//   for(int8_t i = 3; i >= 0; i--)
//   {
//     int8_t b =  (channel >> i) & 1;
//     digitalWrite(controlPins[i], b);
//     // Serial.print(b);
//   }
//   digitalWrite(E, LOW);  // Enable chip after changing channel.
//   delay(1);
// }

// void showLed(void)
// {
//   for (uint8_t i = 0; i<16; i++) {
//     digitalWrite(COM, (wLedVal >> i) & 1);
//     setChannel(i);
//   }
// }

void setup()
{
  Serial.begin(115200);
  Serial.println("Booting...");
  // pinMode(S0, OUTPUT);
  // pinMode(S1, OUTPUT);
  // pinMode(S2, OUTPUT);
  // pinMode(S3, OUTPUT);
  pinMode(COM, OUTPUT);
  // ticker_changeLed.attach(1, &changeLed);
}

void loop()
{
  digitalWrite(COM, HIGH);
  for (int i = 0; i < 16; i++) {
    my_mux.channel(i);
    delay(1000);
  }
  digitalWrite(COM, LOW);
  for (int i = 0; i < 16; i++) {
    my_mux.channel(i);
    delay(1000);
  }
  // showLed();
  // pixels.clear();
  // for(uint8_t i = 0; i < 16; i++)
  // {
  //   writeMux(i, true);
  //   // float f = readMux(i);
  //   // pixels.setPixelColor(i, pixels.Color(0, f / 4095.0 * 255.0, 0));
  //   Serial.print("Channel ");
  //   Serial.println(i);
  //   // Serial.print(" = ");
  //   // Serial.println(f);
  //   delay(1000);
  // }
  // for(uint8_t i = 0; i < 16; i++)
  // {
  //   writeMux(i, false);
  //   // float f = readMux(i);
  //   // pixels.setPixelColor(i, pixels.Color(0, f / 4095.0 * 255.0, 0));
  //   Serial.print("Channel ");
  //   Serial.println(i);
  //   // Serial.print(" = ");
  //   // Serial.println(f);
  //   delay(1000);
  // }
  // pixels.show();
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
led1:A
led1:C
r1:1
r1:2
led2:A
led2:C
r2:1
r2:2
led3:A
led3:C
r3:1
r3:2
led4:A
led4:C
r4:1
r4:2
led5:A
led5:C
r5:1
r5:2
led6:A
led6:C
r6:1
r6:2
led7:A
led7:C
r7:1
r7:2
led8:A
led8:C
r8:1
r8:2
led9:A
led9:C
r9:1
r9:2
led10:A
led10:C
r10:1
r10:2
led11:A
led11:C
r11:1
r11:2
led12:A
led12:C
r12:1
r12:2
led13:A
led13:C
r13:1
r13:2
led14:A
led14:C
r14:1
r14:2
led15:A
led15:C
r15:1
r15:2
led16:A
led16:C
r16:1
r16:2
led17:A
led17:C
r17:1
r17:2
mux1:I15
mux1:I14
mux1:I13
mux1:I12
mux1:I11
mux1:I10
mux1:I9
mux1:I8
mux1:I7
mux1:I6
mux1:I5
mux1:I4
mux1:I3
mux1:I2
mux1:I1
mux1:I0
mux1:COM
mux1:S3
mux1:S2
mux1:S1
mux1:S0
mux1:EN
mux1:VCC
mux1:GND
r18:1
r18:2
led18:A
led18:C