void t3(int pi) { int pw[3]={500, 1500, 2500}; int dc[4]={20, 40, 60, 80}; int f, rr, v; float on, off; int t, id; printf("PWM/Servo pulse accuracy tests.\n"); id = callback(pi, GPIO, EITHER_EDGE, t3cbf); for (t=0; t<3; t++) { set_servo_pulsewidth(pi, GPIO, pw[t]); v = get_servo_pulsewidth(pi, GPIO); CHECK(3, t+t+1, v, pw[t], 0, "get servo pulsewidth"); time_sleep(1); t3_reset = 1; time_sleep(4); on = t3_on; off = t3_off; CHECK(3, t+t+2, (1000.0*(on+off))/on, 20000000.0/pw[t], 1, "set servo pulsewidth"); } set_servo_pulsewidth(pi, GPIO, 0); set_PWM_frequency(pi, GPIO, 1000); f = get_PWM_frequency(pi, GPIO); CHECK(3, 7, f, 1000, 0, "set/get PWM frequency"); rr = set_PWM_range(pi, GPIO, 100); CHECK(3, 8, rr, 200, 0, "set PWM range"); for (t=0; t<4; t++) { set_PWM_dutycycle(pi, GPIO, dc[t]); v = get_PWM_dutycycle(pi, GPIO); CHECK(3, t+t+9, v, dc[t], 0, "get PWM dutycycle"); time_sleep(1); t3_reset = 1; time_sleep(2); on = t3_on; off = t3_off; CHECK(3, t+t+10, (1000.0*on)/(on+off), 10.0*dc[t], 1, "set PWM dutycycle"); } set_PWM_dutycycle(pi, GPIO, 0); callback_cancel(id); }
void t3() { int pw[3]={500, 1500, 2500}; int dc[4]={20, 40, 60, 80}; int f, rr; float on, off; int t; printf("PWM/Servo pulse accuracy tests.\n"); callback(GPIO, EITHER_EDGE, t3cbf); for (t=0; t<3; t++) { set_servo_pulsewidth(GPIO, pw[t]); time_sleep(1); t3_reset = 1; time_sleep(4); on = t3_on; off = t3_off; CHECK(3, 1+t, (1000.0*(on+off))/on, 20000000.0/pw[t], 1, "set servo pulsewidth"); } set_servo_pulsewidth(GPIO, 0); set_PWM_frequency(GPIO, 1000); f = get_PWM_frequency(GPIO); CHECK(3, 4, f, 1000, 0, "set/get PWM frequency"); rr = set_PWM_range(GPIO, 100); CHECK(3, 5, rr, 200, 0, "set PWM range"); for (t=0; t<4; t++) { set_PWM_dutycycle(GPIO, dc[t]); time_sleep(1); t3_reset = 1; time_sleep(2); on = t3_on; off = t3_off; CHECK(3, 6+t, (1000.0*on)/(on+off), 10.0*dc[t], 1, "set PWM dutycycle"); } set_PWM_dutycycle(GPIO, 0); }
/* * OUTPUTS */ bool HAL_SERVO_PULSE_WIDTH_SET(uint32_t gpioIndex, uint32_t pulseWidthUsec) { // write pulse width to the output gpio int32_t rtnVal = set_servo_pulsewidth(gpioOutputs[gpioIndex], pulseWidthUsec); if(rtnVal != 0) { printf("spnServoSetPulseWidth: set_servo_pulsewidth - %s\n", pigpio_error(rtnVal)); return EXIT_FAILURE; } else { gpioOutputPulses[gpioIndex] = pulseWidthUsec; return EXIT_SUCCESS; } }