//Program: Pico_LCD03.ino /////////////////////////////////////
//Programmer: P.Thounthong
//Date: 2024.09.22
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
//5 tasks template here
uint32_t previousTime1;
uint32_t previousTime2;
uint32_t previousTime3;
uint32_t previousTime4;
uint32_t previousTime5;
uint32_t time_task1 = 1000;
uint32_t time_task2 = 1000;
uint32_t time_task3 = 100;
uint32_t time_task4 = 1000;
uint32_t time_task5 = 1000;
uint32_t currentTime = 0;
//END 5 tasks template here
uint8_t LED1 = 16;
float vQ1; //voltage
float vA1;
float vQ2; //Current
float vA2;
uint8_t AnalogResolution = 12;
//set PWM here
uint16_t freq = 500; //100...1MHz
uint8_t resolution = 10;
int16_t dutyCycle0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial1.begin(115200);
pinMode(LED1, OUTPUT);
analogWriteFreq(freq);
analogWriteResolution(resolution);
Wire.setSDA(8);
Wire.setSCL(9);
Wire.begin();
lcd.begin();
analogReadResolution(AnalogResolution);
lcd.setCursor(0, 1);
lcd.print("V(V)=");
lcd.setCursor(0, 0);
lcd.print("I(A)=");
}
void loop() {
currentTime = millis();
// Task1 : Analog Read
if(currentTime - previousTime1 >= time_task1){
previousTime1 = currentTime;
vQ1 = analogRead(A0); //A0 @GPIO26, A1, A2
vQ2 = analogRead(A1); //A0 @GPIO26, A1, A2
vA1 = (vQ1/4096)*300; //Vmax = 500 V
vA2 = (vQ2/4096)*100; //Imax = 100 A
}
// Task2 : LCD display
if(currentTime - previousTime2 >= time_task2){
previousTime2 = currentTime;
lcd.setCursor(6, 0);
lcd.print(" "); //Clear display
lcd.setCursor(6, 0);
lcd.print(vA2,3);
lcd.setCursor(6, 1);
lcd.print(" "); //Clear display
lcd.setCursor(6, 1);
lcd.print(vA1,3);
}
// Task3 : fading LED1
if(currentTime - previousTime3 >= time_task3){
previousTime3 = currentTime;
analogWrite(LED1, dutyCycle0);
Serial1.println(dutyCycle0);
dutyCycle0 += 50; //Fading
if (dutyCycle0 >= 1023) {
dutyCycle0 = 0; //initial dutyCycle0
}
}
// Task4 : empty
if(currentTime - previousTime4 >= time_task4){
previousTime4 = currentTime;
}
// Task5 : empty
if(currentTime - previousTime5 >= time_task5){
previousTime5 = currentTime;
}
} //END program here! ///////////////////////