//Current setup on test-arduino. 16.06.2024 #include #include #include #include #include #define oled_Address 0x3C // Change this if your OLED has a different I2C address #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 #define ONE_WIRE_BUS1 7 // D2 pin for the first DS18B20 sensor #define ONE_WIRE_BUS2 9 // D7 pin for the second DS18B20 sensor int M3200address = 0x28; // 0x28, 0x36, or 0x46, depending on the sensor. float maxPressure = 100; // pressure in PSI for this sensor, 100, 250, 500, ... 10k. byte status; unsigned long pressureMillis = 0; const int pressureTiming = 1000; // 500ms every data acquisition // Define the OLED display Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); OneWire oneWire1(ONE_WIRE_BUS1); OneWire oneWire2(ONE_WIRE_BUS2); DallasTemperature sensors1(&oneWire1); DallasTemperature sensors2(&oneWire2); void setup() { sensors1.begin(); // Initialize the first DS18B20 sensor sensors2.begin(); // Initialize the second DS18B20 sensor Serial.begin(9600); Serial.println("M3200 initializing"); Wire.begin(); // Initialize the OLED display if (!display.begin(oled_Address)) { Serial.println("SH110X allocation failed"); for (;;); } display.display(); // Clear the display buffer delay(2000); // Pause for 2 seconds display.clearDisplay(); // Clear the display buffer } void loop() { if (millis() - pressureMillis >= pressureTiming) { pressureMillis = millis(); Wire.requestFrom(M3200address, 4); // request 4 bytes int n = Wire.available(); if (n == 4) { status = 0; uint16_t rawP; // pressure data from sensor uint16_t rawT; // temperature data from sensor rawP = (uint16_t) Wire.read(); // upper 8 bits rawP <<= 8; rawP |= (uint16_t) Wire.read(); // lower 8 bits rawT = (uint16_t) Wire.read(); // upper 8 bits rawT <<= 8; rawT |= (uint16_t) Wire.read(); // lower 8 bits status = rawP >> 14; // The status is 0, 1, 2, or 3 rawP &= 0x3FFF; // keep 14 bits, remove status bits rawT >>= 5; // the lowest 5 bits are not used float pressure = ((rawP - 1000.0) / (15000.0 - 1000.0)) * maxPressure; float temperature0 = ((rawT - 512.0) / (1075.0 - 512.0)) * 55.0; sensors1.requestTemperatures(); sensors2.requestTemperatures(); float temperature1 = sensors1.getTempCByIndex(0); // Read temperature from first DS18B20 float temperature2 = sensors2.getTempCByIndex(0); // Read temperature from second DS18B20 // Display data on OLED display.clearDisplay(); display.setTextSize(1); display.setTextColor(SH110X_WHITE); display.setCursor(0, 0); display.print("Oil Pres: "); display.print(pressure); display.print(" PSI"); display.setCursor(0, 10); display.print("Oil Temp: "); display.print(temperature0); display.println(" C"); display.setCursor(0, 40); display.print("Temp 1: "); display.print(temperature1); display.print(" C"); display.setCursor(0, 50); display.print("Temp 22: "); display.print(temperature2); display.print(" C"); display.display(); display.clearDisplay(); } else { Serial.println("M3200 Pressure Transducer not Detected"); } } }