Arduino使用定时器设置周期时间运行程序

1、用Arduino millis() 函数 实现一定程度上的多任务系统,可以设置不同时间的任务周期去执行对应的程序。比如需要10毫秒执行一次的程序、100毫秒执行一次的程序、1秒执行一次的程序。

2、Delay(ms)是延时函数,使用该延时函数,后面的程序将会暂停执行

millis() 多任务,代码


const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;  
long a=0;
long b=0;
int count=0;

void setup() {
  // 打开串口
    Serial.begin(9600);
    while (!Serial) 
    {
        ; //等待串口连接。仅本机USB口使用。
    }
    Serial.println("Serial is opened.");
}

void loop() {
  // put your main code here, to run repeatedly:
  TimeProc();
}

void TimeProc()
{
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    

    //
    Serial.print("Counts a is: "); 
    Serial.print(a); 
    Serial.println(";");

    Serial.print("Counts b is: "); 
    Serial.print(b); 
    Serial.println(";");
    
    b++;
  } 
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  
     
    a++;

    /*
   //
    if(count>10)
    {
      count=0;
      a++;
    }
    count++;  
    */     
  }    
}

串口检测

3、测试控制器从开机到程序运行花费时间

代码:


const long _100msTime = 100;      // 100 milli seconds
unsigned long _100msLastTime; 
const long _1000msTime = 1000;    // 1000 milli seconds
unsigned long _1000msLastTime;  
long a=0;
long b=0;
int count=0;

unsigned long startTime; // 用于记录开始时间
unsigned long endTime;   // 用于记录结束时间

void startTimer() 
{
  startTime = millis(); // 记录开始时间
} 
void stopTimer() 
{
  endTime = millis(); // 记录结束时间
} 
unsigned long getElapsedTime() 
{
  return endTime - startTime; // 返回经过的毫秒数
}

void setup() 
{
  startTimer();
  // 打开串口
    Serial.begin(9600);
    while (!Serial) 
    {
        ; //等待串口连接。仅本机USB口使用。
    }
    Serial.println("Serial is opened.");
}

void loop() {
  // put your main code here, to run repeatedly:
  stopTimer();
  unsigned long elapsed = getElapsedTime(); // 获取经过的时间 
  Serial.print("StartTime  is: ");
  Serial.print(elapsed); 
  Serial.println(";");

  delay(2000);
  
  TimeProc();
}

void TimeProc()
{
  
     
  //1000ms执行一次
  if ((millis() - _1000msLastTime) >= _1000msTime)
  {
    _1000msLastTime = millis( );    


    //
    Serial.print("Counts a is: "); 
    Serial.print(a); 
    Serial.println(";");

    Serial.print("Counts b is: "); 
    Serial.print(b); 
    Serial.println(";");
    
    b++;
  } 
  //100ms执行一次
  if ((millis() - _100msLastTime) >= _100msTime)
  {
    _100msLastTime = millis( );  
     
    a++;

    /*
   //
    if(count>10)
    {
      count=0;
      a++;
    }
    count++;  
    */     
  }    
}

串口检测

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

租一台服务器多少钱决定服务器的价格因素有哪些

租一台服务器多少钱决定服务器的价格因素有哪些 大家好我是艾西,服务器这个名词对于不从业网络行业的人们看说肯定还是比较陌生的。在21世纪这个时代发展迅速的年代服务器在现实生活中是不可缺少的一环,平时大家上网浏览自己想要查询的信息等都是需要服…

统信UOS上图形化配置系统和应用代理

原文链接:统信UOS上图形化配置系统和应用代理 hello,大家好啊,今天我要给大家介绍的是在统信UOS操作系统上如何通过图形化界面配置系统代理和应用代理。在许多公司的内网环境中,直接访问互联网可能受到限制,但通常会提…

关于linux 磁盘占用排查问题

