PURS / uStep

Files at this revision

API Documentation at this revision

Comitter:
inovak1
Date:
Sat Jan 21 09:25:49 2017 +0000
Parent:
3:00167c532c84
Commit message:
PURS project

Changed in this revision

uStep.cpp Show annotated file Show diff for this revision Revisions of this file
uStep.h Show annotated file Show diff for this revision Revisions of this file
--- a/uStep.cpp	Sat Jan 14 18:19:52 2017 +0000
+++ b/uStep.cpp	Sat Jan 21 09:25:49 2017 +0000
@@ -1,10 +1,12 @@
 #include "uStep.h"
 #include "mbed.h"
-int motorbrzina; // BRZINA STEP MOTORA
-Ticker steptick;
 
 uStep::uStep(PinName FAZ1, PinName FAZ2, PinName FAZ3, PinName FAZ4) : _FAZ1(FAZ1), _FAZ2(FAZ2), _FAZ3(FAZ3), _FAZ4(FAZ4)   //DEFINICIJA PINOVA MOTORA
 {
+    i = 0;
+    trenutniKorak = 0;
+    maxKoraci = 0;
+    busy = false;
     _FAZ1=0;
     _FAZ2=0;
     _FAZ3=0;
@@ -66,102 +68,84 @@
     _FAZ3=0;
     _FAZ4=1;
 }
