Replacing delay() with millis() in ledcube code

I made a 3x3x3 ledcube using a shiftregister and FETs. By sending three 8 bit values to the function writeLeds() wich uses digitalShiftOut() i can control the 3 layers individually by writing the FETs high or low. The lasts 3 leds i control with an Arduino pin. Now i want to add buttons to switch between patterns. This means I have to replace the delay() in the writeleds() function. But I can't figure out how I can do that while keeping the same functionality.

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

int FET1 = 5;
int FET2 = 6;
int FET3 = 7;

int led = A0;


#define vertraging_leds 200

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);

  pinMode(FET1, OUTPUT);
  pinMode(FET2, OUTPUT);
  pinMode(FET3, OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  randomSeed(A3);
  Serial.begin(9600);
}

void loop() {
  int aantal = 5;
  for (int i = 0; i < 1; i++) {
    looplicht();
  }
  for (int i = 0; i < 10; i++) {
    randomVolgorde();
  }
  for (int i = 0; i < aantal; i++) {
    zwaailicht();
  }
  for (int i = 0; i < aantal; i++) {
    verticaal_cascaderen();
  }
}

//void horizontaal_cascaderen() {
//  int patroon = 0xFF;
//  writeLeds(patroon, 0x00, 0x00, 20);
//  writeLeds(0x00, patroon, 0x00, 20);
//  writeLeds(0x00, 0x00, patroon, 20);
//  writeLeds(0x00, patroon, 0x00, 20);
//}

void verticaal_cascaderen() {
  static int vertraging = 10;
  for (int i = 0; i < 3; i++) {
    writeLeds(0b11100000, 0b11100000, 0b11100000, vertraging);
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
    digitalWrite(led, HIGH);
    digitalWrite(FET1, HIGH);
    digitalWrite(FET2, HIGH);
    digitalWrite(FET3, HIGH);
    writeLeds(0b00000011, 0b00000011, 0b00000011, vertraging);
    digitalWrite(led, LOW);
    digitalWrite(FET1, LOW);
    digitalWrite(FET2, LOW);
    digitalWrite(FET3, LOW);
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
  }

  //linksRechts
  for (int i = 0; i < 3; i++) {
    digitalWrite(led, HIGH);
    digitalWrite(FET1, HIGH);
    digitalWrite(FET2, HIGH);
    digitalWrite(FET3, HIGH);
    writeLeds(0b00100100, 0b00100100, 0b00100100, vertraging);
    digitalWrite(led, LOW);
    digitalWrite(FET1, LOW);
    digitalWrite(FET2, LOW);
    digitalWrite(FET3, LOW);
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
    writeLeds(0b10010010, 0b10010010, 0b10010010, vertraging);
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
  }
}


void zwaailicht_midden() {
  static int vertraging = 25;
  int patroon = 0b00001000;
  writeLeds(0b00101010, 0b00101010, 0b00101010, vertraging);

  writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, HIGH);
  digitalWrite(FET2, HIGH);
  digitalWrite(FET3, HIGH);
  writeLeds(0b10001000, 0b10001000, 0b10001000, vertraging);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
}

void zwaailicht() {
  static int vertraging = 25;
  writeLeds(0b00100010, 0b00100010, 0b00100010, vertraging);

  writeLeds(0b00010100, 0b00010100, 0b00010100, vertraging);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, HIGH);
  digitalWrite(FET2, HIGH);
  digitalWrite(FET3, HIGH);
  writeLeds(0b10000000, 0b10000000, 0b10000000, vertraging);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  writeLeds(0b01000001, 0b01000001, 0b01000001, vertraging);
}

void randomVolgorde() {
  int vertraging = 25;
  int laag = random(1, 7);
  int patroon = 1 << random(0, 8);

  switch (laag) {
    case 1:
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      break;
    case 2:
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      break;
    case 3:
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      break;
    case 4:
      led_laag(1, 0, 0);
      break;
    case 5:
      led_laag(0, 1, 0);
      break;
    case 6:
      led_laag(0, 0, 1);
      break;
  }
}

void looplicht() {
  static int patroon = 0;
  int vertraging = 10;
  // Looplicht horizontaal door alle lagen
  for (int j = 0; j < 1; j++) {
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      Serial.println("laag 1");
    }
    led_laag(1, 0, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      Serial.println("laag 2");
    }
    led_laag(0, 1, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      Serial.println("laag 3");
    }
    led_laag(0, 0, 1);
  }

  for (int j = 0; j < 1; j++) {
    // Van laag 3 naar laag 1
    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
    }
    led_laag(0, 1, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
    }
    led_laag(1, 0, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
    }
  }
}

