【全志H616】1 --用orangepi控制硬件

【全志H616】1 --用orangepi控制硬件

本文介绍了如歌用orangepi 控制蜂鸣器&超声波模块,通过键盘输入1、2、3、4来控制转动角度舵机模块;同时还介绍了利用全志如何配置定时器;以及查看H616引脚状态的命令等…

  • 超声波模块和舵机模块的讲解,在我之前写的博客里面啦

https://blog.csdn.net/Super_Fisher_man/article/details/135577251


  • 引脚说明
gpio readall //查看H616的引脚情况,及其状态

在这里插入图片描述

1、蜂鸣器实验

  1 //beep.c2 #include <stdio.h>3 #include <wiringPi.h>4 #include <unistd.h>56 #define BEEP 0 //0 设置0脚为蜂鸣器的控制引脚78 int main (void)9 {1011     wiringPiSetup();//初始化wiringPi库1213     pinMode(BEEP, OUTPUT);//设置IO口的输入输出,输出1415     while(1)16     {17         sleep(1);18         digitalWrite (BEEP, HIGH);  //设置IO口输出低电平,蜂鸣器响起19         sleep(1);//1s20         digitalWrite (BEEP, LOW);21     }22     return 0;23 }

2、超声波实验

  //cs_wave.c1 #include <stdio.h>2 #include <sys/time.h>3 #include <wiringPi.h>4 #include <stdlib.h>5 #include <unistd.h>67 #define Trig 08 #define Echo 1910 double getDistance()11 {12     struct timeval start;13     struct timeval stop;1415     pinMode(Trig,OUTPUT);//IO口初始化,设置IO口的输入输出16     pinMode(Echo,INPUT);//读它的值 输入1718     //1、Trig引脚 由低变高,高电平维持10us19     digitalWrite(Trig,LOW);20     usleep(5);21     digitalWrite(Trig,HIGH);22     usleep(10);23     digitalWrite(Trig,LOW);24     /*以上是初始化超声波*/2526     //2、模块内部开自动发波2728     //3、直到 Echo 变为1,才执行下面的程序,否者卡住29     while(!digitalRead(Echo));//读 Echo 的值;要用digitalRead()函数30     gettimeofday(&start,NULL);31     //4、直到 Echo 变为0,才执行下面程序32     while(digitalRead(Echo));33     gettimeofday(&stop,NULL);//抓取两次时间,计算出时间差,得出 Echo 高电平持续时间3435     long diffTime = 1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec-start.tv_usec);36     double dis = (double)diffTime/1000000*34000/2;//强转3738     return dis;3940 }

3.1、全志怎么配置定时器

  • 全志 通过定时器一秒输出一句Hello
//clock.c1 #include <stdio.h>2 #include <sys/time.h>3 #include <stdlib.h>4 #include <signal.h>5 static int i;67 void signal_handler(int signum)8 {9     //1000  0.5*2000
10     i++;
11     if(i == 2000)
12     {
13         printf("hello\n");
14         i = 0;
15     }
16 }
17
18
19 int main()
20 {
21     struct itimerval itv;
22     //设定定时时间
23     itv.it_interval.tv_sec = 0;
24     itv.it_interval.tv_usec = 500;//0.5ms发送一次信号
25     //设定开始生效,启动定时器的时间
26     itv.it_value.tv_sec = 1;
27     itv.it_value.tv_usec = 0;
28     //设定定时方式
29     if(setitimer(ITIMER_REAL,&itv,NULL)) //SIGALRM
30     {
31         //ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。
32         //ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。
33         //ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。
34         perror("error");
35         exit(-1);
36     }
37     //信号处理
38     signal(SIGALRM,signal_handler);//这边需要捕获对应的信号进行逻辑相关处理
39         //接收信号,跳到signal_handler函数
40
41     while(1);
42     return 0;
43
44 }

3.2 舵机开发:通过键盘输入1、2、3、4来控制转动角度

  // sg90.c// 橙色线,信号,红色VCC,黑色GND1 #include <stdio.h>2 #include <sys/time.h>3 #include <stdlib.h>4 #include <signal.h>5 #include <wiringPi.h>67 #define SG90Pin 5//定义5脚为舵机信号线89 int jd = 2;
