プログラム
goto.c
// gcc -o goto goto.c -lpigpio -lpthread
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pigpio.h>
#include <unistd.h>
#define RA 13
#define DEC 18
int main(int ac, char *av[])
{
int ra = 0;
int dec = 0;
int err = 0;
if(ac == 2){
if(strcmp(av[1],"home") == 0){
ra = dec = 0;
}else{
err = 1;
}
}else if(ac == 3){
ra = atoi(av[1]);
dec = atoi(av[2]);
ra = (ra < -90 || ra > 90) ? 0 : ra;
dec = (dec < 0 || dec > 90) ? 0 : dec;
}else{
err = 1;
}
if(err == 1){
printf("usage:%s ra dec\n ra:-90~90 rec:0~90\n",av[0]);
exit(1);
}
int ret = gpioInitialise();
if (ret < 0)
{
return ret;
}
else
{
int pwm_ra = 1500 + 10 * ra;
int pwm_dec = 1500 - 10 * dec;
gpioServo(RA , pwm_ra);
gpioServo(DEC, pwm_dec);
sleep(1);
gpioTerminate();
}
return ret;
}
参考
参考までに、WringPiではこんな感じでした。
*/
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <unistd.h>
#define BASE_CLOCK 192
#define MIN_WIDTH 630 //usec
#define MAX_WIDTH 2500 //usec
#define SG90_ANGLE 180
#define RA 13
#define DEC 18
int main(int ac, char *av[])
{
int pwm_range = 4000;
int pwm_clock = atoi(av[1]);
int pwm_min = (MIN_WIDTH * BASE_CLOCK) / (pwm_clock * 10);
int pwm_max = (MAX_WIDTH * BASE_CLOCK) / (pwm_clock * 10);
int wait = 12 * 3600 /(pwm_max - pwm_min) * 1000000;
// int wait = 12 * 3600 /(pwm_max - pwm_min) * 1000;
int ra = atoi(av[2]);
int pwm_ra = pwm_min + (pwm_max - pwm_min) / SG90_ANGLE * (90 - ra);
int dec = atoi(av[3]);
int pwm_dec = pwm_min + (pwm_max - pwm_min) / SG90_ANGLE * (90 - dec);
if (wiringPiSetupGpio() == -1) {
printf("cannot setup gpio.");
return 1;
}
pinMode(RA, PWM_OUTPUT);
pinMode(DEC, PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(pwm_clock);
pwmSetRange(pwm_range);
pwmWrite(DEC, pwm_dec);
pwmWrite(RA, pwm_ra);
return 0;
}