#include <bluesense.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
char *progname = *argv++; argc--;
if(argc < 6) {
fprintf(stderr, "\n");
fprintf(stderr, "Please re-run this example with \n");
fprintf(stderr, " an identifier, \n");
fprintf(stderr, " a current value (0-2000 mA), \n");
fprintf(stderr, " an autostop flag (0 = no automatic stop, 1 = stop when limit switch is triggered) \n");
fprintf(stderr, " a halfStep flag (0 = full Step, 1 = half Step) \n");
fprintf(stderr, " a wave Drive flag (0 = no wave drive, 1 = use wave drive) \n");
fprintf(stderr, " a decay flag (0 = normal/slow decay, 1 = fast decay) \n");
fprintf(stderr, "\n");
fprintf(stderr, "Usage: %s <identifier> <current> <autoStop> <halfStep> <waveDrive> <fastDecay> \n", progname);
fprintf(stderr, " eg.: %s 1311i 500 1\n", progname);
fprintf(stderr, "\n");
fprintf(stderr, "To find out what devices are connected try the 'list_devices' example.\n");
fprintf(stderr, "\n");
return(1);
}
identifier_t id = atoi(argv[0]);
uint16_t current = (uint16_t)atoi(argv[1]);
uint8_t autostop = (uint8_t)atoi(argv[2]);
uint8_t halfStep = (uint8_t)atoi(argv[3]);
uint8_t waveDrive = (uint8_t)atoi(argv[4]);
uint8_t fastDecay = (uint8_t)atoi(argv[5]);
bsDeviceInterface_registeredDeviceInterfaces_t registered = bsDeviceInterface_allocInterfaceTable();
bsDeviceTable_table_t devices = bsDeviceTable_allocDeviceTable();
bsMaster_device_t master = bsMaster_allocMaster(registered,devices,0);
printf("Detecting device %d...\n", id);
fflush(stdout);
bsDeviceTable_deviceInfo_t dev = bsMaster_detectDevice(master, id, 5 * 1000 * 1000);
if(!dev) {
fprintf(stderr, "Device %d not found!\n", id);
bsMaster_freeMaster(master);
bsDeviceTable_freeDeviceTable(devices);
bsDeviceInterface_freeInterfaceTable(registered);
return(0);
}
bsStepperDevice_specifics_t specDev = bsStepperDevice_getDeviceSpecifics(dev);
uint32_t autoYieldParam = 0;
autoYieldParam = bsMaster_autoYield(master,1000000,2000,autoYieldParam);
printf("Setting current %u, autostop %u, halfStep %u, waveDrive %u, fastDecay %u \n",current,autostop, halfStep, waveDrive, fastDecay);
bsStepperDevice_requestSetConfig(specDev,current,autostop,halfStep, waveDrive, fastDecay);
while (!bsStepperDevice_getRequestSetConfigDone(specDev)) {
autoYieldParam = bsMaster_autoYield(master,100*1000,2000,autoYieldParam);
}
printf("Setting configuration done \n");
printf(" The '-'+enter and '=' key decrease and increase the speed.\n");
printf( " The 'q'+enter key quits.\n");
printf( "\n");
int16_t speed = 0;
int8_t speedstep = 4;
while (1) {
char key;
key = getchar();
if (key=='-') {
speed -= speedstep;
if (speed<-128) {
speed = -128;
}
} else if (key=='=') {
speed += speedstep;
if (speed>127) {
speed = 127;
}
} else if (key=='q') {
break;
} else if (key>20) {
speed = (int8_t)key-32;
}
if (key!=0) {
printf("Speed %d\n",speed);
fflush(stdout);
bsStepperDevice_requestSetSpeed(specDev,speed);
}
autoYieldParam = bsMaster_autoYield(master,100*1000,2000,autoYieldParam);
}
bsMaster_freeMaster(master);
bsDeviceTable_freeDeviceTable(devices);
bsDeviceInterface_freeInterfaceTable(registered);
return(0);
}