void writeLeds(int laag1, int laag2, int laag3, int tijd) {

  for (int i = 0; i < tijd; i++) {
    DigitalShiftOut(laag1);
    digitalWrite(FET1, HIGH);
    delay(5);
    digitalWrite(FET1, LOW);
    DigitalShiftOut(laag2);
    digitalWrite(FET2, HIGH);
    delay(5);
    digitalWrite(FET2, LOW);
    DigitalShiftOut(laag3);
    digitalWrite(FET3, HIGH);
    delay(5);
    digitalWrite(FET3, LOW);
  }
}

void DigitalShiftOut(int data) {
  for (int i = 0; i < 8; i++) {
    int bitValue = (data >> i) & 1;
    digitalWrite(dataPin, bitValue);
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
  }
  digitalWrite(latchPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(latchPin, LOW);
}


void led_laag(bool laag1, bool laag2, bool laag3) {

  writeLeds(0x00, 0x00, 0x00, 1);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, laag1 ? HIGH : LOW);  // verkorte if-else
  digitalWrite(FET2, laag2 ? HIGH : LOW);
  digitalWrite(FET3, laag3 ? HIGH : LOW);

  delay(vertraging_leds);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
}

  • Show us your attempt.

Here's a low rent hack that may be all you need:

Search these fora for "mydelay", it has been offered in several variations.

One day you can look forward to rewriting your sketch to do this properly. Or maybe not.

a7

This is the last thing I tried. Kind of works, but the timing is messed up and the patterns aren't consistent.

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

int FET1 = 5;
int FET2 = 6;
int FET3 = 7;

unsigned long functie1Time = 0;
unsigned long functie2Time = 0;
unsigned long functie3Time = 0;

int stap = 0;

unsigned long previousMillis = 0;
const unsigned long interval = 200;

int led = A0;

#define vertraging_leds 250

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(FET1, OUTPUT);
  pinMode(FET2, OUTPUT);
  pinMode(FET3, OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  randomSeed(A3);
  Serial.begin(9600);
}

void loop() {
  verticaal_cascaderen();
  //zwaailicht();
}

void verticaal_cascaderen() {
  static int vertraging = 2500;
  for (int i = 0; i < 3; i++) {
    writeLeds(0b11100000, 0b11100000, 0b11100000, vertraging);
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
    digitalWrite(led, HIGH);
    digitalWrite(FET1, HIGH);
    digitalWrite(FET2, HIGH);
    digitalWrite(FET3, HIGH);
    writeLeds(0b00000011, 0b00000011, 0b00000011, vertraging);
    digitalWrite(led, LOW);
    digitalWrite(FET1, LOW);
    digitalWrite(FET2, LOW);
    digitalWrite(FET3, LOW);
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
  }

  //linksRechts
  for (int i = 0; i < 3; i++) {
    digitalWrite(led, HIGH);
    digitalWrite(FET1, HIGH);
    digitalWrite(FET2, HIGH);
    digitalWrite(FET3, HIGH);
    writeLeds(0b00100100, 0b00100100, 0b00100100, vertraging);
    digitalWrite(led, LOW);
    digitalWrite(FET1, LOW);
    digitalWrite(FET2, LOW);
    digitalWrite(FET3, LOW);
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
    writeLeds(0b10010010, 0b10010010, 0b10010010, vertraging);
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
  }
}


void zwaailicht_midden() {
  static int vertraging = 25;
  int patroon = 0b00001000;
  writeLeds(0b00101010, 0b00101010, 0b00101010, vertraging);

  writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, HIGH);
  digitalWrite(FET2, HIGH);
  digitalWrite(FET3, HIGH);
  writeLeds(0b10001000, 0b10001000, 0b10001000, vertraging);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
}


void zwaailicht() {
  static int vertraging = 500;
  writeLeds(0b00100010, 0b00100010, 0b00100010, vertraging);

  writeLeds(0b00010100, 0b00010100, 0b00010100, vertraging);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, HIGH);
  digitalWrite(FET2, HIGH);
  digitalWrite(FET3, HIGH);
  Serial.println("Leds aan");
  writeLeds(0b10000000, 0b10000000, 0b10000000, vertraging);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  Serial.println("Leds uit");
  writeLeds(0b01000001, 0b01000001, 0b01000001, vertraging);
}

void randomVolgorde() {
  int vertraging = 25;
  int laag = random(1, 7);
  int patroon = 1 << random(0, 8);

  switch (laag) {
    case 1:
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      break;
    case 2:
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      break;
    case 3:
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      break;
    case 4:
      led_laag(1, 0, 0);
      break;
    case 5:
      led_laag(0, 1, 0);
      break;
    case 6:
      led_laag(0, 0, 1);
      break;
  }
}

