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

news/2024/7/10 22:30:23 标签: linux, c语言, 开发语言, 开源, 单片机, mcu, 物联网

【全志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.c
  2 #include <stdio.h>
  3 #include <wiringPi.h>
  4 #include <unistd.h>
  5
  6 #define BEEP 0 //0 设置0脚为蜂鸣器的控制引脚
  7
  8 int main (void)
  9 {
 10
 11     wiringPiSetup();//初始化wiringPi库
 12
 13     pinMode(BEEP, OUTPUT);//设置IO口的输入输出,输出
 14
 15     while(1)
 16     {
 17         sleep(1);
 18         digitalWrite (BEEP, HIGH);  //设置IO口输出低电平,蜂鸣器响起
 19         sleep(1);//1s
 20         digitalWrite (BEEP, LOW);
 21     }
 22     return 0;
 23 }

2、超声波实验

  //cs_wave.c
  1 #include <stdio.h>
  2 #include <sys/time.h>
  3 #include <wiringPi.h>
  4 #include <stdlib.h>
  5 #include <unistd.h>
  6
  7 #define Trig 0
  8 #define Echo 1
  9
 10 double getDistance()
 11 {
 12     struct timeval start;
 13     struct timeval stop;
 14
 15     pinMode(Trig,OUTPUT);//IO口初始化,设置IO口的输入输出
 16     pinMode(Echo,INPUT);//读它的值 输入
 17
 18     //1、Trig引脚 由低变高,高电平维持10us
 19     digitalWrite(Trig,LOW);
 20     usleep(5);
 21     digitalWrite(Trig,HIGH);
 22     usleep(10);
 23     digitalWrite(Trig,LOW);
 24     /*以上是初始化超声波*/
 25
 26     //2、模块内部开自动发波
 27
 28     //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 高电平持续时间
 34
 35     long diffTime = 1000000*(stop.tv_sec-start.tv_sec)+(stop.tv_usec-start.tv_usec);
 36     double dis = (double)diffTime/1000000*34000/2;//强转
 37
 38     return dis;
 39
 40 }

3.1、全志怎么配置定时器

  • 全志 通过定时器一秒输出一句Hello
//clock.c
 1 #include <stdio.h>
 2 #include <sys/time.h>
 3 #include <stdlib.h>
 4 #include <signal.h>
 5 static int i;
 6
 7 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,黑色GND
 1 #include <stdio.h>
 2 #include <sys/time.h>
 3 #include <stdlib.h>
 4 #include <signal.h>
 5 #include <wiringPi.h>
 6
 7 #define SG90Pin 5//定义5脚为舵机信号线
 8
 9 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.niftyadmin.cn/n/5422010.html

相关文章

搭建Zabbix监控系统

1、Zabbix基础 Zabbix是一个基于Web界面的企业级开源监控套件&#xff0c;提供分布式系统监控与网络监控功能。具备主机的性能监控&#xff0c;网络设备性能监控&#xff0c;数据库性能监控&#xff0c;多种告警方式&#xff0c;详细报表、图表的绘制等功能。检测的对象可以是L…

ubuntu22.04默认终端Gnome打不开解决方案

ubuntu22.04默认终端Gnome打不开 问题描述解决方案建议 问题描述 点击Ubuntu默认终端&#xff0c;圆圈旋转但是打不开&#xff0c;而vscode中的终端可以正常运行。 网上大多数的解决方案都是修改语言设置&#xff0c;但是我发现自己使用的是汉语&#xff0c;格式也是中国。 …

基于Python实现电商订单的数据分析

基于Python实现电商订单的数据分析 数据集&#xff1a;技术&#xff1a;功能&#xff1a;创新点&#xff1a;明确需求和目的&#xff1a; 数据集&#xff1a; 项目使用一家全球超市4年内的电商销售订单数据&#xff0c;数据集名为superstore_dataset2011-2015.csv。数据集共有…

Cassandra 集群安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装说明4.安装准备4.1.安装 JDK 114.2.安装 Python4.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/m…

基于SpringBoot的“医院信管系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“医院信管系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 功能结构图 系统首页界面图 用户注册界面图 医生…

Linux - 安装 Jenkins(详细教程)

目录 前言一、简介二、安装前准备三、下载与安装四、配置镜像地址五、启动与关闭六、常用插件的安装 前言 虽然说网上有很多关于 Jenkins 安装的教程&#xff0c;但是大部分都不够详细&#xff0c;或者是需要搭配 docker 或者 k8s 等进行安装&#xff0c;对于新手小白而已&…

小米消金加大科技赋能,打造特色金融服务体系

在金融科技应用愈发深入的当下&#xff0c;消费金融机构纷纷加速推进数字化转型&#xff0c;以科技赋能业务发展。中国银行业协会发布的《中国消费金融公司发展报告&#xff08;2023&#xff09;》指出&#xff0c;消费金融公司正在借助互联网、大数据、人工智能等数字技术&…

鸿蒙开发(四)-低代码开发

鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时&#xff0c;采用简化开发流程和减少编码量的方式来提高开发效率。 1&#xff1a;开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示&#xff…