• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Ethernet + silnik krokowy 28BYJ-48
#1
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.

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);
}
 
Odpowiedź
#2
Witam,
Silniczek Ci wariuje, bo funkcje do jego obsługi zrobiłeś na delay().
Pozdrawiam,
Tomek.
 
Odpowiedź
#3
Zmieniłem PIN'Y na 5, 6, 7, 8 - Działa !!!
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości