Problemen met limietschakelaar

Arduino specifieke Software
Berichten: 3
Geregistreerd: 31 Mei 2022, 16:28

Problemen met limietschakelaar

Berichtdoor arduino prutser » 18 Jul 2022, 22:31

Goedenavond.
Ik ben al een tijdje bezig om ons kippenhok automatisch open en dicht te laten gaan. Hiervoor gebruik ik de ds3231 module om het deurtje zelf open en dicht te laten gaan, en i
Code: Alles selecteren
[code][/code]
k heb een app gemaakt om handmatig in te grijpen.
Nu heb ik een limietschakelaar geinstalleerd, en zodra het deurtje tegen het schakelaartje aan komt zou de Arduino moeten stoppen.
Ik heb mijn code toegevoegd. Helaas doet de Arduino niet wat ik wil. In de code komt de regel if (currentLine.endsWith("GET /L") && limitSwitch.isReleased()) { voor. Hiermee wil ik graag dat het deurtje dicht gaat als /l achter het ip-adres in de adresbalk wordt ingevoerd, en het limietschakelaartje niet ingedrukt is. Dit werkt niet, want als ik de het gedeelte && limitSwitch.isReleased() weg laat, doet het deurtje het prima.
Kan iemand mij op weg helpen. De limietschakelaar is aangesloten op pin 6, en ik gebruik de ezbutton library. Ik heb ook aan het begin van de void loop de regel limitSwitch.loop(); genoemd.

Sorry voor het lange verhaal, maar ik hoop dat iemand mij op weg kan helpen.

Fijne avond,
Groeten Marien.



Code: Alles selecteren
#include <ezButton.h>
#include <SPI.h>
#include <WiFiNINA.h>
#include <Dusk2Dawn.h>
#include <Wire.h>
#include "RTClib.h"


char ssid[] = "xxxxxxxxxxxxxx";
char pass[] = "xxxxxxxxxxxxxx";
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);

limitSwitch.setDebounceTime(50);

server.begin();

rtc.begin();


//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, x);
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();
Serial.print("Tijd: ");
Serial.print(now.toString(tijd));
Serial.println();
Serial.print("Zonsopkomst: ");
Serial.print(zonsopkomsttijd);
Serial.println();
Serial.print("Zonsondergang: ");
Serial.print(zonsondergangtijd);
Serial.println();
Serial.print("IP Address: ");
Serial.print(ip);
Serial.println();
delay(1000);

if (currentsec >= deurdicht && currentsec <= deurdichtstop && limitSwitch.isReleased()) {
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;
}

if (currentLine.endsWith("GET /H")) {
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
analogWrite(ENB, 185);
delay(6000);
deurstatus = "open.";
client.print("<html>");
client.print("<script>");
client.print("setInterval(function(){ window.location.href = '/'; }, 2000);");
client.print("</script>");
client.print("</html>");
}

if (currentLine.endsWith("GET /L") && limitSwitch.isReleased()) {
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();
}
}
Code: Alles selecteren

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Problemen met limietschakelaar

Berichtdoor shooter » 21 Jul 2022, 16:11

zet eens haakjes om die moeilijke if constructie want er staan wat teveel voorwaarden in vrees ik
if (currentsec >= deurdicht) && (currentsec <= deurdichtstop) && (limitSwitch.isReleased())
en komt de limit switch wel met een true terug of is dat een getal of zo even ontrafelen
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten