#include #include const int adcAddr = 0x48; // ADC address const int serialBaudRate = 115200; // Serial monitor baud rate const float toggleDelay = 0.2; // Delay between toggling bits, in microseconds int main(void) { int fd; // File descriptor for I2C device uint32_t buffer[8] = {0}; // Initialize buffer array with zeroes uint8_t bitCount = 0; // Number of generated bits // Initialize WiringPi and open I2C device wiringPiSetup(); fd = wiringPiI2CSetup(adcAddr); // Print buffer values in binary format for (int i = 0; i < 8; i++) { uint32_t randomValue = 0; // Initialize random value while (bitCount < 32) { uint16_t adcValue = wiringPiI2CReadReg16(fd, 0x00); // Read ADC value uint32_t newBit = adcValue & 0x01; // Extract LSB from ADC value randomValue = (randomValue << 1) | newBit; // Add new bit to LSB bitCount++; // Increment number of generated bits delayMicroseconds(toggleDelay); // Delay } buffer[i] = randomValue; // Save random value in buffer array bitCount = 0; // Reset number of generated bits } // Print buffer values in binary format for (int i = 0; i < 8; i++) { Serial.print(formatBinary(buffer[i])); // Print generated 32-bit values in binary format } Serial.println(); // New line to separate from other outputs return 0; } String formatBinary(uint32_t number) { String binaryString = String(number, BIN); // Convert to binary string while (binaryString.length() < 32) { binaryString = "0" + binaryString; // Pad with leading zeroes } return binaryString; }