arduino esp32简单跑一下freetros系统

在这个程序里面我写了两个任务,第一个任务是触摸传感器的检测,第二个任务是led闪烁;系统会自动帮我们做好任务调度,我们只需写好所需逻辑就可以了;附上实物图:

在这里插入图片描述
在这里插入图片描述
可以看到有双线程的效果,即灯一边按其特定频率闪烁的同时;触摸传感器也在不断检测是否有触摸时间并向串口发送数据;这就是freetros系统给我们带来的实时性效果。
最后附上程序:应注意当我们使用freertos例程进行我们自己程序的修改时应在setup 和 loop函数里面均加上delay(1000);进行一秒左右的延时,否则系统将不停地进行重启。
#if CONFIG_FREERTOS_UNICORE
#define ARDUINO_RUNNING_CORE 0
#else#define ARDUINO_RUNNING_CORE 1
#endif
int threshold = 25;
bool touch0detected = false;
bool touch1detected = false;
bool touch2detected = false;
// 定义任务函数
void Tasktouch( void *pvParameters );
void Taskled( void *pvParameters );
void touch_int()
{
touchAttachInterrupt(T0, gotTouch0, threshold); //IO4
touchAttachInterrupt(T4, gotTouch1, threshold); //IO13
touchAttachInterrupt(T5, gotTouch2, threshold); //IO12
}
void gotTouch0(){ //触摸中断0服务函数touch0detected = true;
}
void gotTouch1(){ //触摸中断1服务函数 touch1detected = true;
}
void gotTouch2(){ //触摸中断2服务函数 touch2detected = true;
}
void touch_judge(){
if(touch0detected)
{
touch0detected = false;
Serial.println(“T0”);
delay(500);
}
if(touch1detected){
touch1detected = false;
Serial.println(“T1”);
delay(500);
}
if(touch2detected){
touch2detected = false;
Serial.println(“T2”);
delay(500);
}
}
void setup() {
Serial.begin(115200);
pinMode(5,OUTPUT);
delay(1000);
xTaskCreatePinnedToCore( //创建任务 Tasktouch //任务
,
“Tasktouch” // 任务名字,随便起
,
1024 // 堆栈内存
,
NULL
,
1 // 优先级,0为最低
,
NULL
,
ARDUINO_RUNNING_CORE); //允许执行 xTaskCreatePinnedToCore( //创建任务 Taskled , “Taskled” , 1024 , NULL , 2 , NULL , ARDUINO_RUNNING_CORE); //允许执行
void loop(){
delay(1000);
}
void Tasktouch(void *pvParameters) // 触摸检测并触发中断
{ (void) pvParameters;
while(1)
{
touch_int();
touch_judge();
}
}
void Taskled(void *pvParameters) // LED闪烁
{ (void) pvParameters;
while(1)
{
digitalWrite(5,HIGH);
delay(500);
digitalWrite(5,LOW);
delay(500);
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值