#include <SPI.h>
const int loadPin = 5; // Connect to MAX6921 LOAD
const int blankPin = 19; // Connect to MAX6921 LOAD
const int clkPin = 18; // Your chosen Clock pin
const int dataPin = 23; // Your chosen Data (MOSI) pin
const int noPin = -1;
#include <Arduino.h>
// ESP32 GPIO pins
#define PIN_DIN 23
#define PIN_CLK 22
#define PIN_LOAD 18
#define PIN_BLANK 5
// MAX6921: 20 outputs
// OUT0–7 = segments A–DP
// OUT8–16 = GRID1–9
const int NUM_DIGITS = 9;
const int NUM_SEGMENTS = 8; // A,B,C,D,E,F,G,DP
// Segment patterns: bit = segment A–DP
// For walking each segment one at a time
uint32_t segmentMask[NUM_SEGMENTS] = {
1UL << 9, // Segment A
1UL << 8, // Segment B
1UL << 7, // Segment C
1UL << 6, // Segment D
1UL << 5, // Segment E
1UL << 4, // Segment F
1UL << 3, // Segment G
1UL << 2 // Segment DP
};
uint32_t gridMask[NUM_DIGITS] = {
1UL << 19, // Grid 1
1UL << 18, // Grid 2
1UL << 17, // Grid 3
1UL << 16, // Grid 4
1UL << 15, // Grid 5
1UL << 14, // Grid 6
1UL << 13, // Grid 7
1UL << 12, // Grid 8
1UL << 11 // Grid 9
};
void setup() {
pinMode(PIN_DIN, OUTPUT);
pinMode(PIN_CLK, OUTPUT);
pinMode(PIN_LOAD, OUTPUT);
pinMode(PIN_BLANK, OUTPUT);
digitalWrite(PIN_LOAD, LOW);
digitalWrite(PIN_CLK, LOW);
digitalWrite(PIN_DIN, LOW);
digitalWrite(PIN_BLANK, LOW);
}
// Shift out 20 bits (MSB first)
void shiftOut20(uint32_t value) {
for (int i = 19; i >= 0; i--) {
digitalWrite(PIN_CLK, LOW);
digitalWrite(PIN_DIN, (value & (1UL << i)) ? HIGH : LOW);
digitalWrite(PIN_CLK, HIGH);
}
}
void loop() {
// Walk all digits & segments
for (int d = 0; d < NUM_DIGITS; d++) {
for (int s = 0; s < NUM_SEGMENTS; s++) {
uint32_t val = gridMask[d] | segmentMask[s];
digitalWrite(PIN_BLANK, HIGH);
digitalWrite(PIN_LOAD, LOW);
shiftOut20(val);
digitalWrite(PIN_LOAD, HIGH); // latch
digitalWrite(PIN_BLANK, LOW);
delay(20); // 5 Hz
}
}
}