const int DECK_SIZE = 52;
int deck[DECK_SIZE];
unsigned long generateSeed() {
unsigned long seed = 0;
for (int i = 0; i < 32; i++) {
int val = analogRead(A0); // A0 should be unconnected
seed = (seed << 1) | (val & 1); // Use least significant bit
delay(1); // allow some variation
}
return seed;
}
void setup() {
Serial.begin(9600);
randomSeed(generateSeed());
for (int i = 0; i < DECK_SIZE; i++) {
deck[i] = i;
}
for (int i = 0; i < 100; i++) {
int a = random(DECK_SIZE);
int b = random(DECK_SIZE);
int temp = deck[a];
deck[a] = deck[b];
deck[b] = temp;
}
for (int i = 0; i < DECK_SIZE; i++) {
printCard(deck[i]);
Serial.print((i + 1) % 13 == 0 ? "\n" : ", ");
}
}
void loop() {}
void printCard(int index) {
const char* suits[] = {"H", "D", "C", "S"};
const char* ranks[] = {
"A", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "J", "Q", "K"
};
Serial.print(ranks[index % 13]);
Serial.print(suits[index / 13]);
}