#include <bluesense.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
char *progname = *argv++; argc--;
if(argc < 4) {
fprintf(stderr, "\n");
fprintf(stderr, "Please re-run this example with \n");
fprintf(stderr, " an identifier, \n");
fprintf(stderr, " a bitmask which determines the enabled motors, \n");
fprintf(stderr, " a byte value for the minimum position, \n");
fprintf(stderr, " a byte value for the maximum position \n");
fprintf(stderr, "\n");
fprintf(stderr, "Usage: %s <identifier> <bitmask> <minpos> <maxpos>\n", progname);
fprintf(stderr, " eg.: %s 21 255 100 200\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]);
uint8_t mask = (uint8_t)atoi(argv[1]);
uint8_t mina = (uint8_t)atoi(argv[2]);
uint8_t maxa = (uint8_t)atoi(argv[3]);
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);
}
bsServoDevice_specifics_t specDev = bsServoDevice_getDeviceSpecifics(dev);
bsServoDevice_requestSetConfiguration(specDev,64);
uint32_t autoYieldParam =0;
autoYieldParam = bsMaster_autoYield(master,1000000,2000,autoYieldParam);
printf("Update motor positions 50 times...\n");
fflush(stdout);
uint8_t angles[BLUESENSE_SERVOCONTROLLER_SERVOCOUNT];
uint8_t servos;
uint8_t i;
for(i = 0; i < 100; i++) {
printf("Setting servo ");
for (servos=0; servos<BLUESENSE_SERVOCONTROLLER_SERVOCOUNT; servos++) {
if (mask & (1<<servos)) {
if ((servos % 2)==(i % 2)) {
angles[servos] = mina;
} else {
angles[servos] = maxa;
}
}
printf("(Motor %d,Angle %d)",servos,angles[servos]);
}
printf("\n");
bsServoDevice_requestSetAngles(specDev, mask, angles);
fflush(stdout);
autoYieldParam = bsMaster_autoYield(master,1000000,2000,autoYieldParam);
}
bsMaster_freeMaster(master);
bsDeviceTable_freeDeviceTable(devices);
bsDeviceInterface_freeInterfaceTable(registered);
return(0);
}