//Program: Pico_LLP_ExerciseI.ino ///////////
//Programmer: P.Thounthong
//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 = 100; //LED0-3
uint32_t task2Time = 1000;
uint32_t task3Time = 1000;
uint32_t task4Time = 1000;
uint32_t task5Time = 10;
uint32_t currentTime;
//END set variables for Pico_MultiTasking_Template
//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);
//Set Table for LEDs
uint32_t ledTable[] = { 0b0001,
0b0011,
0b0111,
0b1111,
0b1110,
0b1100,
0b1000,
0b0000};
uint8_t a; //set index a
int BIT4 = 0b000010000 ;
void setup() {
Serial1.begin(1152000);
Serial1.println("Start Pi Pico....");
for(int i = 0; i < 5; i++){
pinMode(i, OUTPUT);
}
}
void loop() {
currentTime = millis();
//Task1 here
if (currentTime - previousMillis_1 >= task1Time) {
previousMillis_1 = currentTime;
*gpioOUT_CLR = 0b1111; //Clear LEDs all 4-bits
*gpioOUT_SET = ledTable[a]; //LED ON
a++; //increase index a
if(a==8){
a = 0; //initial index a = 0
}
}
//Task2 here
if (currentTime - previousMillis_2 >= task2Time) {
previousMillis_2 = currentTime;
*gpioOUT_XOR = BIT4 ;
}
//Task3 here
if (currentTime - previousMillis_3 >= task3Time) {
previousMillis_3 = currentTime;
}
//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 ////////////////////////////