//Program: Pico_LLP_01c.ino //////////////////
//Programmer: P.Thounthong
//up-date: 26.09.2024
//set variables for MultiTasking Template, here 5 tasks
uint32_t previousMillis_1;
uint32_t previousMillis_2;
uint32_t previousMillis_3;
uint32_t previousMillis_4;
uint32_t previousMillis_5;
//here 1000 = 1 second
uint32_t task1Time = 1000; //LED0
uint32_t task2Time = 2000; //LED1
uint32_t task3Time = 1000;
uint32_t task4Time = 1000;
uint32_t task5Time = 10;
uint32_t currentTime;
//END set variables for Pico_MultiTasking_Template
uint8_t LED0 = 6; //GP6 at pin9
uint8_t LED1 = 1; //GP6 at pin9
bool flag_LED0;
bool flag_LED1;
uint32_t ZERO = 0; //all 32 bits are zero =000000=000b
uint32_t BIT6 = 0b1000000; //bit6 = 1
uint32_t BIT1 = 0b0000010; //bit6 = 1
//pointers for GPIO Registers
uint32_t *gpioOUT = (uint32_t *)(0xD0000010);
uint32_t *gpioOUT_SET = (uint32_t *)(0xD0000014);
uint32_t *gpioOUT_CLR = (uint32_t *)(0xD0000018);
uint32_t *gpioOUT_XOR = (uint32_t *)(0xD000001C);
void setup() {
Serial1.begin(1152000);
Serial1.println("Start Pi Pico....");
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
}
void loop() {
currentTime = millis();
//Task1 here
if (currentTime - previousMillis_1 >= task1Time) {
previousMillis_1 = currentTime;
if(flag_LED0){
*gpioOUT_SET = BIT6; //bit6 = 1
}
else{
*gpioOUT_CLR = BIT6; //bit6 = 0
}
flag_LED0 = !flag_LED0; //Toggle flag
}
//Task2 here
if (currentTime - previousMillis_2 >= task2Time) {
previousMillis_2 = currentTime;
if(flag_LED1){
*gpioOUT_SET = BIT1; //bit6 = 1
}
else{
*gpioOUT_CLR = BIT1; //bit6 = 0
}
flag_LED1 = !flag_LED1; //Toggle flag
}
//Task3 here
if (currentTime - previousMillis_3 >= task3Time) {
previousMillis_3 = currentTime;
//work1
//work2
}
//Task4 here
if (currentTime - previousMillis_4 >= task4Time) {
previousMillis_4 = currentTime;
//work1
//work2
}
//Task5 here
if (currentTime - previousMillis_5 >= task5Time) {
previousMillis_5 = currentTime;
//work1
//work2
}
} //END program ////////////////////////////