转载:https://www.csdn.net/gather_27/MtTaggzsMDExMS1ibG9n.html

arduino中SCoop库的简单应用案例
首先这篇文章来在视频
https://v.youku.com/v_show/id_XNzYxMDQ1NDIw.html?refer=seo_operation.liuxiao.liux_00003308_3000_YvmIba_19042900
吃水不忘挖井人
1.SCoop库下载
https://github.com/soif/SCoop/tree/fix_scoop_compil
由于github不能下载单个文件,所以需要全部下载后再找出自己需要的文件



以下为简单例子实现每毫秒输出计数器的数值同时六号口的灯每秒闪烁一次

//1.引头文件
//2.setup mySCoop.start();
//loop yield();
//暂停使用sleep();
//sleep与delay的区别在于delay是全局暂停,sleep是分支暂停
#include<SCoop.h>//声明函数库
int count=0;
//简单的使用两种定义方式
//如果不需要定义端口这种方式最简单defineTaskLoop(X){}
//每毫秒输出计数器的数值
defineTaskLoop(Task2){
Serial.println(count++);
sleep(1);
}
//如果需要使用端口则这种定义可以兼顾端口定义和程序循环、
//六号口的灯每秒闪烁一次
//defineTask是一个词,不可隔开
defineTask(Task1)
void Task1::setup(){
pinMode(6,OUTPUT);
}
void Task1::loop(){
digitalWrite(6,!digitalRead(6));
sleep(1000);
}

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySCoop.start();

}

void loop() {
// put your main code here, to run repeatedly:
//loop里面需要使用yield()函数
yield();
}

2018-11-24 23:37:58 daybreak___ 阅读数 1938

库文件下载地址

GitHub下载地址

加载库文件

将下载到的SCoop文件夹放入Arduino\libraries中,并在新建ino文件时加载SCoop库文件

命令执行与调用

使用时在主程序的Setup函数中写入以下代码:

#include <SCoop.h>voidsetup(){
mySCoop.start();}voidloop(){yield();}

完整代码及子线程完整定义

注意延迟函数使用sleep();不要使用delay();
sleep();只在当前线程进行延迟,delay();则会在全局进行延迟。
实现线程1以1s的频率闪烁,线程2以2s的频率闪烁

#include <SCoop.h>defineTask(TaskTest1);//定义子线程1defineTask(TaskTest2);//定义子线程2void TaskTest1::setup()//线程1设定{pinMode(2, OUTPUT);}void TaskTest1::loop()//线程1循环{digitalWrite(2, HIGH);sleep(1000);digitalWrite(2, LOW);sleep(1000);}void TaskTest2::setup()//线程2设定{pinMode(3, OUTPUT);}void TaskTest2::loop()//线程2循环{digitalWrite(3, HIGH);sleep(2000);digitalWrite(3, LOW);sleep(2000);}voidsetup(){
mySCoop.start();}voidloop(){yield();}

2015-12-21 21:52:24 sdlgq 阅读数 11872

使用该库的【任务】功能,首先要做三件事:

第一:引用库
#include “SCoop.h”
【库文件下载地址】
http://www.dfrobot.com.cn/community/forum.php?mod=attachment&aid=MTI4MzZ8MWFmMjk1MGF8MTQ1MDcwNTA2M3wwfD

https://share.weiyun.com/45420032c079bbf55a42f32d6a023ca2

第二:setup函数里,调用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函数里,调用yield()命令
void loop() {
yield();
}

接下来就可以使用【任务】了。有两种定义方式,请继续往下看:
1、完整定义:定义【任务】的setup和loop两个函数。
定义一个名字为“TaskTest”的任务:
defineTask(TaskTest); //用defineTask定义一个任务,名为TaskTest
void TaskTest::setup() //定义该任务的setup()函数,用于初始化设置。
{
//这里是任务的setup函数的内容
}
void TaskTest::loop() //定义该任务的loop()函数,用于循环执行代码。
{
//这里是任务的loop函数的内容
}

2、快速定义:仅定义任务的loop函数
如果这个线程中执行的动作不需要初始化setup,只需要循环loop的话,可以直接使用defineTaskLoop()快速定义该线程任务,如下:
defineTaskLoop(TaskTest1)
{
//这里是任务的loop函数的内容
}

注意一点,使用此库之后,请使用sleep(ms)作为延时,不要用delay()了。
因为sleep(ms)只针对当前线程。而delay(ms)是针对全局的。

最后来一个完成的演示吧,2个LED分别以100毫秒和1秒的速度闪烁。12和13引脚分别接LED,然后运行代码看看效果吧。

#include "SCoop.h"
//完整定义defineTask(TaskTest);
void TaskTest::setup()
{
pinMode(13, OUTPUT);
}
void TaskTest::loop()
{
digitalWrite(13, HIGH);sleep(1000);
digitalWrite(13, LOW);
sleep(1000);
} //快速定义defineTaskLoop(TaskTest1)
{
digitalWrite(12, HIGH);
sleep(100);
digitalWrite(12, LOW);
sleep(100);
} void setup() {
pinMode(12, OUTPUT);
mySCoop.start();
} void loop()
{
yield();
}
2015-12-22 20:45:26 sdlgq 阅读数 7651

使用该库的【时钟(又叫:计时器)】功能,首先要做三件事:

