Arduino Waschmaschine Funscript

Wir haben hier eine einfache Waschmaschine als Darstellung vereinfachter Logik und Grundfunktionen von Programmiersprachen.

Im oberen Teil ersetzen wir uns die Pin Nummern des Compilers welche ursprünglich sogar PD0 und ähnlich heissen durch das Logische Bezugswort um damit weiterzuarbeiten.
Danach geht es schon los.. Der kleine Block oben entprellt einen taster und schaltet das Programm 1 aus und wieder ein. Wenn eingeschaltet ist bedeutet das das die Variable Running TRUE ist, True bedeutet hier auch 1 oder High. In der Switch Case Anweisung wird die Variable zustand überprüft und das programm je nach dem Wert in das CASE geführt oder auch direkt ab switch gesprungen. Wenn hier kein zustand passt wird switch und alles in seinen eckigen Klammern ausgelassen.

#include <Time.h>
//einfaches Arduino Programm als Waschmaschine 
int MotorTrommel = 5; // Motorwicklung1 Langsam
int Schleudern = 6; // Motorwicklung zusätzlich Schnell
int Wasserventil = 7;// HIGH bedeutet Wasser fliesst, LOW Wasser stop
int Pumperaus = 8; // Pinzuweisung einfacher Name
int WasserstandLeer = 9; // HIGH bedeutet hier jetzt LEER und LOW ist noch was drin (kommt sowieso auf Schliesser/Öffner bzw das gegenpotential GND oder 5V an)
int WasserstandVoll = 10; // HIGH bei Maximalen Wasserstand, unterhalb LOW
int Trommelrichtung = 11; // 0 Links, 1rechts
int KnopfProgramm1 = 12;
int Programm1Zeit[] = { 10, 10, 10 }; //Programm1 Intervalle Trommeln links/rechts
boolean running = false;
int zustand = 0; // Zeigt Ablaufzustand als Zahl, 1 Wassereinlauf fertig,2 Trommel bewegen fertig , 3 Abpumpen ,4 Schleudern/Abpumpen , 5 fertig
int zustandtrommel = 0;
boolean trommelwechsel=false;
//Einschaltzustand

void setup() {
//Pinmodes setzen ob Input oder Output
	pinMode(MotorTrommel, OUTPUT); //OUTPUT
	pinMode(Trommelrichtung, OUTPUT); //OUTPUT 1 Rechts, 0 Links
	pinMode(Schleudern, OUTPUT); //OUTPUT
	pinMode(Wasserventil, OUTPUT); //OUTPUT
	pinMode(Pumperaus, OUTPUT); //OUTPUT
	pinMode(WasserstandLeer, INPUT); //INPUT
	pinMode(WasserstandVoll, INPUT); //INPUT
	pinMode(KnopfProgramm1, INPUT); //INPUT
	digitalWrite(WasserstandLeer, LOW); //PullDown gegen flattern mit 50MEG gegen GND 
	digitalWrite(WasserstandVoll, LOW); //PullDown gegen flattern mit 50MEG gegen GND 
	digitalWrite(KnopfProgramm1, HIGH); //PullUp gegen flattern mit 50MEG gegen 5V 
}
// Bearbeitungsloop
void loop() //wird alles bis zur Prozessorfrequenz wiederholt
{
	if (digitalRead(KnopfProgramm1) == LOW) { // Schalter wird gedrückt - der Pin wird im Normalzustand durch den Pullup auf HIGH gezogen
		delay(100); // Verzögerung um den Taster zu entprellen
		running = !running; // Wert der Variablen hin- und herschalten (toggle)
		// indicate via LED - Anzeige über LED
	}
	if (running) { 
//Loslegen
		switch (zustand) {
		case 0: //bei Zustand 0 wird der "LOOP" immer hier einswitchen also Vollpumpen bis HIGH dann sofort aus und zustand 1
			if (digitalRead(WasserstandVoll) == LOW) {
				digitalWrite(Wasserventil, HIGH); //Ventil öffnen Pin setzen
			} else //Wenn voll, nicht LOW
			{
				digitalWrite(Wasserventil, LOW);
				zustand = 1;
			}
			break;
		case 1: //zustand 1 //Trommel bewegen .. 10 Minuten Links 10 minuten rechts 10 Minuten links
			 trommelwechsel = false;
			while (zustandtrommel <= sizeof(Programm1Zeit)) //in dieser Schleife bleiben solang nach Programm getrommelt wird 
			{
				digitalWrite(MotorTrommel, HIGH);
				digitalWrite(Trommelrichtung, trommelwechsel);
				delay(Programm1Zeit[zustandtrommel] * 60 * 1000); // Minuten aus Programm1Zeit holen und für Pause in millisekunden umrechnen 
				zustandtrommel++;
				trommelwechsel = !trommelwechsel;
				digitalWrite(MotorTrommel, LOW); //Trommel ausschalten für wechsel
				delay(60 * 1000); //60Sekunden warten
			}
			digitalWrite(MotorTrommel, LOW); // Trommel ausschalten
			zustand = 2; //aus switchcase springen
			break;

		case 2: //Abpumpen (Kopiert von Zustand 0, selbes Prinzip)
			if (digitalRead(WasserstandLeer) == HIGH) {
				digitalWrite(Pumperaus, HIGH); //Pumpe anschalten
			} else //Wenn leer, nicht LOW
			{
				digitalWrite(Pumperaus, LOW);
				zustand = 3;
			}
			break;
		case 3: //Schleudern 3 mal 5 Minuten mit 2 Minuten Pause und Wasserstand überprüfen

			for (int zaehler = 0; zaehler <= 3; zaehler++) {

				digitalWrite(Pumperaus, LOW);

				delay(2 * 60 * 1000); //120 Sekunden warten ggf Pumpen
				digitalWrite(Schleudern, HIGH);
				digitalWrite(MotorTrommel, HIGH);
				delay(5 * 60 * 1000);
				digitalWrite(MotorTrommel, LOW);
				digitalWrite(Schleudern, LOW);
				while (digitalRead(WasserstandLeer) == HIGH) //Schleife bis leer
				{
					digitalWrite(Pumperaus, HIGH); //Pumpe anschalten
				}
				digitalWrite(Pumperaus, LOW);
			}
			zustand = 4;
			break;
			//fertig!!!!!!!!

		}
	

}}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Denkhilfe *

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.