- //TODO: Set actuator
- switch (a->id)
- {
- case ACTUATOR_TEST0:
- {
- // Onboard LEDs test actuator
- FILE *led_handle = NULL; //code reference: http://learnbuildshare.wordpress.com/2013/05/19/beaglebone-black-controlling-user-leds-using-c/
- const char *led_format = "/sys/class/leds/beaglebone:green:usr%d/brightness";
- char buf[50];
- bool turn_on = value;
-
- for (int i = 0; i < 4; i++)
- {
- snprintf(buf, 50, led_format, i);
- if ((led_handle = fopen(buf, "w")) != NULL)
- {
- if (turn_on)
- fwrite("1", sizeof(char), 1, led_handle);
- else
- fwrite("0", sizeof(char), 1, led_handle);
- fclose(led_handle);
- }
- else
- Log(LOGDEBUG, "LED fopen failed: %s", strerror(errno));
- }
- }
- break;
- case ACTUATOR_TEST1:
- // GPIO pin digital actuator
- {
- // Quick actuator function for testing pins
- // GPIOPin can be passed as argument, but is just defined here for testing purposes
- int GPIOPin = 13;
- // Modify this to only export on first run, only unexport on shutdown
- pinExport(setValue, GPIOString);
- pinDirection(GPIODirection, setValue);
- pinSet(value, GPIOValue, setValue);
- pinUnexport(setValue, GPIOString);
- }
- break;
- case ACTUATOR_TEST2:
- // PWM analogue actuator (currently generates one PWM signal with first PWM module)
- {
- if (pwminit == 0) { // If inactive, start the pwm module
- pwm_init();
- }
- if (pwmstart == 0) {
- pwm_start();
- pwm_set_period(FREQ); // Frequency is 50Hz defined in pwm header file
- }
- if(value >= 0 && value <= 1000) {
- double duty = value/1000 * 100; // Convert pressure to duty percentage
- pwm_set_duty((int)duty); // Set duty percentage for actuator (0-100%)
- }
- }
- break;
- }
-
- Log(LOGDEBUG, "Actuator %s set to %f", g_actuator_names[a->id], value);
-
- // Record the value