Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>// Fuegt die Libary ein, das man den LCD Code nicht schreiben muss.
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Sagt dem LCD Code welche Pins was machen.
- #define rightRotation 10 //Definiert den Output für die rechte Richtung.
- #define leftRotation 7 //Definiert den Output für die linke Richtung.
- #define pumpIn 8 //Definiert den Output für das Aufpumpen.
- #define pumpOut 9 //Definiert den Output für das Abpumpen
- #define befuellung 6 //Defeniert den InputPin für befüllung
- #define automatic 13 //Definiert den Input für den Automatik Modus
- //Analog
- #define leftButton A0 //Definiert den Input für den manuellLinks Button
- #define rightButton A1 //Definiert den Input für den manuellRechts Button
- #define manuellPumpOut A2 //Definiert den Input für den manuellAufpumpen Button
- #define manuellPumpIn A3 //Definiert den Input für den manuellAufpumpen Button
- #define startButton A4 //Defeniert den Input für den Start Button
- #define pressure A5 //Definiert den analogen Input für den Druck
- #define programm_button A6 //Programm Taster
- #define round_sensor A7 //Umrndungssensor
- //Alle anderen Variablen
- String mode = ""; //String für den Modus
- int Schritt = 0;
- const int numReadings = 10; //Anzahl der Zählung beim druck ein lessen
- int readings[numReadings]; // Ein Array mit den lesungen.
- int readIndex = 0; // nummer der derzeitigen Lesung.
- const String startSentence1 = " Traubenpresse"; // Start Zeile auf dem LCD Display, nicht änderbar im Code auser in dieser Zeile
- const String startSentence2 = " made by HTL 16"; // ---//---
- unsigned long current = 0; //Zeit Variable
- unsigned long lastTime = 0; //Zeit zum vergleichen
- unsigned long lastDisplay = 0; //---//---
- long updateInt = 250; //Intervall für das Display
- int total = 0;
- int druckinmv = 0;
- int druck = 0;
- boolean sx = false;
- boolean sy = false;
- boolean sz = false;
- boolean sVB = false;
- boolean sB = false;
- boolean pBB = false;
- String row1 = "";
- String row2 = "";
- //Druck
- //analoge werte
- int stB = 0;
- int maPIB = 0;
- int maPOB = 0;
- int uS = 0;
- int pB = 0;
- //Programmwerte
- int programm = 0;
- int programm_anzahl = 4;
- boolean programm_ready = false;
- int real_program_druch = 0;
- int real_count = 0;
- boolean real_count_b = false;
- //Erste mal Absaugen
- int dru = -30;
- int umd = 7;
- //Inprogramm Werte
- int durchgaenge = 0;
- int auf_druck[20];
- int hold_druck[20];
- int ab_druck[20];
- int umdrehungen[20];;
- //Pfeil erstellen.
- byte Arrow[8] = {
- 0b00000,
- 0b00100,
- 0b00110,
- 0b11111,
- 0b11111,
- 0b00110,
- 0b00100,
- 0b00000
- };
- void setup() {
- //Hier ist das vorbereiten des druckzählers!
- //ENDE
- //ANFANG LCD DISPLAY
- lcd.begin(16, 2);
- lcd.createChar(0, Arrow);
- //ENDE
- //ANFANG PINMODE
- pinMode(rightRotation, OUTPUT);
- pinMode(leftRotation, OUTPUT);
- pinMode(pumpIn, OUTPUT);
- pinMode(pumpOut, OUTPUT);
- pinMode(pressure, INPUT);
- pinMode(automatic, INPUT);
- pinMode(rightButton, INPUT);
- pinMode(leftButton, INPUT);
- pinMode(befuellung, INPUT);
- pinMode(startButton, INPUT);
- pinMode(manuellPumpIn, INPUT);
- pinMode(manuellPumpOut, INPUT);
- pinMode(programm_button, INPUT);
- pinMode(round_sensor, INPUT);
- //Programm Taster
- //ENDE
- //ANFANG LCDSIPLAY ANZEIGEN
- lcd.print(startSentence1);
- lcd.setCursor(0, 1);
- lcd.print(startSentence2);
- lcd.setCursor(0, 0);
- delay(5000);
- lcd.clear();
- //ENDE
- }
- void loop() {
- //ZEIT SEIT DEM STARTEN
- current = millis();
- //ENDE
- //----- Analog Daten einlesen ----
- for (int i = 0; i < numReadings; i++) { //Schleife geht 0 - numReadings durch
- if (i == 9) {
- readings[9] = analogRead(pressure); //Wenn man beim letzten angekommen ist lest er die daten ein
- } else {
- readings[i] = readings[i + 1]; //Setzt ein Teil des Arrays mit dem Wert des vorherigen
- }
- }
- for (int i = 0; i < numReadings; i++) { //Zählt alle Readings zusammen
- total = total + readings[i]; //Addiert alle Werte an einander.
- }
- druckinmv = (total / numReadings); //Rechnet den mittelwert aus und nutzt den angleichungsfaktor :
- druck = (map(druckinmv, 122, 1023, -100, 1000));
- delay(2); //Sicherheitshalber ;)
- //ENDE
- //VARIABLEN DER ANALOGENPINS EINLESEN
- stB = analogRead(startButton);
- maPIB = analogRead(manuellPumpIn);
- maPOB = analogRead(manuellPumpOut);
- uS = analogRead(round_sensor);
- pB = analogRead(programm_button);
- //ENDE
- //----- Mode wechseln ----
- if (digitalRead(automatic) == HIGH) { //ABFRAGEN OB AUTOMATIC ISTT
- mode = "A";
- if (sx == false) {
- sx = true;
- reset();
- sy = false;
- sz = false;
- }
- } else if (digitalRead(befuellung) == HIGH) { //ABFRAGEN OB BEFüLLUNG ISTT
- mode = "B";
- if (sy == false) {
- sy = true;
- reset();
- sx = false;
- sz = false;
- }
- } else if (digitalRead(automatic) == LOW && digitalRead(befuellung) == LOW) { //ABFRAGEN OB MANUELL ISTT
- mode = "M";
- row1 = "Manueller Modus";
- row2 = " ";
- if (sz == false) {
- sz = true;
- reset();
- sx = false;
- sy = false;
- }
- }
- //------- Ende -------------
- //MODUS VORBEREITEN UND AUSFüHRUNG
- //MODUS MANUELL
- if (mode == "M") {
- programm = true;
- //red B. maPIB|white B. maPOB
- if (maPIB >= 1000) {
- row2 = "Aufpumpen";
- }
- if (maPOB >= 1000) {
- row2 = "Abpumpen";
- }
- if (digitalRead(rightButton) == HIGH) {
- row2 = "Rechtsdrehung";
- }
- if (digitalRead(leftButton) == HIGH) {
- row2 = "Linksdrehung";
- }
- if (stB >= 1000) {
- if (digitalRead(rightButton) == HIGH) {
- digitalWrite(leftRotation, LOW);
- digitalWrite(rightRotation, HIGH);
- row2 = "Rechtsdrehung";
- } else if (digitalRead(leftButton) == HIGH) {
- digitalWrite(rightRotation, LOW);
- digitalWrite(leftRotation, HIGH);
- row2 = "Linksdrehung";
- } else if (maPIB >= 1000) {
- digitalWrite(pumpOut, LOW);
- digitalWrite(pumpIn, HIGH);
- row2 = "Aufpumpen";
- } else if (maPOB >= 1000) {
- digitalWrite(pumpIn, LOW);
- digitalWrite(pumpOut, HIGH);
- row2 = "Abpumpen";
- } else {
- row2 = "";
- }
- } else {
- digitalWrite(pumpIn, LOW);
- digitalWrite(rightRotation, LOW);
- digitalWrite(leftRotation, LOW);
- digitalWrite(pumpOut, LOW);
- }
- }
- //ENDE
- //ANFANG BEFüLLUNG
- if (mode == "B") {
- programm = true;
- if (stB >= 1000) {
- row1 = "Fuellmodus";
- row2 = "Rechtsdrehend";
- digitalWrite(rightRotation, HIGH);
- sVB = false;
- }
- if (sVB == true) {
- row1 = "Fuellmodus";
- row2 = "Stillstand";
- digitalWrite(rightRotation, LOW);
- }
- }
- //ENDE
- //ANFANG AUTOMATIC
- if (mode == "A") {
- //Programm wahl
- if (Schritt == 0) {
- if (pB >= 1000 && pBB == false) {
- programm++;
- pBB = true;
- } else {
- pBB = false;
- }
- if (stB >= 1000) {
- programm = true;
- setProgramm();
- Schritt = 999;
- digitalWrite(pumpOut, HIGH);
- sB = true;
- } else {
- sB = false;
- programm = false;
- }
- row1 = " Programm " + programm;
- if (programm >= programm_anzahl) {
- row2 = " Programm 1";
- } else {
- row2 = " Programm " + programm + 1;
- }
- } else if (Schritt == 999) {
- row1 = "Vorzyklus!";
- row2 = "Abpumpen " + String(druck) + "KPa";
- if (druck <= dru) {
- digitalWrite(pumpOut, LOW);
- digitalWrite(leftRotation, HIGH);
- Schritt == 1000;
- }
- } else if (Schritt == 1000) {
- row1 = "Vorzyklus!";
- row2 = "Umdrehungen - " + real_count;
- if (uS >= 1000 && real_count_b == false) {
- real_count++;
- real_count_b == true;
- } else {
- real_count_b == false;
- }
- if (real_count > umd) {
- digitalWrite(leftRotation, LOW);
- real_count = 0;
- Schritt == 1001;
- }
- } else if ( Schritt == 1001) {
- Schritt == 1;
- real_program_druch = 1;
- }
- if (Schritt == 1 + (4 * real_program_druch)) {
- int d = auf_druck[real_program_druch - 1];
- if (d > 0) {
- digitalWrite(pumpIn, HIGH);
- row1 = real_program_druch + "DG. Aufpumpen";
- row2 = String(druck) + "kPa > " + String(d) + "kPa";
- if (druck > d) {
- digitalWrite(pumpOut, LOW);
- Schritt++;
- lastTime = current;
- }
- } else {
- digitalWrite(pumpOut, HIGH);
- row1 = real_program_druch + "DG. Abpumpen";
- row2 = String(druck) + "kPa < " + String(d) + "kPa";
- if (druck < d) {
- digitalWrite(pumpOut, LOW);
- Schritt++;
- lastTime = current;
- }
- }
- }
- if (Schritt == 2 + (4 * real_program_druch)) {
- int z = hold_druck[real_program_druch - 1];
- row1 = real_program_druch + "DG. Halten";
- row2 = ((current - lastTime) / 1000) + " > " + z;
- if (current - lastTime >= (z * 1000)) {
- Schritt++;
- }
- }
- if (Schritt == 3 + (4 * real_program_druch)) {
- int d = ab_druck[real_program_druch - 1];
- if (d > 0) {
- digitalWrite(pumpIn, HIGH);
- row1 = real_program_druch + "DG. Aufpumpen";
- row2 = String(druck) + "kPa > " + String(d) + "kPa";
- if (druck > d) {
- digitalWrite(pumpOut, LOW);
- Schritt++;
- }
- } else {
- digitalWrite(pumpOut, HIGH);
- row1 = real_program_druch + "DG. Abpumpen";
- row2 = String(druck) + "kPa < " + String(d) + "kPa";
- if (druck < d) {
- digitalWrite(pumpOut, LOW);
- Schritt++;
- }
- }
- }
- if ( Schritt == 4 + (4 * real_program_druch)) {
- row1 = real_program_druch + "DG. Drehn";
- row2 = real_count + " - " + umd;
- if (uS >= 1000 && real_count_b == false) {
- real_count++;
- real_count_b == true;
- } else {
- real_count_b == false;
- }
- if (real_count > umd) {
- digitalWrite(leftRotation, LOW);
- Schritt++;
- real_program_druch++;
- if (real_program_druch > durchgaenge) {
- Schritt == 777;
- }
- }
- }
- if (Schritt == 777) {
- digitalWrite(pumpIn, LOW);
- digitalWrite(rightRotation, LOW);
- digitalWrite(leftRotation, LOW);
- digitalWrite(pumpOut, LOW);
- row1 = "Fertig!";
- row2 = "Ausleeren";
- }
- }
- // Schritte des Automatischen Modus
- //row1 & row2 sind die Variablen die man verändert, diese werden dann jedes mal beim Disdaply angezeigt. :)
- // Ende
- //--------- Display Update ------------------
- if (current - lastDisplay >= updateInt) { //Zeit immer wenn die Zeit abgelaufen ist.
- if (programm_ready) {
- lcd.clear(); //Löscht das LCD Display
- lcd.setCursor(0, 0); //Setzt den Cursor auf 1 Reihe 1 Zeichen
- lcd.print(row1); //Schreibt die erste Reihe
- lcd.setCursor(0, 1); //Setzt den Cursor auf 2 Reihe 1 Zeichen
- lcd.print(row2); //Schreibt die Zweite Reihe
- lastDisplay = current; //Setzt die Variable für die Zeit schaltung.
- } else {
- lcd.clear(); //Löscht das LCD Display
- lcd.setCursor(0, 0); //Setzt den Cursor auf 1 Reihe 1 Zeichen
- lcd.write((byte)0);
- lcd.print(row1); //Schreibt die erste Reihe
- lcd.setCursor(0, 1); //Setzt den Cursor auf 2 Reihe 1 Zeichen
- lcd.print(row2); //Schreibt die Zweite Reihe
- lastDisplay = current; //Setzt die Variable für die Zeit schaltung.
- }
- }
- //---------- Ende ---------------
- }
- void reset() {
- //RESETTET ALLES :)
- sB = false;
- sVB = true;
- Schritt = 1;
- }
- void setProgramm() {
- /*
- dru = <>; //Druck erstes mal
- umd = <>; //Umdrehungen erstes mal
- durchgaenge = <>; Anzahl der durchgaenge
- auf_druck = <>; //Druck beim aufpumpen bitte ein array mit den Zahlen für jeden Druchgang
- hold_druck = <>0; //Zeit zum halten des Drucks bitte ein array mit den Zahlen für jeden Druchgang
- ab_druck = <>; //ABpumpdruck bitte ein array mit den Zahlen für jeden Druchgang
- umdrehungen = <>; //Umdrehenung bitte ein array mit den Zahlen für jeden Druchgang
- Beispiel:
- dru = -30;
- umd = 7;
- durchgaenge = 5;
- int auf_druck_x[] = {20,20,60,60,120};
- int hold_druck_x[] = {150,150,150,150,240};
- int ab_druck_x[] = {-30,-30,-30,-30,-30};
- for(int i = 0; i < durchgaenge; i++){
- auf_druck[i] = auf_druck_x[i];
- hold_druck[i] = hold_druck_x[i];
- ab_druck[i] = ab_druck_x[i];
- }
- */
- //Programm 1
- if (programm == 1) {
- dru = -30;
- umd = 7;
- durchgaenge = 5;
- int auf_druck_x[] = {20, 20, 60, 60, 120};
- int hold_druck_x[] = {150, 150, 150, 150, 240};
- int ab_druck_x[] = { -30, -30, -30, -30, -30};
- for (int i = 0; i < durchgaenge; i++) {
- auf_druck[i] = auf_druck_x[i];
- hold_druck[i] = hold_druck_x[i];
- ab_druck[i] = ab_druck_x[i];
- }
- }
- //Programm 2
- //Programm 3
- //Programm 4
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement