#define CLK 13
#define D 11
#define B 8
#define CLOCKOUT 9

bool set = false;
uint8_t out = 0; //final output variable
uint64_t preout = 0; //64 bit integer to hold control values

const int dataPin = 2;   /* DS */
const int clockPin = 3;  /* SHCP */
const int latchPin = 4;  /* STCP */


/*
    preout = 0b1111110111111111111111111111111111111111111111111010111111111111;
    for (int i = 7; i >= 0; i--)
    {
      out = preout >> i * B;
      if (out < 0x10)
        Serial.print('0');
      Serial.print(out, HEX);
      shiftOut(D, CLK, MSBFIRST, out);
    }
*/


void setup()
{
  Serial.begin(115200);
  delay(200);
  Serial.println();

  pinMode(D, OUTPUT);
  pinMode(CLK, OUTPUT);

  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);

//   digitalWrite(latchPin, HIGH);

  if (set == false)
  {
//    preout = 0b 11111101 11111111 11111111 11111111 11111111 11111111 10101111 11111111;

//                FD      FF      FF      FF      FF      FF      AF      FF


    preout = 0b1111110111111111111111111111111111111111111111111010111111111111;
    for (int i = 7; i >= 0; i--)
    {
      out = preout >> i * B;
      if (out < 0x10)
        Serial.print('0');

      Serial.print(out, HEX);
      
      shiftOut(D, CLK, MSBFIRST, out);
    }




/*
    preout = 0b1111110111111111111111111111111111111111111111111010111111111111;
    for (int i = 7; i >= 0; i--)
    {

      
      out = preout >> i * B;
      if (out < 0x10)
        Serial.print('0');
      Serial.print(out, HEX); Serial.print("  ");

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, out);
      digitalWrite(latchPin, HIGH);


//      shiftOut(D, CLK, MSBFIRST, out);

      delay(777);
    }
*/
    set = true;
  }
}

void setupy()
{
  Serial.begin(115200);
  delay(200);
  Serial.println();

  pinMode(D, OUTPUT);
  pinMode(CLK, OUTPUT);

  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);

//   digitalWrite(latchPin, HIGH);

  if (set == false)
  {
//    preout = 0b 11111101 11111111 11111111 11111111 11111111 11111111 10101111 11111111;

//                FD      FF      FF      FF      FF      FF      AF      FF

    preout = 0b1111110111111111111111111111111111111111111111111010111111111111;
    for (int i = 7; i >= 0; i--)
    {
      out = preout >> i * B;
      if (out < 0x10)
        Serial.print('0');
      Serial.print(out, HEX); Serial.print("  ");

      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, out);
      digitalWrite(latchPin, HIGH);


//      shiftOut(D, CLK, MSBFIRST, out);

      delay(777);
    }
    set = true;
  }
}

void loop()
{

  //do nothing
}





void setupx() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
}

int pattern = 0b10101010;
void loopx() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, pattern);
  digitalWrite(latchPin, HIGH);
  delay(500);
  pattern = ~pattern; // Invert the pattern
}
74HC595