Mega 2560 двигатели
- Войдите на сайт для отправки комментариев
Сб, 07/05/2022 - 19:27
Здравствуйте. Есть ардуино 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 должно двигаться вправо, а двигается влево. Оо

этот код не может скомпилироваться без ошибок!
повангую, там где то стоял int, а надо int32_t.
теперь компилируется без ошибок, но вопрос остаётся)
#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; } } }Программа работает так, как написана.
А Вам рекомендую вспомнить диапазон представления чисел различных типов. Если выдумаете, что int x=50000 положительное число, Вы ошибаетесь.
double?
Не нужно гадать, нужно книжки читать.
long int
andriano
Вас понял. Заработало. Спасибо.
int32_t если интересно
если интересно
нет
int32_t если интересно
это вам в первом жеж посте сказали
int32_t если интересно
это вам в первом жеж посте сказали
Вы правы. xDriver благодарю.