Thank you for the helpfull answer! I will take a look at the code and hopefully understand what exactly is happening. Since it is very different from mine, I still hope to see a pattern.
I have decided that I will remove the condition that the button must be pressed for several seconds.
So I only need the function that when the button has been pressed, the void degas () function will run for three minutes while the rest of the code continues to run.
I'm happy to upload all my code here (it's a bit awkward for me, as it's certainly written in a very amateurish way):
//I2C Communication
#include <Wire.h>
//printHelpers
#include "printHelpers.h"
//Display
#include <SPI.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
//Analog Digital Converter
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads;
//Display
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//Voltage reading Channel 1
float truevoltage;
float pressure_mbar;
//Voltage reading Channel 2
float truevoltage2;
float pressure_mbar2;
//Voltage reading Channel 3
float truevoltage3;
float pressure_mbar3;
//Degas
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
unsigned long degasPreviousMillis = 0;
unsigned long buttonPreviousMillis = 0;
int buttonTime = 3; //button hold delay in seconds
int displayTime = 10; //Degas display time in seconds
int degasState = 0;
int degasCounter = 0;
// Select I2C BUS
void TCA9548A(uint8_t bus) {
Wire.beginTransmission(0x70); // TCA9548A address
Wire.write(1 << bus); // send byte to select bus
Wire.endTransmission();
}
void setup() {
{
float f;
Serial.begin(9600);
}
// Start I2C communication with the Multiplexer
Wire.begin();
//Initialise ADS1115 on bus number 2
TCA9548A(2);
ads.setGain(GAIN_TWOTHIRDS);
if (!ads.begin()) {
Serial.println("Failed to initialize ADS.");
while (1);
}
// Init OLED display on bus number 3
TCA9548A(3);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display2 on bus number 4
TCA9548A(4);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
// Clear the buffer
display.clearDisplay();
// Init OLED display3 on bus number 5
TCA9548A(5);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
// Clear the buffer
display.clearDisplay();
//Degas
pinMode(4, INPUT_PULLUP);
}
void loop() {
int16_t adc0, adc1, adc2, adc3;
float volts0, volts1, volts2, volts3;
//Read Voltage Sensor 1 (Pirani Gauge PSG-500-S)
TCA9548A(2);
adc1 = ads.readADC_SingleEnded(1);
volts1 = ads.computeVolts(adc1);
truevoltage = volts1 * 2;
pressure_mbar = pow(10, ((truevoltage - 6.143) / 1.286));
//Read Voltage Sensor 2 (Penning Gauge IKR-251)
adc2 = ads.readADC_SingleEnded(2);
volts2 = ads.computeVolts(adc3);
truevoltage2 = volts2 * 2;
pressure_mbar2 = pow(10, ((truevoltage2 - 5.5)));
//Read Voltage Sensor 3 (Pirani Gauge PCR260)
adc3 = ads.readADC_SingleEnded(3);
volts3 = ads.computeVolts(adc2);
truevoltage3 = volts3 * 2;
pressure_mbar3 = pow(10, (truevoltage3 - 5.5));
//Write Pressure 1 to Display 1(Pirani Gauge PSG-500-S)
TCA9548A(5);
//Turn Display on, only if Gauge is connected
if (digitalRead(12) == HIGH) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 8);
display.println("PSG-500-S");
display.setCursor(45, 29);
display.println("Not");
display.setCursor(12, 47);
display.println("Connected");
display.display();
}
else if (digitalRead(6) == LOW) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 5);
display.println("PSG-500-S");
display.setCursor(15, 15);
display.println("Gauge Connected");
display.setTextSize(2);
display.setCursor(52, 32);
display.println("No");
display.setCursor(35, 50);
display.println("Power");
display.display();
}
else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 50);
display.println("mbar");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 10);
display.print(sci(pressure_mbar, 2));
display.display();
}
//Write Pressure 2 to Display 2 (Penning Gauge IKR-251)
TCA9548A(3);
//If Degas Button is pressed, display "Degas" for X seconds
if (digitalRead(4) == LOW) {
degasState = 1;
Serial.println("Button Pressed");
switch (degasState) {
case 1:
degas();
break;
}}
//Turn Display on, only if Gauge is connected
else if (digitalRead(11) == HIGH) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(20, 8);
display.println("IKR-251");
display.setCursor(45, 29);
display.println("Not");
display.setCursor(12, 47);
display.println("Connected");
display.display();
}
else if (digitalRead(7) == HIGH) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(40, 5);
display.println("IKR 251");
display.setCursor(15, 15);
display.println("Gauge Connected");
display.setTextSize(2);
display.setCursor(52, 32);
display.println("No");
display.setCursor(35, 50);
display.println("Power");
display.display();
}
else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 50);
display.println("mbar");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 10);
display.print(sci(pressure_mbar2, 2));
display.display();
}
//Write Pressure 3 to Display 3 (Pirani Gauge PCR260)
TCA9548A(4);
//Turn Display on, only if Gauge is connected
if (digitalRead(10) == HIGH) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(30, 8);
display.println("PCR260");
display.setCursor(45, 29);
display.println("Not");
display.setCursor(12, 47);
display.println("Connected");
display.display();
}
else if (digitalRead(8) == LOW) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(40, 5);
display.println("PCR 260");
display.setCursor(15, 15);
display.println("Gauge Connected");
display.setTextSize(2);
display.setCursor(52, 32);
display.println("No");
display.setCursor(35, 50);
display.println("Power");
display.display();
}
else {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 50);
display.println("mbar");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 10);
display.print(sci(pressure_mbar3, 2));
display.display();
}
delay(200);
}
void degas() {
currentMillis = millis();
if (currentMillis - degasPreviousMillis <= displayTime * 1000) { //do the following for displayTime
digitalWrite (2, HIGH);
Serial.println("Degas function active");
TCA9548A(3);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(35, 5);
display.println("Degas");
display.display();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 50);
display.println("mbar");
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(15, 10);
display.print(sci(pressure_mbar2, 2));
display.display();
}
else {
degasState == 0;
degasPreviousMillis = 0;
digitalWrite (2, LOW);
Serial.println("Degas ended");
}
degasPreviousMillis = currentMillis;
}