+
+void uStep::motorStop()
+{
+    _FAZ1=0;
+    _FAZ2=0;
+    _FAZ3=0;
+    _FAZ4=0;
+}
+
 void uStep::ooskz()   // ROTIRAJ MOTOR U SMJERU OBRNUTOM D KAZALJKE NA SATU
 {
-    for (int i = 0; i <= 7; i++) {
-        switch (i) { // AKTIVIRAJTE FAZE ( FAZ1, FAZ3, FAZ4, FAZ4)  U BINARNOJ SEKVENCI ZA KORAKE
-            case 0: {
-                steptick.attach(this,&uStep::step1 ,motorbrzina);
-            }
-            break;
-            case 1: {
-                steptick.attach(this,&uStep::step2 ,motorbrzina);
-            }
-            break;
-            case 2: {
-                steptick.attach(this,&uStep::step3,motorbrzina);
-            }
-            break;
-            case 3: {
-                steptick.attach(this,&uStep::step4,motorbrzina);
-            }
-            break;
-            case 4: {
-                steptick.attach(this,&uStep::step5 ,motorbrzina);
-            }
-            break;
-            case 5: {
-                steptick.attach(this,&uStep::step6 ,motorbrzina);
-            }
-            break;
-            case 6: {
-                steptick.attach(this,&uStep::step7 ,motorbrzina);
-            }
-            break;
-            case 7: {
-                steptick.attach(this,&uStep::step8 ,motorbrzina);
-            }
-            break;
-        }
-                steptick.detach();
+    switch(i) {
+        case 0: step1(); break;
+        case 1: step2(); break;
+        case 2: step3(); break;
+        case 3: step4(); break;
+        case 4: step5(); break;
+        case 5: step6(); break;
+        case 6: step7(); break;
+        case 7: step8(); break;
     }
+    zbrojiZaJedan();
 }
 
 void uStep::skz()   // ROTIRAJ MOTOR JEDNOM U SMJERU KAZALJKE NA SATU
 {
-    for (int i = 0; i <= 7; i++) {
-
-        switch (i) {
-           case 0: {
-                steptick.attach(this,&uStep::step8 ,motorbrzina);
-            }
-            break;
-            case 1: {
-                steptick.attach(this,&uStep::step7 ,motorbrzina);
-            }
-            break;
-            case 2: {
-                steptick.attach(this,&uStep::step6 ,motorbrzina);
-            }
-            break;
-            case 3: {
-                steptick.attach(this,&uStep::step5 ,motorbrzina);
-            }
-            break;
-            case 4: {
-                steptick.attach(this,&uStep::step4 ,motorbrzina);
-            }
-            break;
-            case 5: {
-                steptick.attach(this,&uStep::step3 ,motorbrzina);
-            }
-            break;
-            case 6: {
-                steptick.attach(this,&uStep::step2 ,motorbrzina);
-            }
-            break;
-            case 7: {
-                steptick.attach(this,&uStep::step1 ,motorbrzina);
-            }
-            break;
-        }
-                steptick.detach();
+    switch(i) {
+        case 0: step8(); break;
+        case 1: step7(); break;
+        case 2: step6(); break;
+        case 3: step5(); break;
+        case 4: step4(); break;
+        case 5: step3(); break;
+        case 6: step2(); break;
+        case 7: step1(); break;
+    }
+    zbrojiZaJedan();
+}
+void uStep::zbrojiZaJedan()
+{
+    if (i < 7)
+        i++;
+    else {
+        i = 0;
+        trenutniKorak++;
+    }
+        
+    if (trenutniKorak >= maxKoraci)
+    {
+        steptick.detach();
+        motorStop();
+        trenutniKorak = 0;
+        busy = false;
     }
 }
 
-void uStep::step(int koraci, int smjer, int brzina)  // FUNKCIJA STEP MOTORA (BROJ KORAKA, SMJER VRTNJE, BRZINA VRTNJE)
+void uStep::step(int koraci, int smjer, float brzina)  // FUNKCIJA STEP MOTORA (BROJ KORAKA, SMJER VRTNJE, BRZINA VRTNJE)
 {
-    int count=0; // INICIJALIZCIJA BROJACA KORAKA
-    motorbrzina=brzina; //POSTAVLJANJE BRZINE MOTORA
-    if (smjer==0) // OKRETANJE U SMJERU KAZALJKE NA SATU
-        do {
-            skz();
-            count++;
-        } while (count<koraci); // turn number of steps applied
+    motorStop();
+    i = 0;
+    trenutniKorak = 0;
+    busy = true;
+    maxKoraci = koraci;
+    motorbrzina = brzina; //POSTAVLJANJE BRZINE MOTORA
+    if (smjer == 0) // OKRETANJE U SMJERU KAZALJKE NA SATU
+    {
+        steptick.attach(this, &uStep::skz, motorbrzina);
+        skz();
+    }
     else if (smjer==1)// OKRETANJE OBRNUTO OD KAZALJKE NA SATU
-        do {
-            ooskz();
-            count++;
-        } while (count<koraci);// IZVODI ODABRANI BROJ KORAKA
+    {
+        steptick.attach(this, &uStep::ooskz, motorbrzina);
+        ooskz();
+    }
 
+}
+
+bool uStep::isRunning()
+{
+    return busy;
 }
\ No newline at end of file
--- a/uStep.h	Sat Jan 14 18:19:52 2017 +0000
+++ b/uStep.h	Sat Jan 21 09:25:49 2017 +0000
@@ -10,7 +10,13 @@
 
     uStep(PinName FAZ1, PinName FAZ2, PinName FAZ3, PinName FAZ4); // KONSTRUKTOR MOTORA
 
-    void step(int num_steps, int smjer, int brzina);
+    void step(int num_steps, int smjer, float brzina);
+    bool isRunning();
+private:
+    DigitalOut _FAZ1;
+    DigitalOut _FAZ2;
+    DigitalOut _FAZ3;
+    DigitalOut _FAZ4;
     void ooskz();
     void skz();
     void step1();
@@ -21,15 +27,14 @@
     void step6();
     void step7();
     void step8();
-
-
-private:
-    DigitalOut _FAZ1;
-    DigitalOut _FAZ2;
-    DigitalOut _FAZ3;
-    DigitalOut _FAZ4;
-
-
+    void motorStop();
+    float motorbrzina; // BRZINA STEP MOTORA
+    int i;
+    int trenutniKorak;
+    int maxKoraci;
+    Ticker steptick;
+    void zbrojiZaJedan();
+    bool busy;
 };
 
 #endif
\ No newline at end of file