第一:引用库
#include “SCoop.h”
【库文件下载地址】
http://www.dfrobot.com.cn/community/forum.php?mod=attachment&aid=MTI4MzZ8MWFmMjk1MGF8MTQ1MDcwNTA2M3wwfD

第二:setup函数里,调用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函数里,调用yield()命令
void loop() {
yield();
}

接下来就可以使用【时钟】了。有两种定义方式,请继续往下看:
1、完整定义:定义线程的【setup】和【run】两个函数。
定义一个名字为“Tmr”的时钟:
defineTimer(Tmr,1000); //用defineTimer定义一个时钟,名为Tmr,周期为1000ms
void Tmr::setup() //定义该时钟的setup()函数,用于初始化设置。
{
//这里是时钟的setup函数的内容
}
void Tmr::run() //定义该时钟的run()函数,用于执行周期事件。
{
//这里是时钟的run函数的内容
}

2、快速定义:仅定义时钟的run函数
如果这个时钟不需要初始化setup,只需要周期事件run的话,可以直接使用defineTimerRun()快速定义该线程任务,如下:
defineTimerRun(Tmr,1000) //用defineTimerRun定义一个时钟,名为Tmr,周期为1000ms
{
//小技巧,如果某条件下,此时暂不需要执行周期事件,只需要在第一句返回,return 即可。可以用全局变量作为参考,从程序外部进行控制。
//这里是时钟的run函数的内容
//小技巧:如果此时需要动态修改时钟周期,只需要 schedule(新周期) 即可。可以用全局变量作为参考,从程序外部进行控制。
}

注意一点,使用此库之后,请使用sleep(ms)作为延时,不要用delay()了。
因为sleep(ms)只针对当前线程。而delay(ms)是针对全局的。

代码就不写了,参考 【Arduino - 多线程库SCoop应用 之 任务】。

arduino中SCoop库的简单应用案例的更多相关文章

  1. php中GD库的简单使用

    在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...

  2. 利用python中的库文件简单的展示mnist 中的数据图像

    import sys, os sys.path.append('F:\ml\DL\source-code') #导入此路径中 from dataset.mnist import load_mnist ...

  3. 关于Unity中使用刚体制作简单跑酷案例

    一.步骤 1.创建一个Canvas 2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640 3.创建一个Image的UI节点作为Canvas的子 ...

  4. php中GD库的一些简单使用

    今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...

  5. solr简单搜索案例

    solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...

  6. 你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!

    目录 你我都有的需求 方式一:tee 方式二:mysql_use_result 推荐阅读 一.给研发同学看的面试指南 二.MySQL-视频 三.进阶MySQL中间件-视频 四.白日梦的云原生-笔记 五 ...

  7. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  8. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  9. QT中静态库的生成与使用

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...

随机推荐

  1. 【Nginx】如何基于主从模式搭建Nginx+Keepalived双机热备环境?这是最全的一篇了!!

    写在前面 最近出版了<海量数据处理与大数据技术实战>,详情可以关注 冰河技术 微信公众号,查看<我的<海量数据处理与大数据技术实战>出版啦!>一文. 也有不少小伙伴 ...

  2. CRMEB小程序商城首页强制在微信中打开解决办法

    先说一下,这也算不上二开,小小修改一下而已. CRMEB安装完成后,PC端直接打开首页,真是一言难尽~ 然后,我就想了,用手机浏览器或者PC浏览器直接打开首页也没啥用,干脆直接强制在微信中打开算了! ...

  3. jq cdn地址

    百度CDN支持版本2.0.3, 2.0.2, 2.0.1, 2.0.0,1.11.1, 1.10.2, 1.10.1, 1.10.0, 1.9.1, 1.9.0, 1.8.3, 1.8.2, 1.8. ...

  4. 小程序开发-微信小程序开发入门

    分享一个微信小程序开发的基本流程,仅供参考. 第一步:注册微信小程序公众号,注册成功后,登录微信公众号管理后台,等待下一步操作. 第二步:进入微信小程序的后台后,下载微信内置的微信小程序开发者工具,以 ...

  5. SpringSecurity中的Authentication信息与登录流程

    目录 Authentication 登录流程 一.与认证相关的UsernamePasswordAuthenticationFilter 获取用户名和密码 构造UsernamePasswordAuthe ...

  6. Activiti7 zip部署,查询及其删除

    zip部署 package com.itheima.activiti; import org.activiti.engine.ProcessEngine; import org.activiti.en ...

  7. 20190917-01VI/VIM编辑器 000 002

    VI是Unix 操作系统和类Unix操作系统中最通用的文本编辑器. VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器.可以主动的以字体颜色便被语法的正确性,方便程序设计.VIM与VI编辑器完全 ...

  8. 使用SVG symbols建立图标系统

    在实现Web项目的图标系统时,SVG是一个不错的选择.虽然使用SVG创建图标系统有多种方式.在这篇文章中,我们只看其中一种:SVG symbols.这项技术基于两个元素的使用:<symbol&g ...

  9. Django 仿ajax传递数据(Django十)

    之前用form表单传递数据,没有遇到任何问题 具体见:https://blog.csdn.net/qq_38175040/article/details/104867747 然后现在我想用ajax传递 ...

  10. get、post请求方式在jmeter中使用步骤

    jmeter:性能测试工具,压测 一.jmeter工具测试接口时使用步骤: 1.测试计划右键--添加--Threads(Users)--线程组(线程数就是并发数) 2.线程组右键--Sampler-- ...