PURS / uStep
Revision:
4:c80c7ea50a3c
Parent:
2:627a47c7f619
--- 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