10
11
12 void signal_handler(int signum)
13 {
14     static int i;
15     //500ms, 2/40 = 1/20 为高电平
16     if(i<=jd)
17     {
18         digitalWrite(SG90Pin,HIGH);
19     }
20     else
21     {
22         digitalWrite(SG90Pin,LOW);
23     }
24     if(i == 40)
25     {
26         i = 0;
27     }
28     i++;
29 }
30
31
32 int main()
33 {
34     struct itimerval itv;
35     jd = 0;
36     wiringPiSetup();
37     pinMode(SG90Pin, OUTPUT);//定义为输出
38
39     //设定定时时间
40     itv.it_interval.tv_sec = 0;
41     itv.it_interval.tv_usec = 500;//0.5ms发送一次信号
42     //设定开始生效,启动定时器的时间
43     itv.it_value.tv_sec = 1;
44     itv.it_value.tv_usec = 0;
45     //设定定时方式
46     if(setitimer(ITIMER_REAL,&itv,NULL)) //SIGALRM
47     {
48         //ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。
49         //ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。
50         //ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。
51         perror("error");
52         exit(-1);
53     }
54     //信号处理
55     signal(SIGALRM,signal_handler);//这边需要捕获对应的信号进行逻辑相关处理
56         //接收信号,跳到signal_handler函数
57
58     while(1)
59     {
60         printf("input jd:1-0、2-45、3-90,4-135\n");
61         scanf("%d",&jd);
62
63     }
64     return 0;
65
66 }

欢迎大家一起交流讨论!

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

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

相关文章

WordPress供求插件API文档:获取市场类型

请注意&#xff0c;该文档为&#xff1a; WordPress供求插件&#xff1a;一款专注于同城生活信息发布的插件-CSDN博客文章浏览阅读396次&#xff0c;点赞6次&#xff0c;收藏5次。WordPress供求插件&#xff1a;sliver-urban-life 是一款专注于提供同城生活信息发布与查看的插件…

JVM 面试——G1和ZGC的区别

ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器ZGC的目标主要有4个 支持TB量级的堆。我们生产环境的硬盘还没有上TB呢&#xff0c;这应该可以满足未来十年内&#xff0c;所有JAVA应用的需求了吧。最大GC停顿时间不超10ms。目前一般线上环境运行良好的JAVA应用Minor …

接口自动化测试框架postman tests常用方法

postman常用方法集合&#xff1a; 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); pm.environment.set("key", "value");//postman 5.0以上版本设置环境变量的方法 2.设置全局变量 postman.setGlobalVariable(&…

杂七杂八111

MQ 用处 一、异步。可提高性能和吞吐量 二、解耦 三、削峰 四、可靠。常用消息队列可以保证消息不丢失、不重复消费、消息顺序、消息幂等 选型 一Kafak:吞吐量最大&#xff0c;性能最好&#xff0c;集群高可用。缺点&#xff1a;会丢数据&#xff0c;功能较单一。 二Ra…

文献速递:深度学习乳腺癌诊断---使用深度学习改善乳腺癌组织学分级

Title 题目 Improved breast cancer histological grading using deep learning 使用深度学习改善乳腺癌组织学分级 01 文献速递介绍 乳腺癌组织学分级是乳腺癌中一个确立的临床变量&#xff0c;它包括来自三个方面的信息&#xff0c;即小管形成程度、核多态性和有丝分裂计…

wordpress博客趣主题个人静态网页模板

博客趣页面模板适合个人博客&#xff0c;个人模板等内容分享。喜欢的可以下载套用自己熟悉的开源程序建站。 博客趣主题具有最小和清洁的设计&#xff0c;易于使用&#xff0c;并具有有趣的功能。bokequ主题简约干净的设计、在明暗风格之间进行现场切换。 下载地址 清新个人…

el-table中 el-popover 性能优化

场景&#xff1a;在 el-table 中使用 el-popover ,出现了 loading 加载卡顿的问题&#xff0c;接口返回的数据的时间大概是 140ms &#xff0c;所以不是接口慢的原因&#xff1b;通过对表中结构的逐步排查&#xff0c;发现是表中的 某一行 所影响的&#xff1b;并且 其中含有 e…

【Linux杂货铺】操作系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 冯诺依曼体系结构 &#x1f4c2; 拓展问题&#xff1a;程序为什么要被加载到内存&#xff1f; &#x1f4c2; 主机与主机的交互 &#x1f4c1; 操作系统的概念 &#x1f4c2; 作用 &#x1f4c2; 理解“管理” &#x…

