全志H616——通过定时器来实现舵机的转动

舵机需要一个接口输入PWM波形才能进行工作

PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据

通过上一篇定时器的操作可以得知,一次定时时间为0.5ms,通过定义一个变量来计数定时了多少个周期,进而改变转动的角度

代码如下:

  1 #include <stdio.h>
  2 #include <sys/time.h>
  3 #include <stdlib.h>
  4 #include <signal.h>
  5 #include <wiringPi.h>
  6
  7 #define sg90 1
  8
  9 static int i = 0;
 10 int jd = 0;
 11 void signal_handler(int signum)
 12 {
 13     if(i < jd){
 14         digitalWrite(sg90,HIGH);
 15
 16     }else{
 17         digitalWrite(sg90,LOW);
 18
 19
 20     }
 21     i++;
 22     if(i == 40){//一次是0.5ms,400次刚好就是一秒,实现一秒打印一次
 23         i = 0;
 24
 25     }
 26
 27
 28 }
 29
 30 int main ()
 31 {
 32     wiringPiSetup();//初始化wiringpi库,用于处理引脚
 33
 34     pinMode(sg90,OUTPUT);//把sg90的PWM引脚设置为输出模式
 35
 36
 37     struct itimerval itv;
 38     //设定程序跑到这里以后需要等待开启定时器的时间为1s
 39     itv.it_value.tv_sec = 1;
 40     itv.it_value.tv_usec = 0;
 41     //设定需要减少的时间为500us
 42     itv.it_interval.tv_sec = 0;
 43     itv.it_interval.tv_usec = 500;
 44
 45     //设定递减的方式
 46     if(setitimer(ITIMER_REAL,&itv,NULL) ==  -1)
 47     {
 48         perror("error");
 49         exit(-1);
 50     }
 51
 52     //信号处理
 53     signal(SIGALRM,signal_handler);
 54
 55
 56     while(1){
 57         printf("input jd===========\n");
 58         printf("1-0,2-45,3-90,4-135,5-180\n");
 59         scanf("%d",&jd);
 60
 61     }
 62
 63
 64     return 0;
 65 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值