#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "unistd.h"
// Define pins
const uint8_t dataPin = 13;
const uint8_t latchPin = 14;
const uint8_t clockPin = 15;
const uint8_t pinCount = 24;
// Define bit strings
const char* bitStrings[] = {
"000000000000000000000001",
"000000000000000000000010",
"000000000000000000000100",
"000000000000000000001000",
"000000000000000000010000",
"000000000000000000100000",
"000000000000000001000000",
"000000000000000010000000",
"000000000000000100000000",
"000000000000001000000000",
"000000000000010000000000",
"000000000000100000000000",
"000000000001000000000000",
"000000000010000000000000",
"000000000100000000000000",
"000000001000000000000000",
"000000010000000000000000",
"000000100000000000000000",
"000001000000000000000000",
"000010000000000000000000",
"000100000000000000000000",
"001000000000000000000000",
"010000000000000000000000",
"100000000000000000000000"
};
// Function to shift data into the 74HC595 register
void shift(const char* data) {
// Start data sending
gpio_put(latchPin, 0);
gpio_put(clockPin, 0);
gpio_put(latchPin, 1);
// Load data in reverse order
for (int i = 0; i < pinCount; i++) {
gpio_put(clockPin, 0);
uint8_t val = (data[i] == '1') ? 1 : 0;
gpio_put(dataPin, val); // Check if the bit is '1'
gpio_put(clockPin, 1);
}
// Store data on register
gpio_put(latchPin, 0);
gpio_put(latchPin, 1);
}
int main() {
stdio_init_all();
// Initialize GPIO pins
gpio_init(dataPin);
gpio_init(latchPin);
gpio_init(clockPin);
// Set GPIO pin directions
gpio_set_dir(dataPin, GPIO_OUT);
gpio_set_dir(latchPin, GPIO_OUT);
gpio_set_dir(clockPin, GPIO_OUT);
int i = 0;
while (1) {
if (i == sizeof(bitStrings) / sizeof(bitStrings[0]))
i = 0;
// Call the shift function
shift(bitStrings[i]);
i++;
sleep_ms(500);
}
return 0;
}