【STM32单片机_(HAL库)】3-4-4【中断EXTI】【智能排队控制系统】项目实现

news2024/11/17 16:38:08

3-4-2系统框图及硬件接线

3-4-3系统代码框架搭建

4.软件—tasks.c文件编写

  • 排队控制系统状态机
    在这里插入图片描述

  • tasks.c

#include "tasks.h"
#include "led.h"
#include "beep.h"
#include "exti.h"
#include "lcd1602.h"
#include "gate.h"
#include "stdio.h"

enum//枚举,定义状态
{
    PASS_STATE,
    WAIT_STATE
};

uint32_t led1_task_cnt = 0;
uint32_t led2_task_cnt = 0;
uint32_t wait_cnt = 0;
uint32_t passenger = 0;

uint8_t led1_task_flag = 0;
uint8_t led2_task_flag = 0;
uint8_t state = PASS_STATE;

char message[16] = {0};//定义字符数组

void systick_isr(void)
{
    //如果处于允许通行的状态
    if(state == PASS_STATE)
    {
        //LED1以1秒的频率闪烁
        if (led1_task_cnt < 1000)
            led1_task_cnt++;
        else
        {
            led1_task_flag = 1;
            led1_task_cnt = 0;
        }
        //LED2不闪烁
        led2_off();
        //蜂鸣器不响
        beep_off();
        //开门
        gate_off();
    }
    //如果处于不允许通行的状态
    else if(state == WAIT_STATE)
    {
        //LED2以200ms的频率闪烁
        if (led2_task_cnt < 200)
            led2_task_cnt++;
        else
        {
            led2_task_flag = 1;
            led2_task_cnt = 0;
        }
        //LED1不闪
        led1_off();
        //蜂鸣器响
        beep_on();
        //关门
        gate_on();
        //计时3秒,之后
        if(wait_cnt < 3000)
            wait_cnt++;
        else
        {
            wait_cnt = 0;
            //进入允许通行状态
            state = PASS_STATE;
            //LCD显示状态
            lcd1602_show_line(1, 1, "PASS...");
        }
    }
}

void led1_task(void)
{
    if(led1_task_flag == 0)
        return;
    
    led1_task_flag = 0;
    
    led1_toggle();
}

void led2_task(void)
{
    if(led2_task_flag == 0)
        return;
    
    led2_task_flag = 0;
    
    led2_toggle();
}

void sensor_task(void)
{
    //如果检测到有人通过
    if(ia_flag_get() == TRUE && state == PASS_STATE)
    {
        //计数加1
        passenger++;
        //LCD显示状态
        sprintf(message, "PASS...%02d/05", passenger);//sprintf()函数
        lcd1602_show_line(1, 1, message);
        
    }

    //如果通过的人数超过5个
    if(passenger >= 5)
    {
        //计数清零
        passenger = 0;
        //进入不允许通行状态
        state = WAIT_STATE;
        //LCD显示状态
        lcd1602_show_line(1, 1, "WAIT...00/05");
    }
}

  • tasks.h
#ifndef __TASKS_H__
#define __TASKS_H__

#include "sys.h"

void systick_isr(void);
void led1_task(void);
void led2_task(void);
void sensor_task(void);

#endif

5.实物效果

ST-Link下载方式
请添加图片描述
请添加图片描述
请添加图片描述

智能排队控制系统

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

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

相关文章

直流负载的必要性

直流负载在电力系统中扮演着至关重要的角色&#xff0c;它的必要性主要体现在以下几个方面&#xff1a; 1. 能源转换效率&#xff1a;在现代电力系统中&#xff0c;电能的生成、传输和使用过程中&#xff0c;需要经过多次能量形式的转换。在这个过程中&#xff0c;直流负载可以…

虚幻引擎UE5入坑记

前言 Unreal Engine 和Unity Engine作为目前主流的游戏引擎&#xff0c;各有优缺点。而我目前的工作还是以Unity开发为主&#xff0c;在使用Unity的过程中&#xff0c;总避免不了听到或看到过UE相关的东西&#xff0c;从开始的好奇到后面想要去学习它&#xff0c;但是&#xf…

数据结构之AVL树的 “奥秘“

二叉树查询性能分析&#xff1a; 插入和删除操作都必须先查找&#xff0c;查找效率代表了二叉搜索树中各个操作的性能 对有n个结点的二叉搜索树&#xff0c;若每个元素查找的概率相等&#xff0c;则二叉搜索在二叉搜索树树平均查找长度是结点的深度的函数&#xff0c;即结点越深…

继电器的工作原理及作用

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言1.基本概念3.主要作用4.基本结构5.工作原理 前言 送给大学毕业后找不到奋斗方向的你&#xff08;每周不定时更新&…

联合贷款系统架构与流程解析

在联合贷款作为一种创新的融资模式&#xff0c;正逐渐受到越来越多金融机构和借款人的青睐。本文将分析联合贷款产品的优势&#xff0c;详细描述其流程&#xff0c;并结合实际案例展示联合贷款在实际应用中的场景。帮助读者增进对于联合贷款系统架构及其运作机制的了解。 一、…

600条最强 Linux 命令总结(非常详细)零基础入门到精通,收藏这一篇就够了

一、基本命令 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息 arch 显示机器的处理器架构 uname -…

UE5 UMG UI编辑器工作流

