Fehler bei Umrechnung zu long

Hallo,
ich möchte für einen Stepper Motor die Steps als long Wert übergeben. Leider scheiter ich an dem Befehl, der den long Wert berechnen soll:

long steps = long(steps_per_revolution * revolutions);

Sobald das Ergebnis aus steps_per_revolution * revolutions < -32768 ist, springt er ins positive. Aber mein long Wert sollte doch eigentlich bis -2147483648 reichen? Das casten zum Wert long scheitert und ich weis nicht warum.

#include <AccelStepper.h>

// Define a stepper and the pins it will use
AccelStepper stepper(1, 10, 9); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
int counter = 0;
int n = 1;
int steps_per_revolution = -800;
int revolutions = 42;
long steps = long(steps_per_revolution * revolutions);
void setup()
{
  Serial.begin(9600);
  // Change these to suit your stepper if you want
  stepper.setMaxSpeed(4000); //max 4500
  stepper.setAcceleration(700);
  Serial.println(steps);
  stepper.setEnablePin(8);
}

void loop()
{

  run_stepper();
}

void run_stepper() {
  if (counter < n) {
    stepper.moveTo(steps);
    while (stepper.distanceToGo() != 0) {
      stepper.run();
    }
    stepper.moveTo(0);
    while (stepper.distanceToGo() != 0) {
      stepper.run();
    }
    counter++;
  }
  stepper.disableOutputs();

}
long steps = 1L * steps_per_revolution * revolutions;
long steps = long(steps_per_revolution) * revolutions;

Mindestens 1 Operand muss Long sein, damit die Berechnung in Long erfolgt.

hi,

bevor die frage kommt: mit

long(steps_per_revolution * revolutions)

wird ZUERST das ergebnis innerhalb der klammer in int berechnet (klar, hier gibt's ja noch keinen grund, long zu verwenden), und erst dann wird dieses ergebnis auf long gecastet. Du bekommst also wie gewünscht einen wert in long, aber einen falschen.

ist manchmal blöd, daß der compiler macht, was man ihm sagt, und nicht, was man meint. :) da ist jeder schon drüber gestolpert...

gruß stefan

Danke, jetzt funktioniert es!