从 VNCTF2024 的一道题学习QEMU Escape

说在前面 本文的草稿是边打边学边写出来的&#xff0c;文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似&#xff0c;在分析结束以后我又在部分比较模糊的地方加入了一些补充&#xff0c;因此阅读起来可能会相对轻松。&#xff08;当然也不排除这是…

注意力机制Attention、CA注意力机制

一、注意力机制 产生背景&#xff1a; 大数据时代&#xff0c;有很多数据提供给我们。对于人来说&#xff0c;可以利用重要的数据&#xff0c;过滤掉不重要的数据。那对于模型来说&#xff08;CNN、LSTM&#xff09;&#xff0c;很难决定什么重要、什么不重要&#xff0c;因此…

QComboBox相关的qss学习

QT有关QCobobox控件的样式设置&#xff08;圆角、下拉框&#xff0c;向上展开、可编辑、内部布局等&#xff09;_qcombobox样式-CSDN博客 原始图&#xff1a; 红色边框&#xff1a; QComboBox{ border:2px solid rgb(255, 85, 0); } 绿色背景&#xff1a; QComboBox{ border…

疫情网课管理系统|基于springboot框架+ Mysql+Java+Tomcat的疫情网课管理系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 ​编辑 学生功能模块 管理员功能 教师功能模块 系统功能设计 数据库E-R图设计 lun…

【趣味项目】一键生成LICENSE

【趣味项目】一键生成LICENSE 项目地址&#xff1a;GitHub(最新版本) | GitCode(旧版本) 项目介绍 一款用于自动生成开源项目协议的工具&#xff0c;可以通过 npm 进行安装后在命令行使用&#xff0c;非常方便 使用方式 npm install xxhls/get-license -gget-license --l…

ELK之使用Filebeat插件收集日志到Logstash

对于Springboot项目接入ELK非常方便&#xff0c;对于非maven&#xff0c;非Spring项目来说就比较复杂&#xff0c;这个时候我们就可以使用Filebeat插件还完成日志的收集发送工作。 Filebeat介绍 Filebeat是用于转发和收集数据的轻量级工具&#xff0c;Filebeat可以监视指定的…

蓝桥杯深度优先搜索|剪枝|N皇后问题|路径之谜(C++)

搜索&#xff1a;暴力法算法思想的具体实现 搜索&#xff1a;通用的方法&#xff0c;一个问题如果比较难&#xff0c;那么先尝试一下搜索&#xff0c;或许能启发出更好的算法 技巧&#xff1a;竞赛时遇到不会的难题&#xff0c;用搜索提交一下&#xff0c;说不定部分判题数据很…

致净·未来 华帝核心渠道(V60)生态大会在上海外滩举办

“百年未有之大变局就是中国崛起了,我们民族品牌崛起了!”龙永图在华帝核心渠道(V60)生态大会上如此说道。 干净舒适的厨房空间,高档时尚的厨房电器,智能便捷的科技设计,372项“好清洁”技术为净洁厨房保驾护航……这些充满未来科幻感的时尚健康生活,过去我们难以想象,如今梦想…

CleanMyMac X2024永久免费的强大的Mac清理工具

作为产品功能介绍专员&#xff0c;很高兴向您详细介绍CleanMyMac X这款强大的Mac清理工具。CleanMyMac X具有广泛的清理能力&#xff0c;支持多种文件类型的清理&#xff0c;让您的Mac始终保持最佳状态。 系统垃圾 CleanMyMac X能够深入系统内部&#xff0c;智能识别并清理各种…

java中几种对象存储(文件存储)中间件的介绍

一、前言 在博主得到系统中使用的对象存储主要有OSS&#xff08;阿里云的对象存储&#xff09; COS&#xff08;腾讯云的对象存储&#xff09;OBS&#xff08;华为云的对象存储&#xff09;还有就是MinIO 这些玩意。其实这种东西大差不差&#xff0c;几乎实现方式都是一样&…

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…

1.Python数据分析—数据分析与挖掘详讲

1.Python数据分析—数据分析与挖掘详讲 一个人简介二数据分析与挖掘概述三什么是数据分析和挖掘四数据分析与挖掘在不同领域的应用4.1医疗领域&#xff1a;4.1.1 建立疾病数据库&#xff1a;4.1.2 临床决策支持&#xff1a;4.1.3 疾病预警和监控&#xff1a; 4.2 电子商务领域&…