全志ARM-SG90舵机

  控制转角

向黄色信号线“灌入”PWM信号。 PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据: 不同的PWM波形对应不同的旋转角度,以20ms为周期,50hz为频率的PWM波

 

定时器需要定时20ms,关心的单位0.5ms, 20ms = 0.5ms * 40

1.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;};

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

2.判断是否有信号传入

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

setitimer()原型:

 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

3. 信号进行逻辑处理

signal(SIGALRM,signal_handler);

成功执行时,返回0。失败返回-1

实现代码:

SG90编程实现:键盘输入不同的值,让舵机转动不同角度,软件PWM实现

#include <stdio.h>#include <sys/time.h>#include <stdlib.h>#include <signal.h>int jd;static int i = 0;void signal_handler(int signum){if(i <= jd){digitalWrite(SG90Pin, HIGH);}else{digitalWrite(SG90Pin, LOW);}if(i == 40){i = 0;}i++;}int main(){struct itimerval itv;jd = 0;wiringPiSetup();pinMode(SG90Pin, 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("input jd: 1-0  2-45  3-90  4-135 \n");scanf("%d",&jd);}return 0;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/10304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-checkbox复选框做单选

思路&#xff1a;&#xff08;所有选择项都在一个数组中&#xff09;给每一个选项设置一个是否选中的属性&#xff08;checked&#xff09;&#xff0c;通过change事件来改变,数组中每一项的checked&#xff0c;如果change事件的值是true,那么就要把数组中&#xff08;如根据唯…

零基础入门篇①③ Python可变序列类型--列表

Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏限时一个月(5.8~6.8)重…

vue阶段案例,练习filter、map、forEach,双向绑定,三元表达式,以及图片滚动,文字跳动等等。

阶段案例 通过案例来练习双向绑定&#xff0c;三元表达式&#xff0c;以及图片滚动&#xff0c;文字跳动等等。 代码如下&#xff1a; <template><table class"bjtp" ><div class"title" >{{title}}</div><div class"s…

【解决Android Studio】cmake报错找不到vulkan包

1 报错信息 CMake Error at D:/Android/project/cmake/3.10.2.4988404/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find Vulkan (missing: Vulkan_LIBRARY) Call Stack (most recent call first): 2. 错误原因 minSdk版本不对&am…

18.Blender 渲染工程、打光方法及HDR贴图导入

HDR环境 如何导入Blender的HDR环境图 找到材质球信息 在右上角&#xff0c;点击箭头&#xff0c;展开详细部分 点击材质球&#xff0c;会出现下面一列材质球&#xff0c;将鼠标拖到第二个材质球&#xff0c;会显示信息 courtyard.exr 右上角打开已渲染模式 左边这里选择世界…

动作识别 slowfast动作识别项目记录

动作识别 slowfast动作识别项目记录

如何在自己的服务器上快速搭建第一个网站(其一)

根据上篇文章相信很多人以及成功搭建服务器啦。今天我们讲下如何在自己的服务器快速搭建第一个网站的一些重要配置&#xff0c;以及搭建网站的必备环境。干货满满&#xff0c;希望大家能够关注点赞收藏。 我会不定期更新一些实用的工具&#xff0c;欢迎大家私信评论喔&#xf…

12个网上赚钱野路子信息差,人人可做的赚钱小项目!

在这个多元化的时代&#xff0c;副业已经成为许多人增加收入、实现自我价值的重要途径。今天&#xff0c;我们就来聊聊那些既有趣又能赚钱的副业项目&#xff0c;让你的钱包鼓起来&#xff01; 1.文字创作 写作不仅是情感的宣泄&#xff0c;更是财富的积累。无论是自媒体文、软…

事件代理 浅谈

事件代理是一种将事件处理委托给父元素或祖先元素来管理的技术。当子元素触发特定事件时&#xff0c;该事件不会直接在子元素上进行处理&#xff0c;而是会冒泡到父元素或祖先元素&#xff0c;并在那里进行处理。这样做的好处是可以减少事件处理函数的数量&#xff0c;提高性能…

VR智慧文旅:开启“韵味”旅游季的新篇章

