//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;
uint32_t task2Time = 50;
uint32_t task3Time = 1000;
uint32_t task4Time = 1000;
uint32_t task5Time = 1000;
uint32_t currentTime;
//END set variables for Pico_MultiTasking_Template
//define GPIO here
uint8_t SW1 =2;
uint8_t LED1 =3;
uint8_t LED2 =4;
uint8_t LED3 =5;
//define global variables here
bool flag_1;
bool flag_Interrupt1;
bool flag_countUP_DOWN; //0=up, 1=down
//set Timer PWM here
uint32_t freq = 500; //100...1MHz
uint32_t PWMresolution = 8; //can set 1…16,
int32_t dutyCycle0;
//Interrupt Service Routine here
void ISR_SW1() {
flag_Interrupt1 = 1; //set flag
}
void setup() {
Serial1.begin(115200);
Serial1.println("Hello, Cute Student");
analogWriteFreq(freq);
analogWriteResolution(PWMresolution);
//set GPIO here
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(SW1, INPUT_PULLUP);
attachInterrupt(SW1, ISR_SW1, FALLING);
//LOW, HIGH, CHANGE, FALLING, RISING
noInterrupts(); //Disable interrupt
interrupts(); //Enable interrupt
}
void loop() {
currentTime = millis(); //read current time for Multi-Tasks
//Task1 หลอดไฟ LED1 & LED2 ติดสลับกันที่นี่
if (currentTime - previousMillis_1 >= task1Time) {
previousMillis_1 = currentTime;
if(flag_1) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
flag_1 = !flag_1; //flag_1 toggle!
} //End Task1
//Task2 for interrupt operation%
if (currentTime - previousMillis_2 >= task2Time) {
previousMillis_2 = currentTime;
if(flag_Interrupt1){
if(!flag_countUP_DOWN) //LED up
{
analogWrite(LED3, dutyCycle0);
Serial1.println(dutyCycle0);
dutyCycle0 += 10; //Fading
if(dutyCycle0 >= 255){
dutyCycle0=255;
flag_countUP_DOWN = 1; //for next LED down
}
}
if(flag_countUP_DOWN) //LED down%
{
analogWrite(LED3, dutyCycle0);
Serial1.println(dutyCycle0);
dutyCycle0 -= 10; //Fading
if(dutyCycle0 <= 0){
digitalWrite(LED3, LOW);
dutyCycle0=0;
flag_countUP_DOWN = 0; //for next LED up
flag_Interrupt1 = 0; //Clear Interrupt
}
}
}
} //End Task2
//Task3 ///////////////////////////////
if (currentTime - previousMillis_3 >= task3Time) {
previousMillis_3 = currentTime;
} //End Task3
//Task4 ///////////////////////////////
if (currentTime - previousMillis_4 >= task4Time) {
previousMillis_4 = currentTime;
} //End Task4
//Task5 ///////////////////////////////
if (currentTime - previousMillis_5 >= task5Time) {
previousMillis_5 = currentTime;
} //End Task5
} //End Program here ////////////////////////////////////
Loading
pi-pico-w
pi-pico-w