void looplicht() {
  static int patroon = 0;
  int vertraging = 100;
  // Looplicht horizontaal door alle lagen
  for (int j = 0; j < 1; j++) {
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      Serial.println("laag 1");
    }
    led_laag(1, 0, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      Serial.println("laag 2");
    }
    led_laag(0, 1, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      Serial.println("laag 3");
    }
    led_laag(0, 0, 1);
  }

  for (int j = 0; j < 1; j++) {
    // Van laag 3 naar laag 1
    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
    }
    led_laag(0, 1, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
    }
    led_laag(1, 0, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
    }
  }
}

void writeLeds(int laag1, int laag2, int laag3, int tijd) {

  unsigned long currentMillis = millis();
  // Functie 1: wordt uitgevoerd om de 5 ms

  for (int i = 0; i < tijd; i++) {
    if (currentMillis - functie1Time >= interval) {
      functie1Time = currentMillis;  // Update de tijd voor functie 1
      DigitalShiftOut(laag1);
      digitalWrite(FET1, HIGH);  // Voer functie 1 uit
    }

    // Functie 2: wordt uitgevoerd om de 5 ms na functie 1
    if (currentMillis - functie2Time >= interval) {
      functie2Time = currentMillis;  // Update de tijd voor functie 2
      digitalWrite(FET1, LOW);
      DigitalShiftOut(laag2);
      digitalWrite(FET2, HIGH);  // Voer functie 2 uit
    }

    // Functie 3: wordt uitgevoerd om de 5 ms na functie 2
    if (currentMillis - functie3Time >= interval) {
      functie3Time = currentMillis;  // Update de tijd voor functie 3
      digitalWrite(FET2, LOW);
      DigitalShiftOut(laag3);
      digitalWrite(FET3, HIGH);  // Voer functie 3 uit
    }
    if (currentMillis - functie3Time >= interval) {
      functie3Time = currentMillis;  // Update de tijd voor functie 3
      digitalWrite(FET3, LOW);
    }
  }
}


void DigitalShiftOut(int data) {
  for (int i = 0; i < 8; i++) {
    int bitValue = (data >> i) & 1;
    digitalWrite(dataPin, bitValue);
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
  }
  digitalWrite(latchPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(latchPin, LOW);
}


void led_laag(bool laag1, bool laag2, bool laag3) {

  writeLeds(0x00, 0x00, 0x00, 1);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, laag1 ? HIGH : LOW);  // verkorte if-else
  digitalWrite(FET2, laag2 ? HIGH : LOW);
  digitalWrite(FET3, laag3 ? HIGH : LOW);

  delay(vertraging_leds);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
}

Thank you! This works great!

Nice. Please post the code that shows how you implemented the hack!

a7

Changed myDelay() so that it reads 2 buttons. Then replaced the delays in writeLeds() with myDelay().

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

int FET1 = 5;
int FET2 = 6;
int FET3 = 7;

int led = A0;

int volgende_knop = A1;
int vorige_knop = A2;
int aantalPatronen = 5;

#define vertraging_leds 200

int huidigPatroon = 0; 

