#include #include #include #include #include #include #include #include /* Mux Adresslist: 0 Ext2 1 Ext1 2 Button 3 Sense 0 4 Sense 1 5 Sense 2 6 Sense 3 7 Pot 8 Var 9 TMP OR 10 TMP UR 11 TMP Mitte 12 TMP UL 13 TMP OL 14 Mot2 Sense 15 Mot1 Sense */ #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 #define MUX_S0 14 // A0 #define MUX_S1 8 #define MUX_S2 4 #define MUX_S3 7 #define MUX_EN 20 // A6 #define MUX_Out 21 // A7 - analogRead #define LED1 6 #define LED2 5 #define LED3 3 #define LED4 2 #define IR_LED 19 // A5 #define Door_Switch 15 // A1 #define Fan1_FWD 16 // A2 - PWM #define Fan2_FWD 17 // A3 - PWM #define SHDN 18 // A4 - shutdown current sense network bool ledState[4] = {false, false, false, false}; int potValue = 0; int previousPotValue = 0; int motorSpeed = 0; int tmpOL = 0; int tmpUL = 0; int tmpMid = 0; int tmpOR = 0; int tmpUR = 0; bool doorState = 0; bool fanState = false; bool previousFanState = false; int sensitivity = 30; int hysteresis = 5; Adafruit_SH1106G display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); MuxClient buttonInput(2, digital_read); MuxClient pot(7, analog_read); MuxClient TMPol(13, analog_read); MuxClient TMPul(12, analog_read); MuxClient TMPmid(11, analog_read); MuxClient TMPor(9, analog_read); MuxClient TMPur(10, analog_read); Button button(buttonInput); Button doorSwitch(Door_Switch); void setup() { MuxClient::setupMux(MUX_S0, MUX_S1, MUX_S2, MUX_S3, MUX_Out, MUX_EN); /* done in muxClient.cpp -> setupMux() pinMode(MUX_S0, OUTPUT); pinMode(MUX_S1, OUTPUT); pinMode(MUX_S2, OUTPUT); pinMode(MUX_S3, OUTPUT); pinMode(MUX_EN, OUTPUT); pinMode(MUX_Out, INPUT); */ pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(IR_LED, OUTPUT); pinMode(Door_Switch, INPUT_PULLUP); pinMode(Fan1_FWD, OUTPUT); pinMode(Fan2_FWD, OUTPUT); pinMode(SHDN, OUTPUT); digitalWrite(MUX_S0, LOW); digitalWrite(MUX_S1, LOW); digitalWrite(MUX_S2, LOW); digitalWrite(MUX_S3, LOW); digitalWrite(MUX_EN, LOW); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(IR_LED, LOW); digitalWrite(Fan1_FWD, LOW); digitalWrite(Fan2_FWD, LOW); digitalWrite(SHDN, HIGH); // nur zu Testzwecken digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); delay(1000); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); Serial.begin(9600); display.begin(0x3C, true); // Address 0x3C default display.clearDisplay(); display.setRotation(1); } void loop() { if (button.buttonState() == pressed) { ledState[0] = !ledState[0]; MuxClient::powerMux(false); delay(1000); MuxClient::powerMux(true); } if (doorSwitch.buttonState() == held) { doorState = true; } else { doorState = false; } potValue = pot.bufferedRead(32, 100); sensitivity = potValue; tmpOL = convertTemp(TMPol.bufferedRead(64, 1024)); tmpUL = convertTemp(TMPul.bufferedRead(64, 1024)); tmpMid = convertTemp(TMPmid.bufferedRead(64, 1024)); tmpOR = convertTemp(TMPor.bufferedRead(64, 1024)); tmpUR = convertTemp(TMPur.bufferedRead(64, 1024)); if (tmpOL > sensitivity || tmpUL > sensitivity || tmpMid > sensitivity || tmpOR > sensitivity || tmpUR > sensitivity) { fanState = true; } if (tmpOL < sensitivity - hysteresis && tmpUL < sensitivity - hysteresis && tmpMid < sensitivity - hysteresis && tmpOR < sensitivity - hysteresis && tmpUR < sensitivity - hysteresis) { fanState = false; } if (fanState != previousFanState){ digitalWrite(Fan1_FWD, fanState); digitalWrite(Fan2_FWD, fanState); previousFanState = fanState; } if (ledState[0]) { digitalWrite(LED1, HIGH); } else { digitalWrite(LED1, LOW); } if (doorState){ display.clearDisplay(); display.setTextSize(2); // chars = 10 * 14px display.setTextColor(SH110X_WHITE); display.setCursor(1,0); display.print(F("Temp:")); display.setCursor(1,60); display.print(F("Fans:")); display.setTextSize(1); // chars = 5 * 7px display.setCursor(5,23); display.print(tmpOL); display.setCursor(40,23); display.print(tmpOR); display.setCursor(20,32); display.print(tmpMid); display.setCursor(5,41); display.print(tmpUL); display.setCursor(40,41); display.print(tmpUR); display.setCursor(10,80); display.println(potValue); display.println(doorState); if (fanState){ display.println("cooling"); } display.display(); } else { display.clearDisplay(); display.display(); } } int convertTemp(int reading){ return (reading * (3300/1024) - 500)/10; }