1 | int JalEA1 = 30; // Jalousie 1 Relais Ein/Aus an Pin 30
|
2 | int JalR1 = 31; // Jalousie 1 Relais Richtung an Pin 31
|
3 | unsigned long previousMillisAuf1 = 0; // Startwert für Jalousie 1 Auffahren
|
4 | unsigned long previousMillisZu1 = 0; // Startwert für Jalousie 1 Zufahren
|
5 | unsigned long MaxJal1 = 30000; // Maximale Laufzeit Jalousie 1
|
6 | unsigned long IstJal1M = 0; // Merker Ist-Wert
|
7 | boolean Jal1Auf = false; // Jalousie 1 auffahren
|
8 | boolean Jal1Zu = false; // Jalousie 1 zufahren
|
9 | boolean Timer1An = false; // Status, ob Zeit für Jalousie 1 berechnet wird
|
10 | unsigned long SollJal1 (20000); // Sollwert Jalousie 1 (NUR ZUM TESTEN AUF 20000 GESETZT)
|
11 | unsigned long IstJal1 (0); // Istwert Jalousie 1
|
12 |
|
13 | void setup()
|
14 | {
|
15 | Serial.begin(9600);
|
16 | pinMode(JalEA1, OUTPUT); // Relais als Ausgänge deklarieren
|
17 | pinMode(JalR1, OUTPUT); // Relais als Ausgänge deklarieren
|
18 | digitalWrite (JalEA1, HIGH);
|
19 | digitalWrite (JalR1, HIGH);
|
20 |
|
21 | }
|
22 |
|
23 | void loop()
|
24 | {
|
25 | unsigned long currentMillisJal = millis(); // Millis für Jalousie
|
26 |
|
27 | if (SollJal1 < IstJal1) // Auffahren wenn Soll kleiner als Ist ist
|
28 | {
|
29 | Jal1Auf = true;
|
30 | Jal1Zu = false;
|
31 | //Serial.println("Auffahren gesetzt"); //Nur zum Testen
|
32 | }
|
33 |
|
34 | else if (IstJal1 < SollJal1) // Zufahren wenn Soll größer als Ist ist
|
35 | {
|
36 | Jal1Auf = false;
|
37 | Jal1Zu = true;
|
38 | //Serial.println("Zufahren gesetzt"); //Nur zum Testen
|
39 | }
|
40 |
|
41 | if (Jal1Auf == true && Jal1Zu == false) // Auffahren
|
42 | {
|
43 | digitalWrite (JalEA1, LOW); // Relais Schalten
|
44 | digitalWrite (JalR1, HIGH);
|
45 |
|
46 | if (Timer1An == false) // Startzeit Speichern
|
47 | {
|
48 | previousMillisAuf1 = currentMillisJal;
|
49 | Timer1An = true;
|
50 | Serial.println("previousMillisAuf1 gesetzt"); //Nur zum Testen
|
51 | }
|
52 | IstJal1M = IstJal1; // Merker IstZeit setzen
|
53 | IstJal1 = IstJal1M - currentMillisJal - previousMillisAuf1; // IstZeit berechnen
|
54 |
|
55 |
|
56 | if (IstJal1 < SollJal1) // Falls Istzeit kleiner als Sollzeit wird, wird die IstZeit gleichgesetzt wie die SollZeit
|
57 | {
|
58 | Jal1Auf = false;
|
59 | IstJal1 = SollJal1;
|
60 | }
|
61 |
|
62 | if (IstJal1 < 0 || IstJal1 > 100000) // Es trat oft ein >Fehler auf, wo IstJal1 auf einen sehr großen Wert gesetzt wurde. Hiermit wird dem entegen gewirkt
|
63 | {
|
64 | IstJal1 = 0;
|
65 | Jal1Auf = false;
|
66 | }
|
67 |
|
68 | Serial.println("Auffahren"); //Nur zum Testen
|
69 | Serial.print("Soll: "); //Nur zum Testen
|
70 | Serial.println(SollJal1); //Nur zum Testen
|
71 | Serial.print("Ist: "); //Nur zum Testen
|
72 | Serial.println(IstJal1); //Nur zum Testen
|
73 | }
|
74 |
|
75 |
|
76 | if (Jal1Zu == true && Jal1Auf == false)
|
77 | {
|
78 | digitalWrite (JalEA1, LOW);
|
79 | digitalWrite (JalR1, LOW);
|
80 |
|
81 | if (Timer1An == false)
|
82 | {
|
83 | previousMillisZu1 = currentMillisJal;
|
84 | Timer1An = true;
|
85 | Serial.println("previousMillisZu1 gesetzt"); //Nur zum Testen
|
86 | }
|
87 | IstJal1M = IstJal1;
|
88 | IstJal1 = IstJal1M + currentMillisJal - previousMillisZu1;
|
89 |
|
90 | if (SollJal1 < IstJal1)
|
91 | {
|
92 | Jal1Zu = false;
|
93 | IstJal1 = SollJal1;
|
94 | }
|
95 |
|
96 | Serial.println("Zufahren"); //Nur zum Testen
|
97 | Serial.print("Soll: "); //Nur zum Testen
|
98 | Serial.println(SollJal1); //Nur zum Testen
|
99 | Serial.print("Ist: "); //Nur zum Testen
|
100 | Serial.println(IstJal1); //Nur zum Testen
|
101 | }
|
102 |
|
103 | if (Jal1Zu == false && Jal1Auf == false)
|
104 | {
|
105 | digitalWrite (JalEA1, HIGH);
|
106 | digitalWrite (JalR1, HIGH);
|
107 | if (Timer1An) //Nur zum Testen
|
108 | { //Nur zum Testen
|
109 | Serial.println("STOP"); //Nur zum Testen
|
110 | } //Nur zum Testen
|
111 | Timer1An = false;
|
112 |
|
113 | }
|
114 | delay(1);
|
115 | }
|