16-01-2018, 06:10
Cześć, celem projektu jest sterowanie przez przeglądarkę internetową silnikiem krokowym 28BYJ-48.
- Arduino UNO R3
- Moduł sieciowy W5100
Problem polega na tym iż jeżeli nie używam komend obsługujących ethernet to silniczek działa super poprawnie, natomiast w innym tak jakby się trząsł lub kręcił z prędkością światła w lewo i prawo.
Przykład pierwszy poniżej gdzie jest ok.
Problem się pojawia jeśli funkcję all(); - to ta sterująca silnikiem zostaje wywołana w void loop lub gdziekolwiek poniżej kodu zakreślonego zielonym kolorem.
Jeśli usadowie fukncję all(); bezpośrednio na samej górze w void setup to silniczek działa, ale nie mogę nim sterować przez www.
Sytuacja w poniższym kodzie wygląda tak, że po kliknięciu w przeglądarce na ON uruchom to tak jak wspominałem silniczek wariuje i nie kreci prawidło.
Próbowałem nawet wstawić funkcję all(); w void setup i dopiero z poziomu tego poniżej wywować funkcję void setup, ale efekt jest ten sam....
OTO DOCELOWY KOD:
- Arduino UNO R3
- Moduł sieciowy W5100
Problem polega na tym iż jeżeli nie używam komend obsługujących ethernet to silniczek działa super poprawnie, natomiast w innym tak jakby się trząsł lub kręcił z prędkością światła w lewo i prawo.
Przykład pierwszy poniżej gdzie jest ok.
Kod:
void setup() {
pinMode( 8, OUTPUT);
pinMode( 9, OUTPUT);
pinMode( 10, OUTPUT);
pinMode( 11, OUTPUT);
}
void loop() {
all();
}
Problem się pojawia jeśli funkcję all(); - to ta sterująca silnikiem zostaje wywołana w void loop lub gdziekolwiek poniżej kodu zakreślonego zielonym kolorem.
Jeśli usadowie fukncję all(); bezpośrednio na samej górze w void setup to silniczek działa, ale nie mogę nim sterować przez www.
Sytuacja w poniższym kodzie wygląda tak, że po kliknięciu w przeglądarce na ON uruchom to tak jak wspominałem silniczek wariuje i nie kreci prawidło.
Próbowałem nawet wstawić funkcję all(); w void setup i dopiero z poziomu tego poniżej wywować funkcję void setup, ale efekt jest ten sam....
Kod:
if(readString.indexOf("?ON") > -1)
{
setup();
}
OTO DOCELOWY KOD:
Kod:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 10, 0, 0, 2 }; // IP address in LAN – need to change according to your Network address
EthernetServer server(80); //server port
String readString;
void setup(){
pinMode( 8, OUTPUT);
pinMode( 9, OUTPUT);
pinMode( 10, OUTPUT);
pinMode( 11, OUTPUT);
//start Ethernet
Ethernet.begin(mac, ip);
server.begin();
}
void loop(){
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
}
//if HTTP request has ended– 0x0D is Carriage Return \n ASCII
if (c == 0x0D) {
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<TITLE> ARDUINO ETHERNET SHIELD</TITLE>");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<hr>");
client.println("<hr>");
client.println("<br>");
client.println("<H1 style=\"color:green;\">ARDUINO ETHERNET SHIELD — LED ON/OFF FROM WEBPAGE</H1>");
client.println("<hr>");
client.println("<br>");
client.println("<H2><a href=\"/?ON\"\">ON</a><br></H2>");
client.println("<H2><a href=\"/?OFF\"\">OFF</a><br></H2>");
client.println("</BODY>");
client.println("</HTML>");
delay(10);
//stopping client
client.stop();
// control arduino pin
if(readString.indexOf("?ON") > -1) //checks for LEDON
{
all();
}
else{
if(readString.indexOf("?OFF") > -1) //checks for LEDOFF
{
wylacz();
}
}
//clearing string for next read
readString="";
}
}
}
}
}
void wylacz()
{
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
void all()
{
for (int i=0; i <500; i++)
{
motor_CW(2);
}
for (int i=0; i <500; i++)
{
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
for (int i=0; i <500; i++)
{
motor_CWW(2);
}
}
void motor_CW(int dly)
{
digitalWrite(8, HIGH);
delay(dly);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
delay(dly);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
delay(dly);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
delay(dly);
digitalWrite(11, LOW);
}
void motor_CWW(int dly)
{
digitalWrite(11, HIGH);
delay(dly);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(dly);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(dly);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(dly);
digitalWrite(8, LOW);
}