Mega 2560 двигатели

Кролик
Offline
Зарегистрирован: 24.02.2022

Здравствуйте. Есть ардуино Mega к ней подключен двигатель. И вот такой код


#define X_EN 38
#define X_STP A0
#define X_DIR A1

#define SLEEP 250

void setup() 
{
pinMode(X_EN, OUTPUT); pinMode(X_STP, OUTPUT); pinMode(X_DIR, OUTPUT); digitalWrite(X_EN, LOW); digitalWrite(X_DIR, LOW);
}

void move_x_one(int p)
{ 
  for (int i=0; i <= p; i++) 
  {  
    digitalWrite(X_STP, HIGH); 
    delayMicroseconds(SLEEP); 
    digitalWrite(X_STP, LOW); 
    delayMicroseconds(SLEEP); 
  }
}

void loop() 
{
  if (Serial.available() > 0) 
  {
    switch (Serial.read()) 
    {
      case 'X':
        x=Serial.parseInt();
        if(x>0) { digitalWrite(X_DIR, LOW); }
        else { digitalWrite(X_DIR, HIGH); x=-x; }
        move_x_one(x);
      break; 
    }
  }
}

вот тут-> 

 пишу X1000 двигается вправо, X-1000 двигается влево. Проблема в том что как только я пишу X50000 должно двигаться вправо, а двигается влево. Оо

 

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

этот код не может скомпилироваться без ошибок!

повангую, там где то стоял int, а надо int32_t.

Кролик
Offline
Зарегистрирован: 24.02.2022

теперь компилируется без ошибок, но вопрос остаётся)

#define X_EN 38
#define X_STP A0
#define X_DIR A1
 
#define SLEEP 250

int x=0;
 
void setup()
{
pinMode(X_EN, OUTPUT); pinMode(X_STP, OUTPUT); pinMode(X_DIR, OUTPUT); digitalWrite(X_EN, LOW); digitalWrite(X_DIR, LOW);
Serial.begin(9600);
}
 
void move_x_one(int p)
{
  for (int i=0; i <= p; i++)
  { 
    digitalWrite(X_STP, HIGH);
    delayMicroseconds(SLEEP);
    digitalWrite(X_STP, LOW);
    delayMicroseconds(SLEEP);
  }
}
 
void loop()
{
  if (Serial.available() > 0)
  {
    switch (Serial.read())
    {
      case 'X':
        x=Serial.parseInt();
        if(x>0) { digitalWrite(X_DIR, LOW); }
        else { digitalWrite(X_DIR, HIGH); x=-x; }
        move_x_one(x);
      break;
    }
  }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Программа работает так, как написана.

А Вам рекомендую вспомнить диапазон представления чисел различных типов. Если выдумаете, что int x=50000 положительное число, Вы ошибаетесь.

Кролик
Offline
Зарегистрирован: 24.02.2022

double?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не нужно гадать, нужно книжки читать.

-NMi-
Offline
Зарегистрирован: 20.08.2018

long int

Кролик
Offline
Зарегистрирован: 24.02.2022

andriano

Вас понял. Заработало. Спасибо.

Кролик
Offline
Зарегистрирован: 24.02.2022

int32_t если интересно

b707
Offline
Зарегистрирован: 26.05.2017

Кролик пишет:

если интересно


нет

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Кролик пишет:

int32_t если интересно

это вам в первом жеж посте сказали

Кролик
Offline
Зарегистрирован: 24.02.2022

ua6em пишет:

Кролик пишет:

int32_t если интересно

это вам в первом жеж посте сказали

Вы правы. xDriver благодарю.