Вольтметр с прогресс-баром

Нет ответов
Hattab
Offline
Зарегистрирован: 30.06.2019
 
Доброго!
Вольтметр цифровой на 1602 с прогресс-баром(аналоговой шкалой) внизу для визуального наблюдения динамики потребляемого тока. ( На данный момент в БП стоит стрелочный индикатор на ток, надумал заменить.
Схема стандартная, фото попытаюсь добавить). Для ремонта ноутбуков, ( и не только), по динамике потребляемого тока можно определить определённую степень исправности. Код составлен из разных заготовок, на скорую руку, строго не пинайте. 
 
 
#include <LiquidCrystal.h>
#define lenght 16.0
double percent=100.0;
unsigned char b;
unsigned int peace;
// рисунок бар
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
byte p1[8] = {
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10};
byte p2[8] = {
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18};
byte p3[8] = {
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C};
byte p4[8] = {
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E};
byte p5[8] = {
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F};

void setup()   {
  delay(100);
  lcd.createChar(0, p1);
  lcd.createChar(1, p2);
  lcd.createChar(2, p3); //бар
  lcd.createChar(3, p4);
  lcd.createChar(4, p5);
  lcd.begin(16, 2);
/////////10 bit 0...1023 /////////
  pinMode(A0,INPUT); // U1
  pinMode(A2,INPUT); // A1  
}

int a0,a1,n0,n1;
float u0,u1;

void loop(){
 a0 = analogRead(A0); //напруга
 a1 = analogRead(A2); //ток

u0 = a0*30.0/1023;//напруга
u1 = a1*10.0/1023; //ток 

if(u0>=10){n0=1;}else{n0=2;}
if(u1>=10){n1=1;}else{n1=2;}

  lcd.setCursor(0,0); 
  lcd.print(u0,n0);
  lcd.print(" B   ");
  lcd.print(u1,n1);
  lcd.print(" A "); 
  
  delay(50);

unsigned int value = analogRead(2); 
  percent = value/1024.0*300.0; 

  lcd.print(percent);

  lcd.setCursor(0,1); 
double a=lenght/50*percent;
  
  if (a>=1) {
    for (int i=1;i<a;i++) {
      lcd.write(4);
      b=i;
    }
    a=a-b;
  }
  peace=a*5;
  switch (peace) {
  case 0:
    break;
  case 1:
    lcd.print((char)0);
    break;
  case 2:
    lcd.write(1);
    break;
  case 3:
    lcd.write(2);
    break;
  case 4:
    lcd.write(3); 
    break;
  }

  for (int i =0;i<(lenght-b);i++) {
    lcd.print(" ");
  }
}