Salve, sto lavorando ad un progetto per il quale devo comandare uno stepper con Excel, per questo sto usando la libreria rExcel di Roberto Valgolio come comunicazione seriale.
Sono riuscito ad elaborare questo codice, ma c'è un problema con la frequenza di aggiornamento tra Excel e Arduino. Essa viene preimpostata nel codice in ms, e determina il tempo di uscita dei comandi.
Inviando il comando allo stepper: myPos ( x qualsiasi) e motorSpeed( y qualsiasi), lo stepper esegue il comando normalmente, ma si blocca ogni nuovo ciclo di uscita dei dati da Excel per una frazione di secondo, come se singhiozzasse.
Es. da myPos 0 a 3000 a velocità v con t 1000 ms: lo stepper raggiunge la posizione alla velocità comandata bloccandosi ogni 1000 ms.
Il problema sembra sparire sotto i 10 ms, ma probabilmente non é più percepibile ad occhio umano, ma sotto i 10 ms la velocità massima che raggiunge lo stepper sembra non superare i 100, contro gli 800/1000 raggiungibili dallo stepper (28BYJ)
E 'possibile risolvere questo problema?
#include <AccelStepper.h>
#include <rExcel.h>
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
#define STEPS_PER_TURN 2048
//
idx lungo = 0;
int outputTiming = 1000;
char worksheet[16];
char range[16];
unsigned int row;
unsigned int column;
char value[16];
int motorSpeed = 800;
int myPos = 0;
//
rExcel myExcel;
AccelStepper stepper(4, motorPin1, motorPin3, motorPin2, motorPin4);
void setup()
{
while (!Serial);
Serial.begin(115200);
stepper.setMinPulseWidth(20);
stepper.setMaxSpeed(motorSpeed);
stepper.setCurrentPosition(stepper.currentPosition());
stepper.runToPosition();
myExcel.clearInput();
}
void loop()
{
static unsigned long loopTime = 0;
static unsigned long time1 = 0;
loopTime = millis();
if ((loopTime - time1) >= outputTiming)
{
time1 = loopTime;
myExcel.get("Test", "D8", value);
motorSpeed = atoi(value);
myExcel.get("Test", "B8", value);
myPos = atoi(value);
}
stepper.setCurrentPosition(stepper.currentPosition());
stepper.moveTo(myPos);
stepper.setSpeed(motorSpeed);
stepper.runSpeedToPosition();
}