1.关于磁盘 查看整体磁盘占用大小 df -h 2. 先排除mysql 数据大小 查询库的大小 SELECT table_schema AS "Database", ROUND(SUM(data_length index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema…

ACL与NAT

目录 一、ACL (一)ACL基本理论 (二)ACL的类型 1.基本ACL 2.高级ACL 3.二层ACL (三)基本原理 (四)项目实验 通配符掩码 二、NAT (一)基本理论 &am…

【XR806开发板试用】+Linux小白上手开发笔记(2)——阿里云云方案

##0、前言 在之前文章中提到,在windows中搭建unbuntu对于新手小白来说非常不友好。因此一直在找解决方案,找到一条非常有意思的方案。希望对大家有点帮助。 1、环境搭建 方案核心————阿里云云 具体步骤如下: step1:注册。由…

【Python可视化系列】一文教会你绘制美观的柱状图(理论+源码)

一、前言 前面我详细介绍了如何绘制漂亮的折线图: 【Python可视化系列】一文彻底教会你绘制美观的折线图(理论源码) 本篇文章将教你绘制美观的柱状图。柱状图(Bar Chart)是一种常用的统计图表,用于展示不同…

Nginx 代理 MySQL 连接,并限制可访问IP

1.前言 我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。 好巧不巧,线上业务遇到b…

自动化测试(一)配置selenium环境(带图文,防止踩坑)

目录 配置selenium环境 1. 安装setuptools 2. 安装selenium 3. 安装驱动 如何查看谷歌浏览器版本 上一章讲述了如何安装python环境,那么,这一章讲述的是,如何配置自动化测试(selenium)环境~吧🤷‍♀️…

设计模式详解---抽象工厂模式

继续前言,工厂模式中抽象工厂模式的讲解: 1. 前面的工厂模式有啥问题? 前面的工厂模式有这么个问题:一个产品就给了一个工厂,这样子如果产品变多,系统就会很复杂: 2. 解决方法 我们可以按照手…

前端js实现将异步封装成promise然后用async await转同步

(一)需求背景: 哈喽 大家好啊,今天遇到一个问题,需要将异步请求转换成同步 (二)相关代码: function getInfo() {return new Promise((resolve,reject)> {setTimeout(()> {re…

vue_域名部署无法访问后端

前言 目前部署的比较另类,因为服务器为windows,目前还不是很会nginx,所以现在就只能在服务器上安装nodejs,然后直接使用npm run dev命令行的方式运行项目 遇到的坑 使用ip访问前端的时候,就可以访问,但是…

排序之归并排序

归并排序是第一个可以被实际使用的排序算法。归并排序性能不错,其复杂度为O(nlogn)。 归并排序是一种分治算法。其思想是将原始数组切分成较小的数组,直到每个小数组只有一 个位置,接着将小数组归并成较大的数组,直到最后只有一个…

获取Java类路径

利用System.getProperty(“java.class.path”)可以获取Java类路径(Java class path)。 package com.thb;import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {System.out.println(System.getP…

pycharm在终端处删除连接过的服务器

目录 操作 操作 打开设置处的SSH配置进行删除

宝塔面板快速搭建本地网站结合内网穿透实现远程访问【无需公网IP】

文章目录 前言1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 前言 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等&…

Python+Yolov8+onnx-deepsort方法物体人流量识别统计

程序示例精选 PythonYolov8onnx-deepsort方法物体人流量识别统计 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonYolov8onnx-deepsort方法物体人流量识别统计》编写代码,…

【采坑分享】npm login/publish/whoami失败采坑,解决npmERR426、ETIMEDOUT、ECONNREFUSED等错误

目录 前言背景: 采坑之路: 1.修改https为http,问题还在 2.修改为淘宝镜像,问题还在 3.修改为官网地址,问题还在 4.升级node和npm,问题还在 5.猜想网络问题,问题解决 采坑总结&#xff1a…

【EI会议征稿】第三届计算机、人工智能与控制工程国际学术会议

The 3rd International Conference on Computer, Artificial Intelligence and Control Engineering (CAICE 2024) 第三届计算机、人工智能与控制工程国际学术会议 第三届计算机、人工智能与控制工程国际学术会议(CAICE 2024)将于2024年1月26-28日在西…

批量解压imagenet1k数据集中的zip文件

导言: 最近在处理imagenet1k数据集时,面对大量的zip包,手动一个一个解压显然不是明智的选择。作为程序员,我们可以采用批量解压的方法来提高效率,下面就是解决这一问题的方法和原因分析。 问题背景: image…