Goedemiddag,
Ik ben al een tijdje bezig om een de deur van het kippenhok automatisch open en dicht te laten gaan.
Ik loop nu tegen het probleem aan dat ik de microswitch niet goed werkend krijg. Ik zou graag de motor willen laten stoppen met draaien als de microswitch ingedrukt wordt.
In de code staat de volgende regel:
while (currentLine.endsWith("GET /L") && limitSwitch.getState() == LOW) {
Door deze regel wil ik graag de DC motor laten draaien als de URL eindigt op /L en als de schakelaar niet ingedrukt is. Als de schakelaar ingedrukt wordt zou deze while statement moeten stoppen, maar helaas gaat het motortje gewoon door met draaien.
Voor de microswitch gebruik ik de ezButton library. Ik heb mijn code bijgevoegd.
Weet iemand wat er fout gaat?
Een fijne dag nog!
#include <ezButton.h>
#include <SPI.h>
#include <WiFiNINA.h>
#include <Dusk2Dawn.h>
#include <Wire.h>
#include "RTClib.h"
char ssid[] = "xxxxxxxxx";
char pass[] = "xxxxxxxxx";
int status = WL_IDLE_STATUS;
WiFiSSLClient client;
WiFiServer server(80);
ezButton limitSwitch(6);
int motor1 = 7;
int motor2 = 8;
int ENB = 5;
int currentsec;
int zonsopkomst;
int zonsopkomstsec;
int zonsondergang;
int zonsondergangsec;
int deurdicht;
int deurdichtstop;
int deuropen;
int deuropenstop;
const char * deurstatus;
DateTime now;
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
server.begin();
rtc.begin();
limitSwitch.setDebounceTime(50);
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(2022, 7, 16, 22, 7 , 0));
}
void loop() {
limitSwitch.loop();
now = rtc.now();
Dusk2Dawn thuis(xx.xxxx, x.xxxx, 1);
zonsopkomst = thuis.sunrise(now.year(), now.month(), now.day(), true);
zonsopkomstsec = zonsopkomst * 60;
zonsondergang = thuis.sunset(now.year(), now.month(), now.day(), true);
zonsondergangsec = zonsondergang * 60;
currentsec = (now.hour() * 3600 + now.minute() * 60 + now.second());
deuropen = zonsopkomstsec - 900;
deuropenstop = zonsopkomstsec - 893;
deurdicht = zonsondergangsec + 900;
deurdichtstop = zonsondergangsec + 960;
char zonsopkomsttijd[6];
char zonsondergangtijd[6];
Dusk2Dawn::min2str(zonsopkomsttijd, zonsopkomst);
Dusk2Dawn::min2str(zonsondergangtijd, zonsondergang);
char tijd[] = "hh:mm";
status = WiFi.begin(ssid, pass);
IPAddress ip = WiFi.localIP();
Serial.println("Tijd: ");
Serial.println(now.toString(tijd));
Serial.println("Zonsopkomst: ");
Serial.println(zonsopkomsttijd);
Serial.println("Zonsondergang: ");
Serial.println(zonsondergangtijd);
Serial.println("IP Address: ");
Serial.println(ip);
Serial.println();
delay(1000);
if (currentsec >= deurdicht && currentsec <= deurdichtstop) {
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
analogWrite(ENB, 74);
deurstatus = "dicht.";
}
else if (currentsec >= deuropen && currentsec <= deuropenstop) {
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
analogWrite(ENB, 185);
deurstatus = "open.";
}
else {
digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
}
WiFiClient client = server.available();
if (client) {
String currentLine = "";
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n') {
if (currentLine.length() == 0) {
client.println("<html>");
client.print("<body>");
client.print("<center>");
client.print("<style>");
client.print("body{font-size: 18px;}");
client.print("</style>");
client.print("<meta http-equiv=\'refresh\' content=\'30\'>");
client.println();
client.print("Tijd: ");
client.print(tijd);
client.print("<\p>");
client.print("Zonsopkomst: ");
client.print(zonsopkomsttijd);
client.print("<\p>");
client.print("Zonsondergang: ");
client.print(zonsondergangtijd);
client.print("<\p>");
client.print("Deur is ");
client.print(deurstatus);
client.print("</center>");
client.print("</body>");
client.print("</html>");
break;
}
else {
currentLine = "";
}
}
else if (c != '\r') {
currentLine += c;
}
limitSwitch.loop();
if (currentLine.endsWith("GET /H")) {
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
analogWrite(ENB, 185);
delay(7000);
deurstatus = "open.";
client.print("<html>");
client.print("<script>");
client.print("setInterval(function(){ window.location.href = '/'; }, 2000);");
client.print("</script>");
client.print("</html>");
}
while (currentLine.endsWith("GET /L") && limitSwitch.getState() == LOW) {
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
analogWrite(ENB, 74);
deurstatus = "dicht.";
client.print("<html>");
client.print("<script>");
client.print("setInterval(function(){ window.location.href = '/'; }, 2000);");
client.print("</script>");
client.print("</html>");
}
}
}
client.stop();
}
}