为了充分满足游客的假日文化旅游需求&#xff0c;各地纷纷“解锁”新花样&#xff0c;沉浸式实景观展震撼“出圈”。在数字化浪潮的推动下&#xff0c;文化旅游行业正经历着变革&#xff0c;在万物皆可沉浸的时代&#xff0c;VR智慧文旅燃起了不一样的热度。 许多业内人士认为&…

hdfs磁盘清理历史数据

hdfs集群磁盘清理历史数据流程如下&#xff1a; #可以查看web界面hdfs集群的磁盘使用率,并记录下来,对比清理后的效果: 清理前 86.00% 194.24TB/225.85TB #统计warehouse目录下的磁盘使用量(目前表都是建在该路径下) hadoop fs -du -h /user/hive/warehouse #统计bak目录下磁…

Tiff文件解析和PackBits解压缩

实现了Tiff图片文件格式的解析&#xff0c;对Tiff文件中的PackBits压缩格式进行解压缩&#xff0c;对Tiff文件中每一个Frame转换成BufferedImage显示。 Java语言实现&#xff0c;Eclipse下开发&#xff0c;AWT显示图片。 public static TIFF Parse(final byte[] bytes) throw…

Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上

目录 步骤一&#xff1a;创建两个 Java 业务 Pod步骤二&#xff1a;创建一个 Nginx Pod步骤三&#xff1a;创建一个 Service步骤四&#xff1a;创建一个 Ingress注意事项 要在 Kubernetes 上搭建一个 Nginx 的 Pod&#xff0c;并确保传入的 API 请求被均匀地分发到两个 Java 业…

排序算法(Java版)

目录 1、直接插入排序2、希尔排序3、直接选择排序4、堆排序5、冒泡排序6、快速排序6.1 递归实现6.2 非递归实现 7、归并排序7.1 递归实现7.2 非递归实现 8、性能分析 今天我们学习一种算法&#xff1a;排序算法&#xff08;本文的排序默认是从小到大顺序&#xff09;&#xff0…

C++纯C实现贪吃蛇小游戏

公众号&#xff1a;编程驿站 #include <stdio.h> #include <windows.h> #include <stdlib.h> #include <time.h>//描述蛇的节点信息 typedef struct SnakeNode {int x;int y; } Snode;//箱子&#xff1a;放置蛇的所有节点 Snode snakes[100]; //保存…

渗透思考题

一&#xff0c;尝试登录。 客户端对密码进行哈希处理并缓存密码hash&#xff0c;丢弃实际的明文密码&#xff0c;然后将用户名发送到服务器&#xff0c;发起认证请求 密文存储位置&#xff1a;数据库文件位于C:WindowsSystem32configsam&#xff0c;同时挂载在注册表中的HKLMSA…

C语言【文件操作 1】

文章目录 1.为什么使用文件2.文件是什么&#xff1f;2.1程序文件2.2数据文件 3.二进制文件和文本文件4.文件的打开和关闭4.1流和标准流流标准流 4.2文件指针4.3文件的打开和关闭 结语 1.为什么使用文件 很简单 长久的存储数据 如果没有文件&#xff0c;我们写程序所产生的数据…

商米-android-使用NFC读IC卡,身份证云解和IC卡同时兼容

商米介绍地址&#xff1a;https://www.sunmi.com/ 商米是一个提供手持PDA的一个很好的解决方案厂商&#xff0c; 也有其他的一些桌面设备。 其中商米提供的软件服务中&#xff0c;比较特别的是 身份证云解功能。 此处重点说明一下&#xff0c;身份证云解功能。 以往市面上的身…

Vue学习JSON.stringify()将Object类型转换成String类型

Vue学习JSON.stringify&#xff08;&#xff09;将Object类型转换成String类型 一、前言1、基本用法2、复杂对象转换3、过滤器函数4、序列化函数 一、前言 JSON.stringify() 是一个 JavaScript 函数&#xff0c;用于将 JavaScript 值转换为 JSON 字符串。它接受一个 JavaScrip…

深入探索MySQL视图

前言 在数据库的世界里&#xff0c;MySQL视图作为数据抽象的一把利剑&#xff0c;为我们提供了一种灵活而高效的方式来管理和查询数据。它不仅能够简化复杂的查询逻辑&#xff0c;还能在不改动底层数据结构的前提下&#xff0c;实现数据的定制化展示与访问控制。本文旨在深入解…