arduino中SCoop库的简单应用案例
转载: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();
}

库文件下载地址
加载库文件
将下载到的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();}

使用该库的【任务】功能,首先要做三件事:
第一:引用库
#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();
}

使用该库的【时钟(又叫:计时器)】功能,首先要做三件事:
第一:引用库
#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库的简单应用案例的更多相关文章
- php中GD库的简单使用
在php中需要图像处理的地方GD库会发挥重要的作用,php可以创建并处理包括GIF,PNG,JPEG,WBMP以及XPM在内的多种图像格式,简单的举几个例子: 1.用GD库会创建一块空白图片,然后绘制 ...
- 利用python中的库文件简单的展示mnist 中的数据图像
import sys, os sys.path.append('F:\ml\DL\source-code') #导入此路径中 from dataset.mnist import load_mnist ...
- 关于Unity中使用刚体制作简单跑酷案例
一.步骤 1.创建一个Canvas 2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640 3.创建一个Image的UI节点作为Canvas的子 ...
- php中GD库的一些简单使用
今天了解了一些GD库的简单使用,现在稍微做一下总结! GD库是什么?,graphic device,图像工具库,gd库是php处理图形的扩展库,gd库提供了一系列用来处理图片的API,使用GD库可以处 ...
- solr简单搜索案例
solr简单搜索案例 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类.价格过滤搜索结果,也可以根据价格进行排序,实现分页. 架构分为: 1. solr服务器 2. ...
- 你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
目录 你我都有的需求 方式一:tee 方式二:mysql_use_result 推荐阅读 一.给研发同学看的面试指南 二.MySQL-视频 三.进阶MySQL中间件-视频 四.白日梦的云原生-笔记 五 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- QT中静态库的生成与使用
一. 静态库的生成 1. 测试目录: lib 2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...
随机推荐
- SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...
- 【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!
写在前面 相信大部分小伙伴在面试过程中,只会针对面试官提出的表面问题来进行回答.其实不然,面试官问的每一个问题都是经过深思熟虑的,面试的时间相对来说也是短暂的,面试官不可能在很短的时间内就对你非常了解 ...
- 剑指 Offer 56 - I. 数组中数字出现的次数
题目描述 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是\(O(n)\),空间复杂度是\(O(1)\). 示例1: 输入:nums ...
- css3渐变色实现小功能 ------ css(linaer-gradient)
由沿直线两种或多种颜色之间的渐进转换的图像.它的结果是数据类型的对象,这是一种特殊的类型. 与任何梯度一样,线性梯度没有内在维度 ; 即,它没有天然或优选的尺寸,也没有优选的比例.其具体尺寸将与其适用 ...
- 20190925-05Redis五大数据类型之String 000 026
- sublime3 激活
起因 这段时间sublime一直抽风,每次打开都提示让我更新. 身为强迫症的我当然不能忍! 方法 关闭自动更新 点击菜单栏"Preferences"=> "Sett ...
- 为ASP_NET应用程序启用SQL缓存
步骤一: sql数据库必须开启ServiceBroker服务,首先检测是否已经启用ServiceBroker,检测方法: SELECT DATABASEPROPERTYEX('dbName','IsB ...
- 微信小程序爬坑记
1.this.setData修改数组里的值1).data: { hide:[true,true] },this.setData({ 'hide[0]': false});2).var str = &q ...
- python基础一(安装、变量、循环、git)
一.开发语言分类 系统的开发语言有java.c++.c#.python.ruby.php等等,开发语言可分为编译型语言和解释型语言. 编译型语言就是写好代码之后就把代码编译成二进制文件,运行的时候运行 ...
- python变量及简单数据类型
python 目录 python 1.变量 1.变量的定义 2.变量的命名 3. 关键字 4.变量的命名规则 5.变量的类型 5.不同类型变量之间的计算 6.变量的输入 7.变量的格式化输出 8.格式 ...