创建UI控件 1.在内容菜单&#xff08;Content Browser&#xff09;面板&#xff0c;点击添加&#xff08;Add&#xff09;或者右键空白处&#xff0c;依次选择用户界面&#xff08;User Interface&#xff09;/ 控件蓝图&#xff08;Widget Blueprint&#xff09;。 2.在弹出…

领域驱动模型设计与微服务架构落地(四)之DDD分层架构设计

那么聊完领域模型之后,其实我们会发现,接下来,很多的程序员可能就会直接上代码,因为很多的程序员觉得这个你的战略设计跟我们落地的代码没有关系。哪怕你可能说得天花乱坠,可是做为底层的开发人员,我只关心手头上的功能有没有实现,实现完成之后有没有BUG。 那么我们该如…

全网最详细的自动化测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 软件测试作为软件生命周期中不可缺少的组成部分&#xff0c;对提高软件质量起着重要作用。随着软件测试的发展&#xff0c;自动化测试技术也得到了很大提高。 …

CART算法:决策树的双面剑

一 引言 上一篇文章 决策树算法&#xff1a;ID3与C4.5的对比分析 中介绍了ID3和C4.5两种决策树算法&#xff0c;这两种决策树都只能用于分类问题&#xff0c;而CART&#xff08;classification and regression tree&#xff09;决策树算法它可以处理分类问题&#xff08;Class…

修复数据库中的 “Access Denied: SUPER Privilege Required” 错误

当您使用数据库时&#xff0c;您可能会看到错误消息&#xff1a;“Access denied; you need (at least one of) the SUPER privilege(s) for this operation”。当您的数据库用户没有足够的权限来执行某些操作时&#xff0c;就会发生这种情况。 本文中&#xff0c;我们将查看导…

SQL手工注入漏洞测试(MongoDB数据库)靶场通关攻略

构造数据回显 });return ({title:1,content:2 成功回显1,2&#xff0c;接下来我们开始尝试查询数据库 });return({title:tojson(db),content:2 得到之后我们就可以继续查询他的表名了 });return({title:tojson(db.getCollectionNames()),content:2 最后我们就可以爆出他表里的数…

【EI会议截稿通知】第六届光电科学与材料学术会议 (ICOSM 2024)

第六届光电科学与材料学术会议 (ICOSM 2024) 2024 6th Conference on Optoelectronic Science and Materials 重要通知 重要通知&#xff1a;经组委会商议决定&#xff0c;第六届光电科学与材料学术会议 (ICOSM 2024) 将于2024年9月7日线上召开&#xff0c;具体议程及线上参…

20L水箱植保无人机技术详解

1. 性能与载重 高效作业能力 本款20L水箱植保无人机专为大面积农田作业设计&#xff0c;具备出色的性能与载重能力。其最大载重量可达20kg&#xff0c;不仅轻松搭载20L的水箱及药液&#xff0c;还能根据实际作业需求配置额外的传感器、摄像头等设备&#xff0c;实现多功能集成…

string类题目(上)

string类题目 题目来源&#xff08;Leetcode&#xff09; 题目一&#xff1a;仅仅反转字母 分析 这个反转的特点在于只反转字母&#xff0c;不反转特殊字符。 法一&#xff1a;如果我们让一个正向迭代器指向第一个字符&#xff0c;让一个反向迭代器指向最后一个字符&#xf…

如何使用C4D云渲染服务打开图片渲染器窗口?

C4D以其对第三方渲染器的广泛支持而闻名&#xff0c;能够创造出高质量的视觉作品。这些渲染效果涵盖了逼真的光照和阴影效果、真实的材质质感、精细入微的图像细节&#xff0c;以及令人印象深刻的快速渲染能力。C4D云渲染功能进一步增强了其性能&#xff0c;用户可以通过一个统…

Win10用户必备!三款超实用第三方录屏软件大推荐

大家好&#xff01;今天我要和大家分享一下Win10的录屏操作以及使用体验&#xff0c;并且还会推荐几款好用的录屏工具&#xff0c;希望对大家有所帮助。 Win10录屏操作以及使用体验&#xff1a; Win10自带的录屏主要是为游戏录制而开发的&#xff0c;系统自带不需要额外下载客…

拍立淘API返回值:商品搜索与广告推广的完美结合

拍立淘&#xff08;一种基于图像搜索的购物功能&#xff0c;常见于淘宝等电商平台&#xff09;的API&#xff08;应用程序接口&#xff09;返回值在商品搜索与广告推广的结合中扮演了关键角色。这种结合不仅提升了用户体验&#xff0c;还通过精准推荐和广告展示增加了商家的曝光…

DDIA 分布式数据的分区与复制 - 基于 Redis、Kafka、Elasticsearch 的深入分析

引言 本文基于《Designing Data-Intensive Applications》一书&#xff08;设计数据密集型应用&#xff0c;简称 DDIA&#xff09;&#xff0c;深入探讨了 Redis、Kafka 和 Elasticsearch 等常用组件的分区与复制机制。通过这些案例分析&#xff0c;我们可以更好地理解分布式系…

python-竞赛技巧(赛氪OJ)

[题目描述] 在 ACM 竞赛中&#xff0c;当遇到有两个队伍&#xff08;人&#xff09; 解出相同的题目数量的时候&#xff0c;我们需要通过他们解决问题的总时间进行排序。 一共有 N 条时间被以时( Hours )&#xff0c; 分( Minutes )&#xff0c;秒( Seconds )的形式记录。 你必…