Controllo movimento passo passo tramite potenziometro come closed loop feedback

Salve,
sono un nuovo utente che si sta affacciando al mondo di Arduino, non con poche difficoltà.
Io vorrei creare uno sketch dove Arduino legge un segnale elettrico da un potenziometro come feebdack e muovere un motore passo passo tra due valori di voltaggio del potenziomentro…
Io ho provato a scrivere questo sketch, ma c’è qualcosa che non mi torna.
Grazie,
Marco

#include <FlexyStepper.h>

const int MOTOR_STEP_PIN = 8;
const int MOTOR_DIRECTION_PIN = 9;
FlexyStepper stepper;
double rotation = 10000;
int stato = 0;

void setup()
{
Serial.begin(9600);
stepper.connectToPins(MOTOR_STEP_PIN, MOTOR_DIRECTION_PIN);
stepper.setSpeedInStepsPerSecond(50);
stepper.setAccelerationInStepsPerSecondPerSecond(300);
// stepper.setTargetPositionInSteps(5000000);
}

void loop() {
switch (stato) {
case 0:
homing();
// stato = 1;
break;
case 1:
stepper.setCurrentPositionInSteps(0);
cycles();
// Serial.println(voltage);
// Serial.println(stato);
// stepper.setTargetPositionInSteps(0);
break;
case 2:
alt();
break;
}

}

void homing() {

stepper.processMovement();
int sensorValue = analogRead(A3);
double voltage = sensorValue * (5.0 / 1023.0);
if (voltage < 2.49) {
stepper.setTargetPositionInSteps(rotation);
Serial.println(stepper.getCurrentPositionInSteps());
Serial.println(voltage);
Serial.println(stato);
delay(10);
}
else if (voltage > 2.51)
{

stepper.setTargetPositionInSteps(-rotation);
Serial.println(stepper.getCurrentPositionInSteps());
Serial.println(voltage);
Serial.println(stato);
delay(10);

}
else {
Serial.println(voltage);
Serial.println(stato);
delay(3000);
// stepper.setCurrentPositionInSteps(0);
// bool stopFlag = false;
stato = 1;
}
}

void cycles() {

stepper.processMovement();
int sensorValue = analogRead(A3);
double voltage = sensorValue * (5.0 / 1023.0);
if (voltage < 1) {
stepper.setTargetPositionInSteps(rotation);
Serial.println(stepper.getCurrentPositionInSteps());
Serial.println(voltage);
Serial.println(stato);
delay(500);
}
else if (voltage > 4)
{

stepper.setTargetPositionInSteps(-rotation);
Serial.println(stepper.getCurrentPositionInSteps());
Serial.println(voltage);
Serial.println(stato);
delay(500);

}
else {
Serial.println(stepper.getCurrentPositionInSteps());
Serial.println(voltage);
Serial.println(stato);
// stato = 2;
}
}

void alt() {
Serial.println(stato);
}

Buongiorno e benvenuto :slight_smile: ,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.