void setup() {
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(latchPin, OUTPUT);

  pinMode(FET1, OUTPUT);
  pinMode(FET2, OUTPUT);
  pinMode(FET3, OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
  randomSeed(A3);
  Serial.begin(9600);

  pinMode(volgende_knop, INPUT_PULLUP);  
  pinMode(vorige_knop, INPUT_PULLUP);    
}

void loop() {

  
  if (!digitalRead(volgende_knop)) {
    
    huidigPatroon++;
    if (huidigPatroon > aantalPatronen) huidigPatroon = 0;  
    delay(200);                                               
  }

  if (!digitalRead(vorige_knop)) {
    // Vorig patroon
    huidigPatroon--;
    if (huidigPatroon < 0) huidigPatroon = aantalPatronen; 
    delay(200);                                               
  }


  switch (huidigPatroon) {
    case 0:
      verticaal_cascaderen();
      break;
    case 1:
      zwaailicht();
      break;
    case 2:
      randomVolgorde();
      break;
    case 3:
      looplicht();
      break;
    case 4:
      zwaailicht_midden();
      break;
    case 5:
      horizontaal_cascaderen();
      break;
  }
}

bool myDelay(unsigned long duration) {
  unsigned long delayStart = millis();
  while (millis() - delayStart < duration) {
    if ((digitalRead(volgende_knop) == LOW) || (digitalRead(vorige_knop) == LOW)) {
      return true; 
    }
  }
  return false;
}

void horizontaal_cascaderen() {
  static int vertraging = 10;
  int patroon = 0xFF;
  writeLeds(patroon, 0x00, 0x00, vertraging);
  writeLeds(0x00, patroon, 0x00, vertraging);
  writeLeds(0x00, 0x00, patroon, vertraging);
  writeLeds(0x00, patroon, 0x00, vertraging);
}

void verticaal_cascaderen() {
  static int vertraging = 10;
  for (int i = 0; i < 3; i++) {
    writeLeds(0b11100000, 0b11100000, 0b11100000, vertraging);
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
    leds_aan();
    writeLeds(0b00000011, 0b00000011, 0b00000011, vertraging);
    leds_uit();
    writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
  }

  //linksRechts
  for (int i = 0; i < 3; i++) {
    leds_aan();
    writeLeds(0b00100100, 0b00100100, 0b00100100, vertraging);
    leds_uit();
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
    writeLeds(0b10010010, 0b10010010, 0b10010010, vertraging);
    writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
  }
}

void zwaailicht_midden() {
  static int vertraging = 25;
  int patroon = 0b00001000;
  writeLeds(0b00101010, 0b00101010, 0b00101010, vertraging);
  writeLeds(0b00011100, 0b00011100, 0b00011100, vertraging);
  leds_aan();
  writeLeds(0b10001000, 0b10001000, 0b10001000, vertraging);
  leds_uit();
  writeLeds(0b01001001, 0b01001001, 0b01001001, vertraging);
}

void zwaailicht() {
  static int vertraging = 25;
  writeLeds(0b00100010, 0b00100010, 0b00100010, vertraging);
  writeLeds(0b00010100, 0b00010100, 0b00010100, vertraging);
  leds_aan();
  writeLeds(0b10000000, 0b10000000, 0b10000000, vertraging);
  leds_uit();
  writeLeds(0b01000001, 0b01000001, 0b01000001, vertraging);
}

void randomVolgorde() {
  int vertraging = 25;
  int laag = random(1, 7);
  int patroon = 1 << random(0, 8);

  switch (laag) {
    case 1:
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      break;
    case 2:
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      break;
    case 3:
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      break;
    case 4:
      led_laag(1, 0, 0);
      break;
    case 5:
      led_laag(0, 1, 0);
      break;
    case 6:
      led_laag(0, 0, 1);
      break;
  }
}

void looplicht() {
  static int patroon = 0;
  int vertraging = 10;
  // Looplicht horizontaal door alle lagen
  for (int j = 0; j < 1; j++) {
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
      Serial.println("laag 1");
    }
    led_laag(1, 0, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
      Serial.println("laag 2");
    }
    led_laag(0, 1, 0);
    for (int i = 0; i < 8; i++) {
      patroon = 0b10000000 >> i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
      Serial.println("laag 3");
    }
    led_laag(0, 0, 1);
  }

  for (int j = 0; j < 1; j++) {
    // Van laag 3 naar laag 1
    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, 0x00, patroon, vertraging);
    }
    led_laag(0, 1, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(0x00, patroon, 0x00, vertraging);
    }
    led_laag(1, 0, 0);

    for (int i = 0; i < 8; i++) {
      patroon = 0b00000001 << i;
      digitalWrite(led, LOW);
      writeLeds(patroon, 0x00, 0x00, vertraging);
    }
  }
}

void writeLeds(int laag1, int laag2, int laag3, int tijd) {

  for (int i = 0; i < tijd; i++) {

    DigitalShiftOut(laag1);
    digitalWrite(FET1, HIGH);
    myDelay(5);
    digitalWrite(FET1, LOW);
    DigitalShiftOut(laag2);
    digitalWrite(FET2, HIGH);
    myDelay(5);
    digitalWrite(FET2, LOW);
    DigitalShiftOut(laag3);
    digitalWrite(FET3, HIGH);
    myDelay(5);
    digitalWrite(FET3, LOW);
  }
}

void DigitalShiftOut(int data) {
  for (int i = 0; i < 8; i++) {
    int bitValue = (data >> i) & 1;
    digitalWrite(dataPin, bitValue);
    digitalWrite(clockPin, HIGH);
    digitalWrite(clockPin, LOW);
  }
  digitalWrite(latchPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(latchPin, LOW);
}

void led_laag(bool laag1, bool laag2, bool laag3) {

  writeLeds(0x00, 0x00, 0x00, 1);

  digitalWrite(led, HIGH);
  digitalWrite(FET1, laag1 ? HIGH : LOW);  // verkorte if-else
  digitalWrite(FET2, laag2 ? HIGH : LOW);
  digitalWrite(FET3, laag3 ? HIGH : LOW);

  delay(vertraging_leds);

  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
}

void leds_aan() {
  writeLeds(0x00, 0x00, 0x00, 1);
  digitalWrite(led, HIGH);
  digitalWrite(FET1, HIGH);
  digitalWrite(FET2, HIGH);
  digitalWrite(FET3, HIGH);
}
void leds_uit() {
  writeLeds(0x00, 0x00, 0x00, 1);
  digitalWrite(led, LOW);
  digitalWrite(FET1, LOW);
  digitalWrite(FET2, LOW);
  digitalWrite(FET3, LOW);
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.