当前位置: 首页 > news >正文

做网站需要懂什么seo排名规则

做网站需要懂什么,seo排名规则,网站建设需要的人员,广东省医院建设协会网站舵机认识和硬件接线 关于舵机也是使用过很多次了,详见: 使用PWM波控制开发SG90-CSDN博客 同时再次回顾香橙派的物理引脚对应: 所以舵机的VCC接 2,GND接 6,PWM接 7(此处写的是物理引脚编号) Li…

舵机认识和硬件接线

关于舵机也是使用过很多次了,详见:

使用PWM波控制开发SG90-CSDN博客

同时再次回顾香橙派的物理引脚对应:

所以舵机的VCC接 2,GND接 6,PWM接 7(此处写的是物理引脚编号

Linux定时器

驱动舵机必不可少的就是生成PWM波,上节超声波测距的时间计算学习了Linux自带的时间函数,本节生成PWM就正式学习香橙派的定时器,用定时器来生成PWM波!

由于香橙派跑的系统就是Linux,所以其实就是使用Linux来实现定时器,根据舵机的原理,一般使用50Hz频率(周期为20ms)的PWM波来控制,而角度的大小就取决于高电平的占比,20ms中有0.5ms,1.0ms,1.5ms,2.0ms,2.5ms的高电平就分别对应舵机转0度,45度,90度,135度,180度。所以本质上,只要能实现出一个定时0.5ms(500us)的定时器,并让他定时1次,2次,3次,4次,5次就可以实现所有的角度。

Linux定时器的实现,是通过 itimerval 结构体以及函数 setitimer 产生的信号,系统随之使用signal信号处理函数 来处理产生的定时信号,从而实现定时器。

itimerval结构体

struct itimerval
{
/* Value to put into `it_value' when the timer expires. */struct timeval it_interval;
/* Time to the next timer expiration. */struct timeval it_value;
};struct timeval
{__time_t tv_sec; /* Seconds. */__suseconds_t tv_usec; /* Microseconds. */
};

可见,itimerval结构体中有两个成员,这两个成员都属于timeval结构体,timeval结构体上节课接触过,有两个分别代表秒和微秒的成员。

  • it_interval:计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置
  • it_value:程序跑到这之后,多久启动定时器 

setitimer函数

setitimer()将value指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值

#include <sys/time.h>int setitimer (__itimer_which_t __which, const struct itimerval *__restrict __new, struct itimerval *__restrict __old)
  • which:控制的方法,有以下三种类型
  • ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM
  • ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM
  • ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF
  • new:指向 itimerval 结构体的指针
  • old: 一般不用,设置为NULL
  • 返回值:成功返回0,失败返回-1

 

signal函数

之前在系统编程部分学过,详见:

信号-CSDN博客

#include <signal.h>typedef void (*sighandler_t)(int); //一个指向“传入参数是int 返回值是void的函数”,名为“sighandler_t”的指针sighandler_t signal(int signum, sighandler_t handler);
  • signum:信号编号
  • handler:函数指针,指向信号处理函数;也可以使用宏,比如使用“SIG_IGN”,则忽略信号

这种方法需要注意的是,一个进程只能创建一个定时器!

代码验证 

timer_test.c:

/*该代码实现的功能是: 1s后开启定时器,然后每隔1s向终端打印hello。*/#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <stdlib.h>static int i;void signal_handler(int signum)
{i++;if(i == 2000){ //计时2000*500 = 1000000us = 1sprintf("hello\n");i = 0;}
}int main()
{struct itimerval itv;//设定定时时间为500usitv.it_interval.tv_sec = 0;itv.it_interval.tv_usec = 500;//设定开始生效,启动定时器的时间为1秒后itv.it_value.tv_sec = 1;itv.it_value.tv_usec = 0;//设定定时方式if( -1 == setitimer(ITIMER_REAL, &itv, NULL)){perror("timer");exit(-1);}//信号处理signal(SIGALRM,signal_handler);while(1); //防止程序退出return 0;
}

代码编写 

SG90_test.c:

#include <stdio.h>
#include <sys/time.h>
#include <signal.h>
#include <stdlib.h>
#include <wiringPi.h>#define PWM 2int angle;
static int i;void signal_handler(int signum)
{if(i <= angle){digitalWrite(PWM, HIGH);}else{digitalWrite(PWM, LOW);}if(i == 40){ //40*500 = 20000us = 20msi = 0;}i++;}int main()
{struct itimerval itv;wiringPiSetup () ;pinMode (PWM, OUTPUT);//设定定时时间itv.it_interval.tv_sec = 0;itv.it_interval.tv_usec = 500;//设定开始生效,启动定时器的时间itv.it_value.tv_sec = 1;itv.it_value.tv_usec = 0;//设定定时方式if( -1 == setitimer(ITIMER_REAL, &itv, NULL)){perror("error");exit(-1);}//信号处理signal(SIGALRM,signal_handler);while(1){printf("enter the angle: 1 -> 0; 2 -> 45; 3 -> 90; 4 -> 135; 5 -> 180\n");scanf("%d",&angle);i = 0;}return 0;

实现效果:

在Linux界面输入角度值,舵机就会相应的转动多少度:

(缠黑纱绑带的一段视为方向指示端)

http://www.shuangfujiaoyu.com/news/43832.html

相关文章:

  • 网站上传到虚拟服务器2022千锋教育培训收费一览表
  • 新乡营销型网站苏州优化网站公司
  • 网站建设 该如何选好域名软文发布系统
  • 怎么可以做网站网络推广公司简介模板
  • 19互动网站建设百度指数官网入口登录
  • cnzz统计代码放在后台网站为什么没显示小红书怎么推广
  • 模板网建站正规接单赚佣金的app
  • 怎么用asp.net做网站可以做产品推广的软件有哪些
  • p2p理财网站开发框架排名前十的大学
  • 制作一个app软件seo诊断分析
  • 济南营销网站制作公司百度怎么推广
  • 网站备案号代码抖音seo关键词优化
  • 做阿里巴巴网站装修要多久株洲seo优化首选
  • 设计手机网站页面尺寸大小外贸网站推广软件
  • 武汉网站seo推广公司郑州网站推广公司
  • 成品网站前台源码互联网营销专家
  • 网络公关公司收费杭州网站运营十年乐云seo
  • 广告策划ppt案例济南网络seo公司
  • 做外汇查哪个网站武汉seo工作室
  • 五金模具技术支持 东莞网站建设2020站群seo系统
  • 成都免费招聘网站搜索引擎优化的内部优化
  • wordpress 新特性宁波seo软件免费课程
  • 包包网站建设可行性分析郑州搜狗关键词优化顾问
  • 做b2b网站管理系统最吸引人的引流话术
  • 一般做网站价格网络营销的12种手段
  • 服务器租用哪家好而且便宜厦门seo代理商
  • 做排名出租网站北京seo网络优化师
  • 工控机做网站服务器百度竞价推广联系方式
  • 移动端网站开发项目济南做seo排名
  • 海兴县网站建设包头整站优化