const int shcp_pin = 2;
const int stcp_pin = 3;
const int ds_pin = 4;
// 0b0000000000000000000000000000000000000000000000000000000000000000
void setup() {
Serial.begin(115200);
randomSeed(A0);
pinMode(shcp_pin, OUTPUT);
pinMode(stcp_pin, OUTPUT);
pinMode(ds_pin, OUTPUT);
}
void schrijf_naar_register(uint8_t data, int lengte) {
// data is hoe de outputs van het shiftregister ingesteld worden (1 voor aan 0 voor uit)
// lengte is hoeveel bits je van data in het register wilt schrijven
// met data = 0b00000001 en lengte = 8 zet je bijv. de laatste output aan en de rest uit
// met data = 0b00001111 en lengte = 4 zet je de eerste 4 outputs aan (hij slaat dus het 0000 gedeelte over)
digitalWrite(stcp_pin, LOW);
for (int i = 0; i < lengte; i++) {
Serial.print((data >> i) & 1);
digitalWrite(ds_pin, (data >> i) & 1);
digitalWrite(shcp_pin, HIGH);
digitalWrite(shcp_pin, LOW);
}
digitalWrite(stcp_pin, HIGH);
Serial.println();
}
void patroon_heenweer(bool andersom) {
for (int i = 0; i < 8; i++) {
if (andersom) {
schrijf_naar_register((0b00000001 << i), 8);
} else {
schrijf_naar_register((0b10000000 >> i), 8);
}
delay(100);
}
}
void patroon_va(bool v) {
int l = 0;
int r = 0;
for (int i = 0; i < 4; i++) {
if (v) {
l = 0b1000 >> i;
r = 0b0001 << i;
} else {
l = 0b0001 << i;
r = 0b1000 >> i;
}
schrijf_naar_register(((l << 4) | r), 8);
delay(100);
}
}
void patroon_toggle() {
static bool invers = false;
int patroon = 0b10101010;
if (invers) {
schrijf_naar_register(~patroon, 8);
} else {
schrijf_naar_register(patroon, 8);
}
invers = !invers;
delay(100);
}
void patroon_twee_heenweer(bool andersom) {
int een = 0;
int twee = 0;
for (int i = 0; i < 8; i++) {
if (andersom) {
een = 0b100000000 >> i;
twee = 0b001000000 >> i;
} else {
een = 0b000000001 << i;
twee = 0b000000100 << i;
}
schrijf_naar_register((een | twee), 8);
delay(100);
}
}
void patroon_laadbalk() {
for (int i = 0; i < 8; i++) {
schrijf_naar_register(1, 1);
delay(100);
}
for (int i = 0; i < 8; i++) {
schrijf_naar_register(0, 1);
delay(100);
}
}
void patroon_random() {
schrijf_naar_register(random(0xFF), 8);
delay(100);
}
void loop() {
unsigned long begin_time = millis();
unsigned long current_time = millis();
while (current_time - begin_time < 5000) {
patroon_heenweer(false);
patroon_heenweer(true);
current_time = millis();
}
while ((current_time - begin_time > 5000) && (current_time - begin_time < 10000)) {
patroon_va(true);
patroon_va(false);
current_time = millis();
}
while ((current_time - begin_time > 10000) && (current_time - begin_time < 15000)) {
patroon_toggle();
current_time = millis();
}
while ((current_time - begin_time > 15000) && (current_time - begin_time < 20000)) {
patroon_toggle();
current_time = millis();
}
while ((current_time - begin_time > 20000) && (current_time - begin_time < 25000)) {
patroon_twee_heenweer(true);
patroon_twee_heenweer(false);
current_time = millis();
}
while ((current_time - begin_time > 25000) && (current_time - begin_time < 30000)) {
patroon_laadbalk();
current_time = millis();
}
while ((current_time - begin_time > 30000) && (current_time - begin_time < 35000)) {
patroon_random();
current_time = millis();
}
}