шаговик + моторшилд + джойстик
- Войдите на сайт для отправки комментариев
Помогите с кодом товарищи!
Есть код управления шаговиком биполярным с помощью джойстика+ардуино уно + моторшилд l293d.Но при. подключении сервамотора и доп джойстика ухудшается .качество работы шаговика (дребезг). Может кто подскажет решение, код прилагаю
#include
#include
#include
AF_Stepper motor1(400, 2);
int sensorPin = A2;
int sensorReading = 0;
int prevMapped = 0;
int sensorMax = 0;
int sensorMin = 0;
int mode = MICROSTEP;
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP!
Servo myservo;
float spos=90;
int sspd=200;
void forwardstep() {
motor1.onestep(FORWARD, SINGLE);
}
void backwardstep() {
motor1.onestep(BACKWARD, SINGLE);
}
void setup()
{
Serial.begin(9600); // set up Serial library at 9600 bps
Serial.println("Stepper test!");
motor1.setSpeed(10);
myservo.attach(9);
Serial.begin(9600);
}
void loop()
{
sensorReading = analogRead(sensorPin);
if (sensorReading > sensorMax)
{sensorMax = sensorReading;
}
sensorReading = map(sensorReading,0,1023,-4,5);
Serial.println(sensorReading);
//if (prevMapped != sensorReading)
if (prevMapped > 0)
{motor1.step(1, FORWARD, mode);
delay(5-prevMapped);
}
else if (prevMapped < 0)
{motor1.step(1, BACKWARD, mode);
delay(5+prevMapped);
}
prevMapped = sensorReading;
//stepper.runSpeed();
int sensorValue = analogRead(A0);
if (sensorValue<=480) {spos=spos-(500-sensorValue)/sspd;}
else if (sensorValue>=520) {spos=spos+(sensorValue-500)/sspd;}
if (spos>170) {spos=170;}
else if (spos<10) {spos=10;}
myservo.write(spos+15);
Serial.print("spos ");
Serial.println(spos);
Serial.print("sensorValue ");
Serial.println(sensorValue);
delay(30);
}
Забыл сказать, один знакомый советует использовать другой, якобы с ним будет в порядке.Но код почему то не работает, может кто взглянет опытным взглядом
#include <AFMotor.h> AF_Stepper motor(400, 2); int sspd=80; float steps=0; int pos=0; void setup() { Serial.begin(9600); motor.setSpeed(10); // 10 об/мин } void loop() { int pos = analogRead(A1); Serial.println(pos); if (pos<=480) { steps=steps-(500-pos)/sspd; motor.step(steps, FORWARD, MICROSTEP); motor.setSpeed(steps); } else if (pos>=520) { steps=steps+(pos-500)/sspd; motor.step(steps, BACKWARD, MICROSTEP); motor.setSpeed(steps); } Serial.print(" "); Serial.print(steps); }http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Так вот главный вопрос - как сделать чтоб шаговик и сервомотор вместе работали на одном ардуино так же плавно, как и по отдельности? Или проще купить отдельный ардуино для серво?
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
У меня на смартфоне не открывается такое окно
Код необходимо "оформлять" и прятать под спойлер.
На смартфоне не реализуемо, уважаемый. Только на БК.
#include <AccelStepper.h> #include <AFMotor.h> #include <Servo.h> AF_Stepper motor1(400, 2); int sensorPin = A2; int sensorReading = 0; int prevMapped = 0; int sensorMax = 0; int sensorMin = 0; int mode = MICROSTEP; // you can change these to DOUBLE or INTERLEAVE or MICROSTEP! Servo myservo; float spos=90; int sspd=200; void forwardstep() { motor1.onestep(FORWARD, SINGLE); } void backwardstep() { motor1.onestep(BACKWARD, SINGLE); } void setup() { Serial.begin(9600); // set up Serial library at 9600 bps Serial.println("Stepper test!"); motor1.setSpeed(10); myservo.attach(9); Serial.begin(9600); } void loop() { sensorReading = analogRead(sensorPin); if (sensorReading > sensorMax) {sensorMax = sensorReading; } sensorReading = map(sensorReading,0,1023,-4,5); Serial.println(sensorReading); //if (prevMapped != sensorReading) if (prevMapped > 0) {motor1.step(1, FORWARD, mode); delay(5-prevMapped); } else if (prevMapped < 0) {motor1.step(1, BACKWARD, mode); delay(5+prevMapped); } prevMapped = sensorReading; //stepper.runSpeed(); int sensorValue = analogRead(A0); if (sensorValue<=480) {spos=spos-(500-sensorValue)/sspd;} else if (sensorValue>=520) {spos=spos+(sensorValue-500)/sspd;} if (spos>170) {spos=170;} else if (spos<10) {spos=10;} myservo.write(spos+15); Serial.print("spos "); Serial.println(spos); Serial.print("sensorValue "); Serial.println(sensorValue); delay(30); }