как реализовать задержку?

Александр0411
Offline
Зарегистрирован: 10.01.2017

Всем здравствуйте. Я сделал 2 теромометра и индикатор заряда аккумулятра.

Дела в том что заряд показывает в процентах и она постоянно скачет (может я не совсем правильно саписал код программы, но это не суть, работает и ладно) где то на 5 %. Так вот как сделать задержку заряда аккумулятора, но при этом не делать задержку на термометр?

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <OneWire.h>
#include <DallasTemperature.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#define DS18B20 2  // Провод данных подключен к порту 2 на Arduino
int analogInput = 0;
float vout = 0.0;
float vin = 0.0;
float out = 0.0;
float R1 = 100000.0; // сопротивление R1 (100K)
float R2 = 10000.0; // сопротивление R2 (10K)
float v_max = 4.2; // max напряжение
int value = 0;

OneWire oneWire(DS18B20);
DallasTemperature sensors(&oneWire);

void setup() {
    pinMode(analogInput, INPUT);
    display.begin();    // инициализация и очистка дисплея
    display.clearDisplay();
    display.display();
    display.setContrast(50); // установка контраста    
}
void loop() {
    float temp_1 = 0.0;
    float temp_2 = 0.0;
    temp_1 = sensors.getTempCByIndex(1);   // дом
    temp_2 = sensors.getTempCByIndex(0);   // улица
    sensors.requestTemperatures(); // Считываем показания температуры
    display.setTextSize(1);  // установка размера шрифта
    display.setTextColor(BLACK); // установка цвета текста

    display.setCursor(0,3); // установка курсора
    display.println("street");
    display.setCursor(48,3); // установка курсора
    display.println("house");

    // температура в доме
    display.setCursor(36,13); // установка курсора
    display.setTextSize(2);  // установка размера шрифта
    display.println(temp_1,1);

    // температура на улице
      display.setCursor(0,31); // установка курсора
      display.println(temp_2,1);
  
    // заряд батареи
    value = analogRead(analogInput);
    vout = (value * 5.0) / 1024.0;
    vin = vout / (R2/(R1+R2)); 
    if (vin<2.75) // min заряд аккумулятрора
    {
      vin=0;
    }
    out = (vin*100) / v_max;
    if (out>100) {
      out=100;
       }
     display.setTextSize(1);  // установка размера шрифта

    display.setCursor(78,38); // установка курсор
    display.println("%");

    if (out == 100) {
      display.setCursor(58,38); // установка курсора
      display.println(out,0);
      }

      else if (out > 9)  {
        display.setCursor(64,38); // установка курсора
        display.println(out,0);
        }
 
        else  {
          display.setCursor(70,38); // установка курсора
          display.println(out,0);
          }  
          
          display.display();
          display.clearDisplay();  // очистка дисплея
          
    }

 

bwn
Offline
Зарегистрирован: 25.08.2014

Ветка "Проекты" предназначена для представления готовых проектов.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Александр0411 пишет:

как сделать задержку заряда аккумулятора, но при этом не делать задержку на термометр?

1-й способ

Заводите переменную. перед тем как заняться чтением батареи и выводом заряда увеличиваете на 1. И проверяете не достигла ли она определенного значения, скажем >=1000 (подберете экспериментально) если нет, то всю дальнейшую часть пропускаете. Если да, то меряете и показываете, а переменную сбрасываете в 0

2-й Способ

Примерно как 1-й только в качестве условия используете millis()