Sorry das ist ja Adroino C/++ da wie in Java Stringvergleich mit "equels" nicht "=="
hatte es nicht getestet nur im Editor geschrieben.
Es ist nun perfekt. Vielen Dank dafür, Du hast mich glücklich gemacht.
Beiträge von Haitu
-
-
...
Eine gegenseitige Verrieglung der Ausgänge.
Dies kannst du natürlich auf der Webseite im HTML Code auch machen.
Ich habe Deinen Vorschlag übernommen.
Leider sieht es nun so aus , dass die beiden Pins "Hochfahren" Pin 2 und "Runterfahren" Pin 3 sich über den Server nicht mehr schalten lassen.
Der Serial Monitor zeigt, dass die Signale zwar einwandfrei verarbeitet werden, aber die beiden Buttons "Hochfahren" Pin 2 und "Runterfahren" Pin 3 bleiben im "AN" Zustand und werden nicht auf HIGH gesetzt. Die beiden anderen ohne "Kurzschlusssicherung" funktionieren einwandfrei.
Das Protokoll vom Serial Monitor:
New Client.
GET /4/an HTTP/1.1
Host: 192.168.178.32
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.178.32/
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Pass 4 an
Client disconnected.
Der Button für die Entsperrung schaltet beim Klick auf "An" einwandfrei auf "Aus" um.
New Client.
GET /4/aus HTTP/1.1
Host: 192.168.178.32
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.178.32/4/an
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Pass 4 aus
Client disconnected.
Und nun der Button zum "Hochfahren" Pin 2
New Client.
GET /2/an HTTP/1.1
Host: 192.168.178.32
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.178.32/4/aus
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Hochfahren 2 an
Client disconnected.
Der Button zum Hochfahren bleibt auf "An" und schaltet nicht auf "Aus" um.
New Client.
GET /2/an HTTP/1.1
Host: 192.168.178.32
Connection: keep-alive
Upgrade-Insecure-Requests: 1
DNT: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.57
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.178.32/2/an
Accept-Encoding: gzip, deflate
Accept-Language: de,de-DE;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Hochfahren 2 an
Client disconnected.
Und hier auch noch das Teilstück vom Code:
Code
Alles anzeigen//... // Anzeige des Status und die EIN/AUS-Tasten für "Hochfahren 2" client.println("<p>Hochfahren 2 " + output2State + "</p>"); // Wenn der Ausgang „output2State“ ausgeschaltet ist und der andere Pin auf LOW ist, wird die Schaltfläche „ON“ angezeigt if (output2State == "aus" && digitalRead(output3) == LOW) { client.println("<p><a href=\"/2/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/2/aus\"><button class=\"button button2\">AUS</button></a></p>"); } // Anzeige des Status und die EIN/AUS-Tasten für "Runterfahren 3" client.println("<p>Runterfahren 3 " + output3State + "</p>"); // Wenn der Ausgang „output3State“ ausgeschaltet ist und der andere Pin auf LOW ist, wird die Schaltfläche „ON“ angezeigt if (output3State == "aus" && digitalRead(output2) == LOW) { client.println("<p><a href=\"/3/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/3/aus\"><button class=\"button button2\">AUS</button></a></p>"); } //...
Ich kann keinen Fehler finden und weiß in dieser Sache dann auch nicht mehr weiter.
-
Ich habe den Code soweit zusammen und er läuft.
Der Rechts- Linkslauf des Motors ist mit einer H-Brücke realisiert und auch das funktioniert.
Was aufgefallen ist und wofür ich noch keine Lösung gefunden habe: Kurzschluss?
Was kann ich in den Code einfügen, damit das nicht passieren kann?
C
Alles anzeigen// Motorsteuerung im Stall // Laden der WLAN-Bibliothek #include <WiFi.h> // Netzwerkanmeldeinformationen const char* ssid = "*****************"; const char* password = "*************"; // Die Portnummer des Webservers auf 80 einstellen WiFiServer server(80); // Variable zum Speichern der HTTP-Anfrage String header; // Hilfsvariablen zum Speichern des aktuellen Ausgangszustands String output2State = "aus"; String output3State = "aus"; String output4State = "aus"; String output5State = "aus"; // Ausgangsvariablen den Pins zuweisen const int output2 = 2; const int output3 = 3; const int output4 = 4; const int output5 = 5; // Aktuelle Uhrzeit unsigned long currentTime = millis(); // Vorherige Zeit unsigned long previousTime = 0; // Definieren der Timeout-Zeit in Millisekunden (Beispiel: 2000 ms = 2 s) const long timeoutTime = 2000; void setup() { Serial.begin(115200); // Initialisierung der Ausgabevariablen als Ausgaben pinMode(output2, OUTPUT); pinMode(output3, OUTPUT); pinMode(output4, OUTPUT); pinMode(output5, OUTPUT); // Ausgänge auf LOW setzen digitalWrite(output2, LOW); digitalWrite(output3, LOW); digitalWrite(output4, LOW); digitalWrite(output5, LOW); // Mit SSID und Passwort eine Verbindung zum Wi-Fi-Netzwerk herstellen Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Die lokale IP-Adresse ausdrucken und starten des Webservers Serial.println(""); Serial.println("WiFi connected."); Serial.println("IP address: "); Serial.println(WiFi.localIP()); server.begin(); } void loop() { WiFiClient client = server.available(); // Achten auf eingehende Kunden if (client) { // Wenn sich ein neuer Client verbindet, currentTime = millis(); previousTime = currentTime; Serial.println("New Client."); // Druckt eine Nachricht über die serielle Schnittstelle aus String currentLine = ""; // String erstellen, um eingehende Daten vom Client zu speichern while (client.connected() && currentTime - previousTime <= timeoutTime) { // Schleife, während der Client verbunden ist currentTime = millis(); if (client.available()) { // Wenn vom Client Bytes gelesen werden müssen, char c = client.read(); // dann lies ein Byte Serial.write(c); // drucke es auf dem seriellen Monitor aus header += c; if (c == '\n') { // Wenn das Byte ein Zeilenumbruchzeichen ist // Wenn die aktuelle Zeile leer ist, stehen zwei Zeilenumbruchzeichen hintereinander. // Das ist das Ende der Client-HTTP-Anfrage, eine Antwort wird gesendet: if (currentLine.length() == 0) { // HTTP-Header beginnen immer mit einem Antwortcode (z. B. HTTP/1.1 200 OK) // und einem Inhaltstyp, damit der Client weiß, was kommt, dann eine Leerzeile: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // schaltet die Pins ein und aus if (header.indexOf("GET /2/an") >= 0) { Serial.println("Hochfahren 2 an"); output2State = "an"; digitalWrite(output2, HIGH); } else if (header.indexOf("GET /2/aus") >= 0) { Serial.println("Hochfahren 2 aus"); output2State = "aus"; digitalWrite(output2, LOW); } else if (header.indexOf("GET /3/an") >= 0) { Serial.println("Runterfahren 3 an"); output3State = "an"; digitalWrite(output3, HIGH); } else if (header.indexOf("GET /3/aus") >= 0) { Serial.println("Runterfahren 3 aus"); output3State = "aus"; digitalWrite(output3, LOW); } else if (header.indexOf("GET /4/an") >= 0) { Serial.println("Pass 4 an"); output4State = "an"; digitalWrite(output4, HIGH); } else if (header.indexOf("GET /4/aus") >= 0) { Serial.println("Pass 4 aus"); output4State = "aus"; digitalWrite(output4, LOW); }else if (header.indexOf("GET /5/an") >= 0) { Serial.println("Pass 5 an"); output5State = "an"; digitalWrite(output5, HIGH); } else if (header.indexOf("GET /5/aus") >= 0) { Serial.println("Pass 5 aus"); output5State = "aus"; digitalWrite(output5, LOW);} // Zeigt die HTML-Webseite an client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS zum Gestalten der Ein-/Aus-Schaltflächen // Die Attribute „Hintergrundfarbe“ und „Schriftgröße“ kann jederzeit nach Wunschen geändert werdem client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 2.5px 40px;"); client.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #555555;}</style></head>"); // Überschrift der Webseite client.println("<body><h1>Stallkamera</h1>"); // Anzeige des aktuellen Status und EIN/AUS-Tasten für Pass 4 client.println("<p>Pass 4 " + output4State + "</p>"); // Wenn der Ausgang „output4State“ ausgeschaltet ist, wird die Schaltfläche „ON“ angezeigt if (output4State == "aus") { client.println("<p><a href=\"/4/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/4/aus\"><button class=\"button button2\">AUS</button></a></p>"); } // Zeigt den aktuellen Status und die EIN/AUS-Tasten für Hochfahren 2 an client.println("<p>Hochfahren 2 " + output2State + "</p>"); // Wenn der Ausgang „output2State“ ausgeschaltet ist, wird die Schaltfläche „ON“ angezeigt if (output2State == "aus") { client.println("<p><a href=\"/2/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/2/aus\"><button class=\"button button2\">AUS</button></a></p>"); } // Zeigt den aktuellen Status und die EIN/AUS-Tasten für Runterfahren 3 an client.println("<p>Runterfahren 3 " + output3State + "</p>"); // Wenn der Ausgang „output3State“ ausgeschaltet ist, wird die Schaltfläche „ON“ angezeigt if (output3State == "aus") { client.println("<p><a href=\"/3/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/3/aus\"><button class=\"button button2\">AUS</button></a></p>"); } // Zeigt den aktuellen Status und die EIN/AUS-Tasten für Pass 5 an client.println("<p>Pass 5 " + output5State + "</p>"); // Wenn der Ausgang „output5State“ ausgeschaltet ist, wird die Schaltfläche „On“ angezeigt if (output5State == "aus") { client.println("<p><a href=\"/5/an\"><button class=\"button\">AN</button></a></p>"); } else { client.println("<p><a href=\"/5/aus\"><button class=\"button button2\">AUS</button></a></p>"); } client.println("</body></html>"); // Die HTTP-Antwort endet mit einer weiteren Leerzeile client.println(); // Die While-Schleife beenden break; } else { // Wenn eine neue Zeile geschrieben wurde, currentLine löschen currentLine = ""; } } else if (c != '\r') { // Wenn es etwas anderes als ein Wagenrücklaufzeichen ist, currentLine += c; // Füge es am Ende der aktuellen Zeile hinzu } } } // Löschen der Header-Variable header = ""; // Schließen der Verbindung client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }
-
Genau das würde ich auch empfehlen. Geh lieber über den integrierten Webserver bzw. Webapplikation. Dann benötigst du keine Android App und kannst es von allen Geräten aus steuern.
Ich bin ja noch der totale Anfänger und was Microkontroller und was sonst noch zu wissen ist, muss ich mir erst einmal aneignen. Ich bin dabei, aber es ist schon eine Herausforderung.
Es tut mir leid, aber mir muss man das Alles im Moment noch Schritt für Schritt und mit allem Drum und Dran und dann möglichst auch so, dass der Leihe es versteht, erklären.
Es muss ja auch nicht alles auf einmal passieren, eben Schritt für Schritt.
Es geht um einen Schlitten der mittels Motorkraft rauf- und runterfahren kann.
Den habe ich schon einmal gebaut und dazu ein Video gemacht - Kameraschlitten -.
Als Microprozessor, der die Steuerbefehle (Rechts- oder Linkslauf und die beiden Bypässe zum Entsperren der Reedkontakte), an den Wickelmotor weitergibt, habe ich an einen Arduino Nano ESP32 gedacht und den habe ich auch schon besorgt. Einen Sketch, der den Motor rechts- oder linksherum laufen lässt habe ich auch schon hinbekommen, weiter bin ich noch nicht.
-
Ich Danke Dir, ich sehe, dass es wohl machbar ist. Die Codes habe ich mir schon einmal gesichert. Jetzt muss ich erst einmal noch tiefer in die Thematik einsteigen.
Zur Zeit beschäftige ich mich noch damit wie ich das Android Studio benutzen muss und zur Zeit verstehe ich noch nur "Bahnhof", aber dass soll sich ja ändern.
Im übrigen bin ich total neidisch auf die Menschen, die das alles schon können.
-
Hallo zusammen,
das Wichtigste zuerst, leider kann ich mich nur in meinen Muttersprache Deutsch in Wort und Schrift, was in der heutigen Zeit und insbesondere für dieses Thema ein großes Handikap bedeutet, verständigen.
Ich bin 75 Jahre alt und habe mir nun ein Projekt vorgenommen, von dem ich nicht weiß, ob ich es überhaupt bewerkstelligen kann.
Mit Eurer Hilfe aber vielleicht doch.
Ich bin Hobbyhühnerhalter und habe mir vor kurzem eine Beobachtungskamera, die ich über WLAN steuern kann in den Stall montiert. Die Kamera kann horizontal und vertikal schwenken, was ich von meiner Wohnung aus über den Monitor des PC steuern kann.
Nun wäre es ja nett, wenn ich die Kamera, auch über WLAN, von meiner Wohnung aus, herauf- und herunterfahren lassen könnte, um den Tieren sozusagen stets auf Augenhöhe begegnen zu können.
Eine Führungsschiene mit entsprechender Gleitschiene sowie dem Motorwinder habe ich schon gebaut und das funktioniert auch sehr gut.
Im Moment wird die Bewegung noch über händische Schalter gesteuert, aber das soll sich ja ändern.
Für die elektronische Motorsteuerung habe ich ein Arduino mit WiFi vorgesehen. Da bin ich zur Zeit noch dran mich mit der Programmierung des Microkontrollers zu beschäftigen.
ChatGPT ist hier eine große Hilfe.
Und eben dieser Arduino soll über eine App vom Smartphone aus für die vertikale Bewegung gesteuert werden können.
Über den Monitor geht das nicht, da dort ja schon das Programm der ReoLink-Kamera läuft.
Was man noch wissen sollte ist, dass auf der Laufschiene unten und auch oben jeweils ein Magnetschalter eingebaut ist, damit der Schlitten stoppt, bevor er aus der Schiene läuft (Ich kann die genaue Position der Kamera auf der Schiene von außen nicht beobachten).
Ich brauche also eine APP mit 4 Schaltern auf dem Display, die auf das Arduino einwirken.
Es sollten Schalter sein, die sich wie Taster benehmen. Also gedrückt halten "an" loslassen "aus". Zwei Schalter als Dreieck für rauf und runter und 2 Schalter als Kreis zum entsperren des jeweiligen Magnetschalters, falls er mal ausgelöst hat.
Bei diesem Projekt wünsche ich mir viel Glück und Eure Hilfe.