Hallo
Ich bin daran mittels einem ArduinoUno&Ethernetshield&Motorshield einen Motor anzusteuern. Dies funktioniert mittels Befehlen für den Motor (Testprogramm) auch soweit (Pinning von Shields entsprechend hardwaremässig angepasst.). Der Motor lässt sich korrekt ansteuern.
Als Webserver (nur lokal im Netz) habe ich nun folgendes Problem. Den Motor kann ich mittels Button auf dem Webpanel ansteuern, allerdings kann ich den Stoppbefehl mittels Digital-Input nicht generierern (bzw. hier liegt das Problem). Das Refreshen der Page bringt nur ein Zyklisches an/ausschalten des Motores. Ohne die Zeile:
client.println("Refresh: 1"); // refresh the page automatically every 1 sec
wird dies nie ausgeführt bzw. erst beim Klicken auf einen Button oder ein manuelles Refreshen der Webpage:
GetSwitchState(client);
Frage: Wie kann ich eine Webpage mit Buttons erstellen, welche den Motor ansteuern und dann bei einem DigitalIn den Motor automatisch stoppen lassen(Sicherheitsschaltung Motor aus)?
Hier der Code:
#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xEE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 88 }; // ip in lan (that's what you need to use in your browser. ("192.168.1.179")
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
boolean endschalterOben;
boolean endschalterUnten;
const int switchPin1 = 5;
const int switchPin2 = 3;
// Timer funktionen
int ifstatus = 0;
unsigned long stepTime = 2000; // ( 2 * 1000) = 2s;
void setup() {
// disable the SD card by switching pin 4 high
// not using the SD card in this program, but if an SD card is left in the socket,
// it may cause a problem with accessing the Ethernet chip, unless disabled
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
// Open serial communications and wait for port to open:
Serial.begin(9600);
// while (!Serial) {
// ; // wait for serial port to connect. Needed for Leonardo only
// }
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip, gateway, subnet);
//Ethernet.begin(mac);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
//Endschalter - Initialisierung
pinMode(switchPin1, INPUT_PULLUP); //Digital- In to Ground, Endschalter oben / LOW-Aktiv
pinMode(switchPin2, INPUT_PULLUP); //Digital- In to Ground, Endschalter unten
// Motor Code - neu
/*************************************************************
Motor Shield 1-Channel DC Motor Demo
by Randy Sarafan
For more information see:
http://www.instructables.com/id/Arduino-Motor-Shield-Tutorial/
**************************************************************/
//Setup Channel A
pinMode(7, OUTPUT); //Initiates Motor Channel A pin
pinMode(9, OUTPUT); //Initiates Brake Channel A pin
/**************************************************************/
digitalWrite(9, HIGH); //Engage the Brake for Channel A
Serial.println("Setup initialisiert!");
Serial.print("Status: "); Serial.print(ifstatus);
Serial.println("----------------------------------------------");
}//setup ////////////////////////////////////////
void loop() {
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
// Begin Ethernetserverfunctions
char c = client.read();
// Serial.write(c);
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
endschalterOben = digitalRead(switchPin1);
endschalterUnten = digitalRead(switchPin2);
Serial.println("Endschalter: "); Serial.println(endschalterOben); Serial.println(endschalterUnten);
Serial.println("----------------------------------------------");
// Endschalter abfragen
if ((endschalterOben == LOW) || (endschalterUnten == LOW ))
{
digitalWrite(9, HIGH); //Engage the Brake for Channel A //motorStop
Serial.println("Endschalter");
Serial.println("----------------------------------------------");
}
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
// Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
Serial.println(readString); //print to serial monitor for debuging
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
//client.println("<meta http-equiv=\"refresh\" content=\"1\">");
client.println("Refresh: 1"); // refresh the page automatically every 1 sec
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />");
client.println("<TITLE>Arduino TV-Motor Fernsteuerung</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>Motor Control Webserver</H1>");
client.println("<hr />");
client.println("
");
client.println("<H2>Arduino with Ethernet/Motor Shield</H2>");
client.println("
");
client.println("<h1>Endschalter</h1>");
client.println("<p>State of Endschalter is:</p>");
GetSwitchState(client);
client.println("
");
client.println("
");
client.println("<a href=\"/?button1on\"\">TV runterfahren</a>");
client.println("<a href=\"/?button1off\"\">TV hochfahren</a>
");
client.println("
");
client.println("
");
client.println("<a href=\"/?button2on\"\">TV Step runterfahren</a>");
client.println("<a href=\"/?button2off\"\">TV Step hochfahren</a>
");
client.println("
");
client.println("<p>modified by neonightmare, nov. 2016</p>");
client.println("
");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
//controls the Arduino if you press the buttons
if (readString.indexOf("?button1on") > 0) {
digitalWrite(7, HIGH); //Establishes forward direction of Channel A
digitalWrite(9, LOW); //Disengage the Brake for Channel A
analogWrite(3, 255); //Spins the motor on Channel A at ful =255 speed
Serial.println("motorHoch()");
}
}
if (readString.indexOf("?button2on") > 0) {
//forward @ half speed
digitalWrite(7, HIGH); //Establishes forward direction of Channel A
digitalWrite(9, LOW); //Disengage the Brake for Channel A
analogWrite(3, 123); //Spins the motor on Channel A at ful =255 speed
delay(stepTime);
digitalWrite(9, HIGH); //Engage the Brake for Channel A
}
//clearing string for next read
readString = "";
} //if c==
} // if client.available
} // while client.connected
} // if client
} //loop
void GetSwitchState(EthernetClient cl)
{
if ((!digitalRead(switchPin1) || !digitalRead(switchPin2))) {
cl.println("<p>ON</p>");
digitalWrite(9, HIGH); //Engage the Brake for Channel A
}
else {
cl.println("<p>OFF</p>");
}
}
Bin für jeden Tipp dankbar
Neo