Hallo zusammen,
ich bin recht neu was das Programmieren mit Arduino angeht also bitte nicht direkt steinigen
Geplant ist eine Schaltung bei der ein Stepper rechts und links dreht mit verschiedenen anwählbaren Geschwindigkeiten über ein IR Remote anwählbar. Das Ganze funktioniert auch soweit, nun möchte ich noch eine Taste mit einem Stopp befehl belegen. Allerdings reagiert meine ganze Schaltung nicht solange eine Bewegung ausgeführt wird.
Gibt es dafür eine gute Lösung ? Ich konnte leider dazu noch nichts finden, um das Problem zu umgehen.
Hardware:
Uno
A4988 Treiber
IR Remote
Nema17
Benutzt wird die StepperDriver Library von Laurb9
#include <Arduino.h>
#include "A4988.h"
#include <IRremote.h>
// using a 200-step motor (most common)
#define MOTOR_STEPS 200
// configure the pins connected
#define DIR 8
#define STEP 9
//define MS1 10
//define MS2 11
//define MS3 12
#define SLEEP 10
A4988 stepper(MOTOR_STEPS, DIR, STEP, SLEEP);
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
// Set target motor RPM to 1RPM and microstepping to 1 (full step mode)
stepper.begin(10, 16);
// if using enable/disable on ENABLE pin (active LOW) instead of SLEEP uncomment next line
// stepper.setEnableActiveState(LOW);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// initialize the serial port:
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
//-----------------------------------rotation right-----------------------------------------------
// Tell motor to rotate 360 degrees. That's it.
//stepper.rotate(360);
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
if (results.value == 16761405) //Wenn der Infrarotempfänger die Zahl
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)
// energize coils - the motor will hold position
// stepper.enable();
/*
Moving motor one full revolution using the degree notation right
*/
{
stepper.rotate(-360);
}
//-----------------------------------rotation left-----------------------------------------------
// Tell motor to rotate 360 degrees. That's it.
//stepper.rotate(360);
if (results.value == 16720605) //Wenn der Infrarotempfänger die Zahl
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)
// energize coils - the motor will hold position
// stepper.enable();
/*
Moving motor one full revolution using the degree notation right
*/
{
stepper.rotate(360);
}
//----------------------------------------------speed--------------------------------------------
if (results.value == 16724175) //Wenn der Infrarotempfänger die Zahl
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)
// energize coils - the motor will hold position
// stepper.enable();
/*
Moving motor one full revolution using the degree notation right
*/
{
stepper.setRPM(100);
}
//----------------------------------------------speed2-------------------------------------------
if (results.value == 16718055) //Wenn der Infrarotempfänger die Zahl
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)
// energize coils - the motor will hold position
// stepper.enable();
/*
Moving motor one full revolution using the degree notation right
*/
{
stepper.setRPM(5);
}
//----------------------------------------------stop-------------------------------------------????????????
if (results.value == 16712445) //Wenn der Infrarotempfänger die Zahl
//„16724175“ ausgelesen hat (Entsprechend der Taste“1“ der Fernbedienung)
// energize coils - the motor will hold position
// stepper.enable();
/*
Moving motor one full revolution using the degree notation right
*/
{
stepper.rotate(0);
}
irrecv.resume();
}
}
Vielen Dank für die Hilfe.
Gruß