Salut,
ich habe einen weiteren Test gemacht, der zeit, wie schön man hier die Task steuern kann. In dem Test habe ich auf allen pins der linken Seite LEDs (mein erster Wing). Diese werde mit jeweils einem Task zum blinken gebracht. Im loop() schalte ich dann alle zwei Sekunden die Periodenzeiten um. Absichtlich benutze ich dabei delay() um zu zeigen, dass die Tasks im Hintergrund laufen:
/*
Blink Task (tested in UECIDE 0.8.7)
Utlizing the chipKIT task manager.
This example code is in the public domain.
*/
#include "System_Defs.h"
const uint8_t LEFT=0;
const uint8_t RIGHT=1;
uint8_t nP[2][8] = {
{
0,17, 9,10,11,12,13,14 }
,{
18,17, 1, 2, 3, 6, 7, 8 }
}; // pins of version 1.0 using DP32 board definitions
volatile int blink_id[8];
unsigned long blink_var[8];
int toggle_id;
unsigned long toggle_var;
volatile int state = 0;
void blink_task(int id, void * tptr) {
int led_pin;
unsigned long period;
period = getTaskPeriod(id);
led_pin = (int)getTaskVar(id);
digitalWrite(led_pin, !digitalRead(led_pin)); // Toggle pin state
}
void toggle_task() {
switch (state){
case 0:
for (uint8_t i=0; i<8; i++){
setTaskPeriod(blink_id[i], 100);
}
state++;
break;
case 1:
for (uint8_t i=0; i<8; i++){
setTaskPeriod(blink_id[i], (200+i*10));
}
state=0;
break;
}
}
void setup() {
for (uint8_t i=0; i<8; i++){
pinMode(nP[LEFT][i], OUTPUT);
digitalWrite(nP[LEFT][i],LOW);
blink_id[i] = createTask(blink_task, 200, TASK_ENABLE, &blink_var[i]);
setTaskVar(blink_id[i], (void *)nP[LEFT][i]);
}
}
void loop() {
toggle_task();
delay(2000);
}
Ciao, Mathias