//Pico_Analog_02_Multitasking.ino
uint32_t previousTime0 = 0;
uint32_t previousTime1 = 0;
uint32_t previousTime2 = 0;
uint32_t previousTime3 = 0;
uint32_t currentTime = 0;
uint32_t time_task0 = 100;
uint32_t time_task1 = 100;
uint32_t time_task2 = 100;
uint32_t time_task3 = 1000;
float vQ0; //Q = Discrete value, Quantization number
float n;
float vQ1; //Q = Discrete value, Quantization number
float T;
int AnalogResolution = 12; //1...12
bool state;
bool state_SW =1;
int SW0 = 22;
void setup() {
Serial1.begin(115200);
Serial1.println("...START...");
Serial1.println("");
analogReadResolution(AnalogResolution); //Set Resolution
pinMode(LED_BUILTIN, OUTPUT);
pinMode(SW0, INPUT_PULLUP);
}
void loop() {
currentTime = millis();
// Task0
if(currentTime - previousTime0 >= time_task0){
previousTime0 = currentTime;
state_SW = digitalRead(SW0);
}
// Task1 : Analog Read
if(currentTime - previousTime1 >= time_task1){
previousTime1 = currentTime;
if(state_SW==0){
vQ0 = analogRead(A0); //A0 @GPIO26, A1, A2
vQ1 = analogRead(A1);
}
}
// Task2 : Display
if(currentTime - previousTime2 >= time_task2){
previousTime2 = currentTime;
if(state_SW==0){
Serial1.print("vQ0 = ");
Serial1.print(vQ0,0);
n = (vQ0/4096)*1000;
//3.3 <==> 1000 rpm
Serial1.print(" => n = ");
Serial1.print(n);
Serial1.println(" rpm");
Serial1.print("vQ1 = ");
Serial1.print(vQ1,0);
T = (vQ1/4096)*50;
//3.3 <==> 50 Nm
Serial1.print(" => T = ");
Serial1.print(T);
Serial1.println(" Nm");
}
}
// Task3 :
if(currentTime - previousTime3 >= time_task3){
previousTime3 = currentTime;
digitalWrite(LED_BUILTIN,state);
state = !state;
}
}