【全志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.hqwc.cn/news/540836.html

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

相关文章

Seata 2.x 系列【11】多数据源分布式事务

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 多数据…

The service already exists!怎么解决,Windows怎么安装/卸载服务?

问题描述 有时候,我们在Windows系统上安装服务时会遇到报错,The service already exists! 问题分析 这个报错说明此服务已经存在了,所以我们不能再次安装,但有时候我们明明是第一次安装,为什么也会报这个错误呢? 在Windows上注册服务通常需要使用命令行工具或者特定的…

保姆级OpenSSL下载及安装教程

下载地址下载步骤安装步骤环境变量配置查看是否安装成功下载地址 官网链接:(https://slproweb.com/products/Win32OpenSSL.html ) 点击跳转 下载步骤 以下步骤截图,以当前官网界面为标准,后有变动请提示博主修改。 点击链接跳转后界面为 往下滚动找到安装包下载按钮…

测试人员Bug书写规范

&#x1f4cb; 个人简介 作者简介&#xff1a;大家好&#xff0c;我是凝小飞&#xff0c;软件测试领域作者支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 在测试人员日常工作中&#xff0c;关于bug的编写和定义是一个比较经常的工作&#xff0c;如果bug编写描…

预设收支类别,高效管理账户,轻松记录每一笔明细

在快节奏的现代生活中&#xff0c;财务管理变得越来越重要。你是否曾为繁琐的记账工作而烦恼&#xff1f;是否曾在忙碌的生活中遗漏了重要的收支信息&#xff1f;现在&#xff0c;有了这款强大的财务管理工具&#xff0c;你将能够轻松记录每一笔收支明细&#xff0c;实现高效的…

【分类讨论】【解析几何】【 数学】【推荐】1330. 翻转子数组得到最大的数组值

作者推荐 视频算法专题 本文涉及知识点 分类讨论 解析几何 LeetCode1330. 翻转子数组得到最大的数组值 给你一个整数数组 nums 。「数组值」定义为所有满足 0 < i < nums.length-1 的 |nums[i]-nums[i1]| 的和。 你可以选择给定数组的任意子数组&#xff0c;并将该子…

fs模块 练习题

编写程序&#xff1a; 在文件夹data里有文件a.txt和文件b.txt。将文件a.txt和文件b.txt的内容读取后写入文件c.txt中。 一、同步读取 const fs require(fs); let datas1fs.readFileSync(./data/a.txt); let datas2fs.readFileSync(./data/b.txt); let datas3datas1datas2;//对…

普林斯顿算法讲义(一)

原文&#xff1a;普林斯顿大学算法课程 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 1. 基础知识 原文&#xff1a;algs4.cs.princeton.edu/10fundamentals 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 概述。 本书的目标是研究各种重要和有用的算法——…

VASPMATE:集成用户界面程序 + 高通量计算

主要功能&#xff1a; “开发了一个集成的用户界面C程序&#xff0c;通过VASP代码进行高通量&#xff08;HT&#xff09;第一性原理计算&#xff0c;简称VASPMATE&#xff0c;具有强大的预处理功能&#xff0c;可用于各种结构建模和计算参数设置以及后处理分析用于电子、能量和…

Hadoop大数据应用:HDFS 集群节点扩容

目录 一、实验 1.环境 2.HDFS 集群节点扩容 二、问题 1.rsync 同步报错 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构软件版本IP备注hadoop NameNode &#xff08;已部署&#xff09; SecondaryNameNode &#xff08;已部署&#xff09; Resourc…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的安全帽检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;开发先进的安全帽识别系统对提升工作场所的安全性至关重要。本文详细介绍了使用深度学习技术创建此类系统的方法&#xff0c;并分享了完整的实现代码。系统采用了强大的YOLOv8算法&#xff0c;并对其与YOLOv7、YOLOv6、YOLOv5的性能进行了详细比较&#xff0c;…

ElasticSearchLinux安装和springboot整合的记录和遇到的问题

前面整合遇到的一些问题有的记录在下面了&#xff0c;有的当时忘了记录下来&#xff0c;希望下面的能帮到你们 1&#xff1a;Linux安装ES 下载安装&#xff1a; 参考文章&#xff1a;连接1 连接2 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch…