2016-07-24 2 views
0

Mein Schrittmotor wird mit einem L293d-Treiber gesteuert, der an einen Ardiuno angeschlossen ist. Das Tutorial, von dem ich meine Informationen erhalten habe, ist hier, https://learn.adafruit.com/wifi-control ... ino-sketch, aber ich habe den Code so geändert, dass er für den Schrittmotor anstelle eines Gleichstrommotors passt. Momentan teste ich nur mit serieller Eingabe - noch kein WLAN.Steuerung eines Schrittmotors mit einem Ardiuno und Node.js

Ich habe alles funktioniert. Wenn ich die Vorwärts-Taste drücke, bewegt sich der Motor vorwärts. Es dreht sich jedoch nur um eine Umdrehung. Ich bin mir nicht sicher, wie ich den Code ändern soll, so dass ich, wenn ich auf die Vorwärts-Taste klicke, kontinuierlich vorwärts rotiere, bis ich die Stopp-Taste drücke. Weiß jemand, wie man das macht?

#include <SPI.h> 
#include <aREST.h> 
#include <Stepper.h> 
#include <Wire.h> 

aREST rest = aREST(); 

int inA1 = 12; // input 1 of the stepper 
int inA2 = 11; // input 2 of the stepper 
int inB1 = 10; // input 3 of the stepper 
int inB2 = 9; // input 4 of the stepper 


#define STEPS 512 

Stepper motor(STEPS, inA1, inA2, inB1, inB2); 

void setup() {     
    pinMode(inA1, OUTPUT);  
    pinMode(inA2, OUTPUT);  
    pinMode(inB1, OUTPUT);  
    pinMode(inB2, OUTPUT);  

Serial.begin(115200);  
Serial.println(F("Hello, CC3000!\n")); 

rest.set_id("1"); 
rest.set_name("robot"); 

    //Expose functions 
rest.function("forward",forward); 
rest.function("backward",backward); 
rest.function("stop",stop); 
} 


void loop() 
{ 

    rest.handle(Serial); 

} 

// Forward 
int forward(String command) { 
    motor.setSpeed(10); 
    motor.step(100); 
    return 1; 
} 

//Backforward 
int backward(String command) { 
    motor.setSpeed(-10); 
    motor.step(100); 
    return 1; 
} 

Antwort

0

Fehlgeschlagen: Einfacher Satz motor.step(2147483647). 2147483647 ist der Maximalwert von int.


Neuer Versuch: Versuchen Sie, die nächste Logik zu implementieren. Ich bin nicht c-Guru so unter schmutzigem Code

int lastCommand = 0; // 0 - nothing; 1 - forward; 2 - backward; 3 - stop; 
void forward() { 
    lastCommand = 1; 
    ... 
} 

void backward() { 
    lastCommand = 2; 
    ... 
} 

void stop() { 
    lastCommand = 0; 
    ... 
} 

void loop() { 
    rest.handle(Serial); 
    if (lastCommand == 1) 
     forward(); 
    if (lastCommand == 2) 
     backward(); 
} 

Wenn wir nach hinten schieben + vorne + Rückwärtstaste und Serial 3 Befehle senden dann Motor konsequent alle von ihnen auszuführen. Imho, es ist ein Problem.

+0

Wenn ich auf max Wert von int ändert. es ergab immer noch kein kontinuierliches Rotationsergebnis. –

+0

Hmm, vielleicht, in der Bibliothek verwendet nicht int. Versuchen Sie Wert wie 50000. Problemstelle ist Motor, führen Sie keinen anderen Befehl aus, während beschäftigt. –

+0

Ich denke nicht, dass dies das Problem lösen wird. Einen großen Wert zu haben, funktioniert eine Weile, hört aber immer noch auf. Ich muss den Motor laufen lassen, ohne für unbestimmte Zeit stehen zu bleiben. Gibt es eine Möglichkeit, die Funktion im Skript aufzurufen, damit sie weiterläuft? –

Verwandte Themen