Update rp2040-zero/voltage-current-monitor-usb.ino
This commit is contained in:
@@ -0,0 +1,278 @@
|
||||
//Library inclusions
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include <Fonts/FreeMono9pt7b.h>//not needed, idk why its here
|
||||
#include "setup.h" //setup file, dont delete, else needed variables wont be declared
|
||||
#include "dseg7_7seggchan_mini_font_48p_regular.h"//7segg-chan lives here! (fontfile, comment out if 7segg-chan is disabled (i told you not to >:( ) or default fonts are enabled))
|
||||
#include "dseg7_classic_mini_font_11p_regular.h"//font, comment out or delete if default fonts are enabled
|
||||
#include "DejaVu_Sans_Mono_font_12p_regular.h"//font, comment out or delete if default fonts are enabled
|
||||
#include <hardware/adc.h> //files for adc
|
||||
#include "images.h"//bitmaps, comment out or delete if bitmaps are disabled
|
||||
|
||||
//screen definitions
|
||||
#define SCREEN_WIDTH 128
|
||||
#define SCREEN_HEIGHT 64
|
||||
#define OLED_RESET -1
|
||||
#define SCREEN_ADDRESS 0x3C
|
||||
|
||||
//variable definitions
|
||||
float voltage = 0;
|
||||
float current = 0;
|
||||
float wattage = 0;
|
||||
int usb_score = 8;
|
||||
int uptime_min = 0;
|
||||
int uptime_sec = 0;
|
||||
int raw_voltage = 0;
|
||||
int raw_current = 0;
|
||||
int counter = 0;
|
||||
unsigned long old_millis = 0;
|
||||
unsigned long old_millis_clock = 0;
|
||||
|
||||
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
|
||||
void setup() {
|
||||
old_millis = millis();
|
||||
old_millis_clock = millis();
|
||||
analogReadResolution(12);
|
||||
//adc_init();
|
||||
//adc_set_temp_sensor_enabled(true);
|
||||
Serial.begin(115200);
|
||||
//sets i2c pins
|
||||
Wire.setSDA(I2C_SDA);
|
||||
Wire.setSCL(I2C_SCL);
|
||||
//i2c start
|
||||
Wire.begin();
|
||||
|
||||
//display init
|
||||
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)){
|
||||
Serial.println("Display Error: Check Connections");
|
||||
Serial.print("SDA=");
|
||||
Serial.println(I2C_SDA);
|
||||
Serial.print("SCL:");
|
||||
Serial.println(I2C_SCL);
|
||||
while(true){
|
||||
delay(100);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
raw_voltage = analogRead(VOLTAGE_PIN);
|
||||
voltage = (raw_voltage / 4095.0) * 3.3 * voltage_divider;
|
||||
raw_current = analogRead(CURRENT_PIN);
|
||||
current = (raw_current / 4095.0) * 3.3 * 20 ;
|
||||
wattage = current * voltage;
|
||||
if(use_usbscore){
|
||||
usb_score = calculateUSBScore();
|
||||
}
|
||||
else{
|
||||
usb_score = default_usbscore;
|
||||
}
|
||||
drawDisplay();
|
||||
runCounter(1000);
|
||||
countUptime();
|
||||
delay(100);
|
||||
}
|
||||
|
||||
//display draw function
|
||||
void drawDisplay() {
|
||||
if(!use_default_fonts){
|
||||
display.clearDisplay();
|
||||
display.setTextColor(WHITE);
|
||||
display.setTextSize(1);
|
||||
if(use_7seggchan){
|
||||
display.setFont(&DSEG7_7SEGGCHAN_MINI_Regular_48);
|
||||
display.setCursor(84, 66);
|
||||
if(usb_score == -1){
|
||||
display.println("-");
|
||||
}
|
||||
else if (usb_score == -2) {
|
||||
display.println(" ");
|
||||
}
|
||||
else {
|
||||
display.println(usb_score);
|
||||
}
|
||||
display.drawFastVLine(80,16,48,WHITE);
|
||||
}
|
||||
|
||||
display.drawFastHLine(0,16,128,WHITE);
|
||||
display.setCursor(0,64);
|
||||
display.setFont(&DialogInput_plain_12);
|
||||
display.print("W:");
|
||||
display.setCursor(0, 48);
|
||||
display.print("A:");
|
||||
display.setCursor(0,32);
|
||||
display.print("V:");
|
||||
display.setFont(&DSEG7_Classic_Mini_Regular_11);
|
||||
display.setCursor(13, 64);
|
||||
display.print(wattage);
|
||||
display.setCursor(13,48);
|
||||
display.print(current);
|
||||
display.setCursor(13,32);
|
||||
display.print(voltage);
|
||||
if(use_bitmaps){
|
||||
display.setCursor(16,0);
|
||||
display.drawBitmap(0,0,temperature_bitmap,16,16,WHITE);
|
||||
display.setFont(&DSEG7_Classic_Mini_Regular_11);
|
||||
display.setCursor(16,16);
|
||||
}
|
||||
else {
|
||||
display.setCursor(0,16);
|
||||
}
|
||||
display.print(analogReadTemp(),1);
|
||||
display.print(" C°");
|
||||
if(use_bitmaps){
|
||||
display.drawBitmap(65,0,clock_bitmap,16,16,WHITE);
|
||||
display.setCursor(82,16);
|
||||
}
|
||||
else{
|
||||
display.setCursor(82,16);
|
||||
}
|
||||
display.drawFastVLine(62,0,16,WHITE);
|
||||
if(uptime_min<10){
|
||||
display.print("0");
|
||||
}
|
||||
display.print(uptime_min);
|
||||
display.print(":");
|
||||
display.setFont(&DSEG7_Classic_Mini_Regular_11);
|
||||
if(uptime_sec < 10){
|
||||
display.print("0");
|
||||
}
|
||||
display.print(uptime_sec);
|
||||
display.display();
|
||||
}
|
||||
else {
|
||||
display.clearDisplay();
|
||||
display.drawFastHLine(0,16,128,WHITE);
|
||||
display.setTextColor(WHITE);
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0,56);
|
||||
display.setFont(NULL);
|
||||
display.print("W:");
|
||||
display.setCursor(0, 44);
|
||||
display.print("A:");
|
||||
display.setCursor(0,32);
|
||||
display.print("V:");
|
||||
display.setFont(NULL);
|
||||
display.setCursor(13, 56);
|
||||
display.print(wattage);
|
||||
display.setCursor(13,44);
|
||||
display.print(current);
|
||||
display.setCursor(13,32);
|
||||
display.print(voltage);
|
||||
if(use_bitmaps){
|
||||
display.setCursor(16,0);
|
||||
display.drawBitmap(0,0,temperature_bitmap,16,16,WHITE);
|
||||
display.setFont(NULL);
|
||||
display.setCursor(16,8);
|
||||
}
|
||||
else {
|
||||
display.setCursor(0,8);
|
||||
}
|
||||
display.print(analogReadTemp(),1);
|
||||
display.print(" C");
|
||||
if(use_bitmaps){
|
||||
display.setCursor(16,0);
|
||||
display.drawBitmap(0,0,temperature_bitmap,16,16,WHITE);
|
||||
display.setCursor(16,16);
|
||||
}
|
||||
else {
|
||||
display.setCursor(0,8);
|
||||
}
|
||||
|
||||
if(use_bitmaps){
|
||||
display.drawBitmap(65,0,clock_bitmap,16,16,WHITE);
|
||||
display.setCursor(82,8);
|
||||
}
|
||||
else{
|
||||
display.setCursor(94,8);
|
||||
}
|
||||
display.drawFastVLine(62,0,16,WHITE);
|
||||
if(uptime_min<10){
|
||||
display.print("0");
|
||||
}
|
||||
display.print(uptime_min);
|
||||
display.print(":");
|
||||
display.setFont(NULL);
|
||||
if(uptime_sec < 10){
|
||||
display.print("0");
|
||||
}
|
||||
display.print(uptime_sec);
|
||||
display.display();
|
||||
}
|
||||
}
|
||||
|
||||
int calculateUSBScore(){ //returns score depending on usb voltage, gets displayed as 7segg-chan
|
||||
if(voltage < 3 || voltage > 8){
|
||||
if(counter == 0){
|
||||
return -1 ;
|
||||
}
|
||||
else {
|
||||
return -2 ;
|
||||
}
|
||||
}
|
||||
else if (voltage <3.5 || voltage > 6.5){
|
||||
return 0 ;
|
||||
}
|
||||
else if(voltage < 3.7 || voltage > 6.3){
|
||||
return 1 ;
|
||||
}
|
||||
else if (voltage < 4 || voltage > 6) {
|
||||
return 2 ;
|
||||
}
|
||||
else if (voltage < 4.2 || voltage > 5.8 ){
|
||||
return 3 ;
|
||||
}
|
||||
else if (voltage < 4.4 || voltage > 5.6){
|
||||
return 4 ;
|
||||
}
|
||||
else if (voltage < 4.6 || voltage > 5.4){
|
||||
return 5;
|
||||
}
|
||||
else if (voltage < 4.7 || voltage > 5.3){
|
||||
return 6;
|
||||
}
|
||||
else if (voltage < 4.8 || voltage > 5.2){
|
||||
return 7 ;
|
||||
}
|
||||
else if (voltage < 4.9 || voltage > 5.1){
|
||||
return 8 ;
|
||||
}
|
||||
else if (voltage < 5.1 || voltage > 4.9){
|
||||
return 9 ;
|
||||
}
|
||||
else {
|
||||
return -1 ;
|
||||
}
|
||||
}
|
||||
//counter for any blink animations
|
||||
void runCounter(int time){
|
||||
if (millis() > old_millis + time){
|
||||
if(counter == 0){
|
||||
counter = counter + 1;
|
||||
}
|
||||
else {
|
||||
counter = 0;
|
||||
}
|
||||
old_millis = millis();
|
||||
}
|
||||
}
|
||||
|
||||
//counts uptime
|
||||
void countUptime(){
|
||||
if (old_millis_clock+1000 < millis()){//old millidonalds had a farm heia heya hoo
|
||||
uptime_sec =uptime_sec + 1;
|
||||
if (uptime_sec >59){
|
||||
uptime_sec = 0;
|
||||
uptime_min = uptime_min +1;
|
||||
}
|
||||
if (uptime_min > 99){
|
||||
uptime_min = 0;
|
||||
uptime_sec = 0;
|
||||
}
|
||||
old_millis_clock = millis();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user