Schritmotortreiber A4988 millis

Hallo,

ich würde gerne die delay’s gegen millis tauschen,habe schon etliche Stunden verbracht diesen Original Code in millis umzuwandeln aber ohne zielführenden Erfolg.Würde mich über eure Hilfe sehr freuen. Ja ich habe schon mir das blink without delay angeschaut. Hier der Code

const int stepPin = 3; 
const int dirPin = 4; 

void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT); 
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 200; x++) {
  digitalWrite(stepPin,HIGH); 
  delayMicroseconds(500); 
  digitalWrite(stepPin,LOW); 
  delayMicroseconds(500); 
}
delay(1000); // One second delay

vielen Dank im vorraus !!

Ich habe Deinen Sketch mal entsprechend geändert:

const int stepPin = 3;
const int dirPin = 4;

uint32_t prevMicros = 0;
byte pulses = 0;
bool state = HIGH;

void setup() {
  Serial.begin(9600);
  // Sets the two pins as Outputs
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}
void loop() {
  digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  if (pulses < 200) {
    if (micros() - prevMicros > 500) {
      prevMicros = micros();
      digitalWrite(stepPin, state);
      Serial.print(state);
      state = !state;
      pulses++;
    }
  } else {
    if (micros() - prevMicros > 1000000) {
      Serial.println("");
      Serial.println("1s Pause");
      prevMicros = micros();
      pulses = 0;
    }
  }
  /*
  for (int x = 0; x < 200; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }
  delay(1000); // One second delay
  */
}

Vielen Dank,das ging ja mal super schnell. Das kleine problem ist das ich gar keine delay's möchte,da ich während der Motoransteuerung zeitgleich andere Aufgaben erledigen möchte,z.b. led,taster.

Da sind gar keine delays drin!
Das ganz unten ist Dein Sketch (auskommentiert = nicht aktiv).

O ja stimmt,habs in der Eile übersehen.Echt respekt wie schnell du den Code herbei gezaubert hast. Also so in der Form wäre ich auf den Code nie gekommen,also muß ich öfters lesen und üben.

Hi,soweit funktioniert der Code bloß das der Motor keine ganze Umdrehung macht. Wenn ich den Wert bei pulses über 255 erhöhe macht der Motor gar keine bewegung mehr. Hat das was mit uint_32 zu tun?

byte pulses = 0;

byte entspricht 8 Bit also maximal 255 als Wert. Versuche mal

unsigned int pulses = 0;

Wenn es an anderer Stelle haken sollte, meldet sich der Compiler (hoffentlich) :slight_smile: