/* You dont *need* a reset and EOC pin for most uses, so we set to -1 and don't connect
#define RESET_PIN -1 // set to any GPIO pin # to hard-reset on begin()
#define EOC_PIN -1 // set to any GPIO pin to read end-of-conversion by pin
*/
#include <Wire.h>
//#include <Adafruit_MPRLS.h>
#include <LiquidCrystal_I2C.h>
/******************************************************************************
*************** ********************
*************** Bitte Werte / Pinbelegung anpassen ********************
*************** ********************
******************************************************************************/
// ***
#define CLK1 9 //Pin Clock für Display ***
#define DIO1 10 // Pin Data für Display ***
int M = 50; // Anzahl Messungen um Mittelwert zu berechnen ***
int button0 = 3; // Pin vom Taster ***
int valve0 = 4; // Pin für Ventil ***
int valve0time = 5000; // Entlüftungszeit in Millisekunden
float norm0[] = { 560, 600 }; // min + max für Messwert ***
float div0 = 10; // Maximale Differenz (druckverlust) ***
// ***
/******************************************************************************
*******************************************************************************
*******************************************************************************
******************************************************************************/
float pMittel = 0; // Variable um die Messungen "M" zusammenzurechnen
float pressure_hPa = 0; // Messwert vom Sensor
float pump = 10030.56; // Wert der Messung
float measurArray[] = {0,1000.50}; // Array um Messwerte zu Speichern
int menue =2;
bool button0read = false; // Variable für Taster drücken (false oder true)
bool button0on = false; // Variable für Taster AN / Aus(false oder true)
bool button0long = false; // Wenn Taster lange gedrückt wird TRUE
bool switch0 = false; // Variable für Relais (false oder true)
bool measureOn = false; // wenn Messung läuft true
bool measurWait = false; // warten das Lilian anfängt zu pumpen (true beim warten)
bool valve0ready= false;
bool valve0on = false; // Entlüftung an
unsigned long button0millis = 0; // Taster entprellen millis auf 0
unsigned long measure0millis = 0; // Millis für den Messablauf
unsigned long valve0millis = 0; // Millis für Entlüften
unsigned long menue0millis = 0; // Millis für Entlüften
//Adafruit_MPRLS mpr = Adafruit_MPRLS();
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
lcd.begin(0x27, 20,4);
lcd.backlight();
pinMode(button0, INPUT_PULLUP); //Taster auf Pin "button0" mit Pullup Widerstand
pinMode(valve0, OUTPUT);
Serial.begin(9600);
menue0millis=millis();
/* if (!mpr.begin()) {
Serial.println("Failed to communicate with MPRLS sensor, check wiring?");
lcd.print("Kein Signal vom Sensor, bitte prüfen");
delay(10);
}
*/
}
void loop() {
printSerial();
printLCD();
button();
measurement();
vent();
}
// Taster**************************************************************************************
void button() {
button0read = !digitalRead(button0); // abfrage Taster
if (button0read == false) {
button0millis = millis();
}
// Normaler Tastendrücker
if (button0read == true && button0on == false && millis() - button0millis > 20) {
button0on = true;
}
if (button0read == false && button0on == true ) {
if (measureOn == false) {
valve0ready = true;
switch0 = !switch0;
measureOn=true;
}
button0on=false;
}
// lange gerückter Taster
if (button0read == true && button0on == true && millis() - button0millis > 1000) {
measureOn=false;
button0on = false;
switch0=false;
button0long = true;
}
}
// Messung************************************************************************************
void measurement() {
pMittel = 0; // Wert der letzten "M"-Messungen auf 0 setzen
for (int i = 0; i < M; i++) { // Schleife für "M" x Messungen vom Sensor
//pressure_hPa = mpr.readPressure(); // Wert vom Sensor wird in "pressure_hPa" gespeichert
//pMittel = (pMittel + pressure_hPa); // Sensorwerte werden "M" x in "pMittel" gespeichert
}
//pump = pMittel / M;
//Serial.print("Pressure### (hPa): ");
//Serial.println(pump);
}
// Ventiel zum Entlüften 10 Sekunden freischalten
void vent() {
if (valve0ready == false) {
valve0millis = millis();
}
if (valve0ready==true){
valve0on = true;
if (millis() - valve0millis >= valve0time) {
valve0ready=false;
valve0on = false;
}
}
if(valve0on==true){
digitalWrite(valve0, true);
}else {
digitalWrite(valve0, false);
valve0on = false;
}
}
void printSerial(){
Serial.println(
"T: "+(String)button0on+
" V:"+(String)valve0on +
" V ready: "+(String)valve0ready +
" MessenAn: "+(String)measureOn+
" v millis: "+(String)valve0millis
);
}
void printLCD (){
if(menue==0 && measureOn==false){
menue=2;
}
switch(menue){
case 1:
lcd.clear();
break;
case 2:
lcd.setCursor(0,0);
lcd.print("** Lilian Labs **");
lcd.setCursor(0,1);
lcd.print("Pumpenstick in das");
lcd.setCursor(0,2);
lcd.print("Lilian stecken und ");
lcd.setCursor(0,3);
lcd.print("Messung vorbereiten");
if(millis()-menue0millis>=2000 && measureOn== false){
lcd.clear();
menue=3;
menue0millis=millis();
}
if(measureOn == true){
menue=4;
}
break;
case 3:
lcd.setCursor(0,1);
lcd.print(" wenn fertig");
lcd.setCursor(0,2);
lcd.print(" Taste druecken");
if(millis()-menue0millis>=2000 && measureOn== false){
lcd.clear();
menue=2;
menue0millis=millis();
}
if(measureOn == true){
menue=4;
}
break;
case 4:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Messung bereit,");
lcd.setCursor(0,1);
lcd.print("Bitte Lilian starten");
lcd.setCursor(0,2);
lcd.print("Pumpwert:");
lcd.setCursor(10,2);
lcd.print(pump);
lcd.setCursor(0,3);
lcd.print("Warte aufs Lilian...");
menue=0;
break;
}
}