//Program: Pico_LLP_03a.ino ///////////
//Programmer: P.Thounthong
//up-date: 30.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 = 10;
uint32_t task2Time = 10;
uint32_t task3Time = 1000;
uint32_t task4Time = 1000;
uint32_t task5Time = 1000;
uint32_t currentTime;
//END set variables for Pico_MultiTasking_Template
//pointers for GPIO Registers
//uint32_t *gpioOUT = (uint32_t *)(0xD0000010);
uint32_t *gpioIN = (uint32_t *)(0xD0000004);
uint32_t *gpioOUT_SET = (uint32_t *)(0xD0000014);
uint32_t *gpioOUT_CLR = (uint32_t *)(0xD0000018);
//uint32_t *gpioOUT_XOR = (uint32_t *)(0xD000001C);
bool flag_SW1;
int LED_1 = 6;
int SW_1 = 16;
uint32_t BIT6 = 0b001000000;
uint32_t BIT16 = 0b00010000000000000000;
void setup() {
Serial1.begin(1152000);
Serial1.println("Start Pi Pico....");
pinMode(LED_1, OUTPUT);
pinMode(SW_1, INPUT_PULLUP);
}
void loop() {
currentTime = millis();
//Task1: read GPIO16
if (currentTime - previousMillis_1 >= task1Time) {
previousMillis_1 = currentTime;
if((*gpioIN & BIT16) == 0){
flag_SW1 = 0; //SW1 pressed
}
else {
flag_SW1 = 1; //SW1 unpressed
}
}
//Task2 here
if (currentTime - previousMillis_2 >= task2Time) {
previousMillis_2 = currentTime;
if(flag_SW1){
*gpioOUT_CLR = BIT6; //LED OFF
}
else{
*gpioOUT_SET = BIT6; //LED ON
}
}
//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 ////////////////////////////