#include #include #include #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define SCREEN_ADDRESS 0x3C // --- MUX CONTROL PINS --- const int S0 = 0; const int S1 = 1; const int S2 = 2; const int S3 = 3; const int SIG_PIN = 26; // MUX1 (A0) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Wire.setSDA(6); Wire.setSCL(7); Wire.begin(); pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); analogReadResolution(10); // Standard 10-bit range (0-1023) if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) for(;;); display.clearDisplay(); display.setTextColor(SSD1306_WHITE); } void loop() { // Select J1 (Channel 0) digitalWrite(S0, LOW); digitalWrite(S1, LOW); digitalWrite(S2, LOW); digitalWrite(S3, LOW); delay(10); int raw = analogRead(SIG_PIN); // Convert raw value to Voltage // Formula: (Raw Value / 1023.0) * 3.3 Volts float voltage = (raw / 1023.0) * 3.3; display.clearDisplay(); // Header display.setTextSize(1); display.setCursor(0, 0); display.println("VOLTMETER MODE (J1)"); display.println("---------------------"); // Display Voltage display.setCursor(0, 25); display.setTextSize(2); display.print(voltage, 2); // Show 2 decimal places display.println(" V"); // Display Raw for comparison display.setTextSize(1); display.setCursor(0, 50); display.print("Raw ADC: "); display.print(raw); // Visual Level Bar int barWidth = map(raw, 0, 1023, 0, 60); display.drawRect(65, 50, 60, 8, SSD1306_WHITE); display.fillRect(65, 50, barWidth, 8, SSD1306_WHITE); display.display(); delay(100); }