#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();
}